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
?也许还可以把“任何算法的复杂性”改成“任何递归算法”