我面临一个问题: T(N)= T(sqrt(N))+ 5.
我想知道我能以这种方式解决它吗?
T(N)= O(sqrt(N))+ O(5)
由于O(5)= O(1)是常数,我们可以忽略它。
所以T(N)的大O符号是 O(N ^(1/2)) 。
或者我可以说它的符号是O(N),因为O(N)和O(sqrt(N))之间没有太大的区别。
谢谢!
答案 0 :(得分:3)
(为了整洁,让我们用常数c
替换5)
多次将此函数替换为自身,我们可以发现一种模式:
我们什么时候停止迭代?满足停止条件时。取此为n = 2
(通常情况下不是1,因为参数是n = 1
的渐近):
所以这个函数的最终成本是:
请注意,常量c
(= 5)与渐近复杂度无关。 (而且结果不仅仅是log n
而是log log n
)
编辑:如果您选择不同的停止条件n = a, a > 1
,则上述步骤将变为:
仅与原始结果中的常量不同。
答案 1 :(得分:2)
编辑:我在原始答案中犯了一个错误,假设 n 是 2 的力量,并将重复发生减少到 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)。