我有以下伪代码,我想确定它的运行时间T(n)。 有人可以给我一些我应该遵循的步骤吗? 这是代码:
i := 1;
while (i <= n)
j := i;
x := x+A[i];
while (j > 0)
y := x/(2*j);
j = j /2; // Assume here that this returns the floor of the quotient
i = 2 * i;
return y;
答案 0 :(得分:0)
如果我的计算没有错误,我认为它是O(1)
。
首先,我们省略了不影响循环时间的行,也假设数组随机访问为i := 1;
while (i <= n)
j := i;
while (j > 0)
j = j / 2;
i = 2 * i;
return y;
。
#include <iostream>
using namespace std;
int main(){
long long i, j, n;
double cost;
clock_t start, finish;
i = 1;
n = 1000000000000;
start = clock();
while (i <= n) {
j = i;
while (j > 0) {
j = j / 2;
}
i = 2 * i;
}
finish = clock();
cout << (double)(finish - start)/CLOCKS_PER_SEC << endl;
}
然后我们假设一行中的所有操作都在O(1)中完成,我们将它们相加并得到结果。
除了数学分析,我们还可以使用计算:我们运行片段几次并看到时间增长(我也省略了不影响循环次数的操作)。
Mirror