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)并检查。