Big o 递归函数的渐近复杂性是如何推导的
我还没有在网站上找到这个问题的一般答案 例如 如果我有一些算法;比如说二进制搜索我如何推导(数学上显示)它的复杂性是Big o 递归函数的渐近复杂性是如何推导的,big-o,complexity-theory,binary-search,theory,asymptotic-complexity,Big O,Complexity Theory,Binary Search,Theory,Asymptotic Complexity,我还没有在网站上找到这个问题的一般答案 例如 如果我有一些算法;比如说二进制搜索我如何推导(数学上显示)它的复杂性是O(log(n)) 但是更一般地说,我如何推导任何递归算法的渐近复杂性?许多递归算法的时间复杂性可以用自身来表示,就像算法一样。这称为重复关系,通常采用以下格式 T(N)=[递归调用i的T(N_i)之和]+[函数中完成的其他工作之和] 例如,二进制搜索有一个非常简单的递归关系:对于每个递归调用,1)搜索空间减半,2)工作量不变。因此,关系的形式为T(N)=T(N/2)+C。要解决此
O(log(n))
但是更一般地说,我如何推导任何递归算法的渐近复杂性?许多递归算法的时间复杂性可以用自身来表示,就像算法一样。这称为重复关系,通常采用以下格式
T(N)=[递归调用i的T(N_i)之和]+[函数中完成的其他工作之和]
例如,二进制搜索有一个非常简单的递归关系:对于每个递归调用,1)搜索空间减半,2)工作量不变。因此,关系的形式为T(N)=T(N/2)+C
。要解决此问题,请重复替换它并找出一个模式:
T(N) = T(N / (2^1)) + C
= T(N / (2^2)) + 2C
= T(N / (2^3)) + 3C
= ...
= T(N / (2^m)) + mC
当搜索空间只有一个元素时,即当N/(2^m)=1
时,二进制搜索终止。这对应于m=log2(N)
,和T(N/(2^m))=0
因此,时间复杂度为
O(m)=O(logn)
。(日志的基数无关紧要,C
,因为它们都是乘法常数)对于最常见的递归关系,您的答案是主定理。见:
您还可以在CRLS-算法简介中找到解释。没有一般性的答案。每次计算都取决于算法的性质。唯一“通用”的方法是通过实验测量一系列不同输入的计算时间,并将数据与已知的现有函数相匹配。@meowgoestedog好的,那二进制搜索的例子呢?我不能仅仅给出一个例子的答案。但是对于大多数递归算法,可以构造递归关系。对于二进制搜索,每次搜索空间缩小50%,因此关系函数为
T(n)=T(n/2)+C
。如果你解决了这个问题,你应该得到O(logn)
@meowgoesthedog啊,这就是我想弄明白的递归函数,我把标题改成了更相关的,什么是C
?也许还可以把“任何算法的复杂性”改成“任何递归算法”