T(sqrtn) + 5 的大 O 符号

Big-O notation of T(sqrtn) + 5

我遇到一个问题:T(N) = T(sqrt(N)) + 5.

请问这样可以解决吗?

T(N) = O(平方(N)) + O(5)

因为O(5) = O(1)是一个常数,我们可以忽略它。

所以T(N)的大O表示法是O(N^(1/2)).

或者我可以说它的符号是 O(N) 因为 O(N) 和 O(sqrt(N)) 之间没有太大区别。

谢谢!

编辑:我在原来的答案中犯了一个错误,假设 n2 的幂并将递归减少到 1, 2, 4, ... n, 这是错误的。我为误导道歉。这是更新后的答案。

来自,

T(n) = T(sqrt(n)) + 5,

我们也可以写成:

T(n) = T(n^(1/2)) + 5,

然后重复:

T(n^(1/2)) = T(n^(1/4)) + 5,

T(n^(1/4)) = T(n^(1/8)) + 5,

...

T(n^(2^-m)) = T(n^(2^-(m+1)) + 5,

这没有显示我们可以停止的常量。因此我们需要替换 n.

尝试:

n = 2^(2^m),

我们在哪里

m = log log n

m = 0开始,即n = 2,

然后我们有:

T(n) = T(2) + 5 + 5 + ... + 5,

有多少个5? 我们这样算:

2^(2^0), 2^(2^1), 2^(2^2), ... 2^(2^m)

所以有m 5s,其中m = log log n。所以

T(n) = T(2) + 5 log log n,

也就是说,

T(n) = O(log log n).

(为了简洁起见,让我们用常量 c 替换 5)

将这个函数多次代入自身,我们可以发现一个模式出现:

我们什么时候停止迭代?当满足停止条件时。将其设为 n = 2(不是通常情况下的 1,因为参数渐近于 n = 1):

所以这个函数的最终成本是:

请注意,常数 c (= 5) 与 渐近复杂度 无关。 (而且结果不仅仅是 log n 而是 log log n


编辑:如果您要选择不同的停止条件 n = a, a > 1,则上述步骤将变为:

与原始结果仅相差常量