【发布时间】:2019-02-22 14:42:04
【问题描述】:
以下伪代码的递归关系和时间复杂度是多少?
temp = 1
repeat
for i=1 to n
temp = temp +1
n=n/2
until n>=1
【问题讨论】:
-
复发关系?这里的递归在哪里?
-
据我所知,可以在此定义递归关系,因为它会再次运行相同的循环(for 循环),每次 n 的值是一半,所以 T(n/2) 会成为复发的一部分。这有意义吗?
-
是的,你可以,但这不是必须的。
-
那么,这里的时间复杂度是多少?我所指的书将其解决为 T(n) = T(n/2) + n 并应用大师定理,O(n) 是提到的答案。但是如果你考虑一下,循环将运行 n + n/2 + n/4 + n/16 等等,直到 n 变为 1。这不是大于 O(n) 吗?
标签: algorithm time-complexity complexity-theory