我正在尝试在Big-Theta(n ^ m)中实现时间复杂度的算法,n和m是自然数。
我的第一个解决方案:
algo(n,m,i){ // called with algo(n,m,1)
if (i < m){
algo(n,m,i+1)
}
for i = 1 to n{
print(do something in constant time);
}
}
我的第二个解决方案:
algo(n,m,i){ //called with algo(n,m,m)
if (i > 0){
for j = 1 to n{
algo(n,m,i-1)
}
}else{
print(do something in constant time);
}
}
当我分析名为algo(n,m,m)
的第二个解决方案时,我得到T(i) = n * T(i-1), i > 0
。
随着T(0)=恒定时间,我得到T(i) = n^m
。所以我认为我的第二个解决方案是正确的,但我不知道我的第一个解决方案有什么问题。
答案 0 :(得分:1)
对于您的第一个算法,
if (i < m)
algo(n, m, i+1)
基本上会调用algo
总共m * (m-1) / 2
次,每个algo
都有一个O(n)
循环,因此,总复杂度将为O(n * m ^ 2)
。< / p>
或换句话说,对于第一种算法,它类似于T(i) = n + T(i-1)
,其中i = 0, ..., m
。