在此算法中
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
答案 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的分析看起来没有第一个循环。