如何推导递归函数的渐近复杂性

时间:2017-08-10 15:55:15

标签: big-o complexity-theory binary-search theory asymptotic-complexity

我在网站上找不到对此的一般答案

例如

如果我有一些算法;说Binary Search我如何得出(数学显示)它的复杂性是O(log(n))

但更一般地说如何推导出任何递归算法的渐近复杂度?

2 个答案:

答案 0 :(得分:3)

许多递归算法的时间复杂度可以用自身来表示,就像算法一样。这称为递归关系,通常格式为

T(N) = [sum of T(N_i) for recursive call i] + [sum of other work done in the function]

例如,二进制搜索具有非常简单的递归关系:对于每个递归调用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(log N)。 (日志的基数无关紧要,C也不重要,因为它们都是乘法常数)

答案 1 :(得分:0)

对于大多数常见的复发关系,你的答案是主定理。请参阅:https://en.wikipedia.org/wiki/Master_theorem

您还可以在CRLS - 算法简介中找到这个解释。