Algorithm 递归方法的大O复杂度

Algorithm 递归方法的大O复杂度,algorithm,recursion,big-o,complexity-theory,logarithm,Algorithm,Recursion,Big O,Complexity Theory,Logarithm,对于f(n)=f(n/2)+1,其中n是2的幂(n>=2) 当f(1)=1时 会是这样吗 f(n) = O(logn), f(n) = O(loglogn), or f(n) = O(sqrt(logn)) 我相信这是第一个,但我不确定如何验证。两种方法: (1)您可以使用归纳法: 假设O(logn)是正确的,那么我们应该显示: --->对于n=1:它是真的=>f(2)=f(1)+1=1(f(1)是零,因为n>=2),所以它是常数,o(log2)=o(1) --->如果n为真,则下一个值应为真

对于
f(n)=f(n/2)+1,其中
n
是2的幂
(n>=2)

当f(1)=1时

会是这样吗

f(n) = O(logn),
f(n) = O(loglogn),
or
f(n) = O(sqrt(logn))
我相信这是第一个,但我不确定如何验证。

两种方法:

(1)您可以使用归纳法:

假设O(logn)是正确的,那么我们应该显示:

--->对于n=1:它是真的=>f(2)=f(1)+1=1(f(1)是零,因为n>=2),所以它是常数,o(log2)=o(1)

--->如果n为真,则下一个值应为真(即2n,因为n是2的幂):

因此,我们假设对于f(n)=f(n/2)+1,O(logn)为真

现在,我们应该看看它是否仍然适用于:

f(2n):f(2n)=f(n)+1=>O(log2n)=O(logn)+1

所以,我们可以再次看到这是真的。因为对于大n,我们有:

方程的左侧:O(log2n)=O(logn+1)=O(logn)

方程的右侧:O(logn)+1=O(logn)

===============================================

(2)二进制搜索树概念:


如果您了解二叉搜索树,那么这个公式显示了基于二叉搜索树的算法的计算时间。因此,每一层的计算时间取决于它的子层(我指的是它下面的一层)。并且,在每一层,正在被添加的计算时间是O(1)。因此,在二元搜索树中,由于有Logn层,所以总共有:Logn*o(1)复杂性,即o(Logn)。

如果
n
2
的幂,我们可以编写
n=2^m
。这个循环是这样的

f(2^m) = f(2^(m-1)) + 1
这可以看作是

g(m) = g(m-1) + 1
g(0)=1

看到这一点没什么大不了的

g(m) = m + 1
这意味着

f(n) = log2(n) + 1.
这就是精确解。

在方程中插入各种f(n)并检查。