假设我正在尝试查找函数的复杂性类。每次评估函数时,数据集都会加倍,并且每次发生时,执行函数所需的时间都会增加(X)倍。
如果我们知道(X),如何找到函数的复杂度类/ O符号?例如,如果X略大于2,则Big-O表示法为O(N log N)。
答案 0 :(得分:0)
让T(n)
为您所讨论的函数的时间复杂度,其中n
为输入数据的大小。我们可以为T(n)
编写递归方程:
T(n) = X * T(n/2)
其中X
是您的常数。让我们“展开”此递归:
T(n) = X * T(n/2) = X^2 * T(n/4) = X^3 * T(n/8) = ... = X^k * T(n/2^k)
当参数k
变得足以满足以下条件时,该展开过程应结束:
n/2^k = 1
,表示n = 2^k
或k = log(n)
(对数以2为底)。我们还可以假设:
T(1) = C
其中C
是另一个常数。现在我们看一下展开的方程,用k
代替log(n)
,用T(1)
代替C
:
T(n) = X^log(n) * C
我们可以使用对数属性来简化此公式:
T(n) = C * n^log(X)