我在网站上找不到对此的一般答案
如果我有一些算法;说Binary Search我如何得出(数学显示)它的复杂性是O(log(n))
。
但更一般地说如何推导出任何递归算法的渐近复杂度?
答案 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 - 算法简介中找到这个解释。