确定伪代码的运行时

时间:2017-02-12 12:15:45

标签: algorithm runtime pseudocode

我有以下伪代码,我想确定它的运行时间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;

1 个答案:

答案 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)中完成,我们将它们相加并得到结果。

Calculation

除了数学分析,我们还可以使用计算:我们运行片段几次并看到时间增长(我也省略了不影响循环次数的操作)。

Mirror