该算法的复杂度公式
Complexity formula of this algorithm
我有这个算法(黄金比例):
public static float golden(int n){
float res;
if(n == 0) {
res = 1;
} else {
res = (float) (1.0 + (1.0 / golden(n-1)));
}
return res;
}
我想T(n)公式是T(n-1)。我可以按照这个公式得到复杂性。
T(n) = aT(n - b) + c^n p(n)
还有这个:
p(n) 和 c 是多少?
对于每个 n > 0,对 golden(n)
的调用会导致恒定数量的算术运算和一次递归调用,因此您可以将递归写为时间复杂度函数 T(n) as
T(n) = T(n-1) + k, n>0
其中 k 是每次调用中的操作数。这是顺序搜索的递归关系。
现在你可以应用你在问题中提到的公式了。回想一下,公式中的 d 是多项式 p(n) 的次数。这里
a = 1, c = 1, b = 1, p(n) = k,
因此 d = 0,现在应用你的公式你会得到 a=c^b,因此第二种情况适用,所以
T(n) = Theta(n^{d+1}c^n) = Theta(n).
这给出了最终答案T(n) = Theta(n)。
我有这个算法(黄金比例):
public static float golden(int n){
float res;
if(n == 0) {
res = 1;
} else {
res = (float) (1.0 + (1.0 / golden(n-1)));
}
return res;
}
我想T(n)公式是T(n-1)。我可以按照这个公式得到复杂性。
T(n) = aT(n - b) + c^n p(n)
还有这个:
p(n) 和 c 是多少?
对于每个 n > 0,对 golden(n)
的调用会导致恒定数量的算术运算和一次递归调用,因此您可以将递归写为时间复杂度函数 T(n) as
T(n) = T(n-1) + k, n>0
其中 k 是每次调用中的操作数。这是顺序搜索的递归关系。
现在你可以应用你在问题中提到的公式了。回想一下,公式中的 d 是多项式 p(n) 的次数。这里
a = 1, c = 1, b = 1, p(n) = k,
因此 d = 0,现在应用你的公式你会得到 a=c^b,因此第二种情况适用,所以
T(n) = Theta(n^{d+1}c^n) = Theta(n).
这给出了最终答案T(n) = Theta(n)。