算法运行时间

时间:2015-09-17 14:39:37

标签: performance big-o

在此算法中

int j=1;
while (j<=n/2) {
    int i=1;
    while (i <= j) {
        cout << j << " "<< i << endl;
        i++;
    }
    cout << endl;
    j++;
}

此算法的运行时间是否为T(n)=(n ^ 2/2)+ n + 4

for (int i=2; i <=n; i++) {
    for (int j=0; j <= n;) {
        cout << i << " "<< j << endl;
        j=j+(n/4);
    }
    cout << endl;
}

将是T(n)=(n-2)^ 2 + 2

2 个答案:

答案 0 :(得分:0)

第一个。 T(n)=从1到n / 2的数字之和,因为,外循环同时输入n / 2次,对于那些n / 2次内循环将输入1次,第一次转弯,2次和第2次转弯,第3回合3次......

  

T(n)=((n / 2)/ 2)*((n / 2)+1)= n / 4 *(n / 2 + 1)= n / 4 *((n + 2) / 2)

也许你可以通过乘法来简化它。

第二个。 T(n)=(n + 1)*(n / 4)因为外环将进入n + 1次,并且对于每一次,内环将进入n / 4次。

  

T(n)=(n + 1)*(n / 4)

答案 1 :(得分:0)

在第二个中,循环增量与循环终点成比例。迭代次数不会随n增加,只会增加值的范围。从j=0开始,j+=(n/4)的{​​{1}}最多需要5个增量才能变为false。 (如果n是4的倍数,则只有4)。无论哪种方式,这都是O(1)。

所以第二个版本的内部循环执行~5次操作,并且在循环外部有一个j <= n,因此外部循环的每次迭代都会执行~6次打印操作。 (如果它们是终端的,它只会被行缓冲,所以按打印的行数计算成本=系统调用的数量。如果它是一个文件,它默认是块缓冲的,所以成本〜 =操作次数〜=打印的4k数据块的数量。)

第二版的外循环从i = 2 .. n开始运行,因此它运行n-1次,每次打印6行。 (如果cout << endl,则为5)。 T(loop2)= 6n。

Hassan的分析看起来没有第一个循环。