long int F(int n){
long int F[n];
if (n<2) return n;
else {
F[0]=0; F[1]=1;
for (int i=2; i<n+1; i++)
F[i]=F[i-1]+F[i-2];
return F[n]; }
}
大家好,有谁能知道如何计算上述函数的时间复杂度?我正在研究C ++,我对随机算法的计算时间复杂度感到非常痛苦。请帮我!提前谢谢。
答案 0 :(得分:1)
显示的代码依赖于g ++语言扩展,可变长度数组。
即。它不是标准的C ++。
对于两个不同的事情,代码也使用名称F
误导了一点。
请注意,代码通过将数组索引到其结尾之后显示未定义行为。
除此之外,它是微不足道的。
当代码被更正或被视为伪代码时,执行 n -1操作会产生复杂度O( n )。
答案 1 :(得分:0)
对于这个程序,复杂性是O(n)
答案 2 :(得分:0)
由于算法使用memoization,因此时间和空间复杂度为线性 O(n)。
通常,时间复杂度涉及数据的会计比较操作,在这种情况下缺少(唯一真正的比较操作是绑定检查),因此线性复杂性由F[i-1]+F[i-2]
操作给出。