【求解思路】计算三层for循环的时间复杂度
求划线部分的执行次数为for (int i = 1; i <= n; i++) {for (int j = 1; j <= i; j++) {for (int k = 1; k <= j; k++) {x=x+y;...
求划线部分的执行次数为
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
for (int k = 1; k <= j; k++) {
x=x+y;
}
}
}
对于这类问题,直接列出最外层的前几项执行次数:
①对于i=1,执行次数是1次
②对于i=2,执行次数是1+2次
③对于i=3,执行次数是1+2+3次
所以可以总结出规律,对于n取多少,执行次数
即有
注意:这里用了两个数列的数学运算公式


所以执行次数(时间复杂度):
这里对该问题进行一个扩展,即将最内部第三层循环的初始化变量k改为0进行求解:
求划线部分的执行次数为
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
for (int k = 0; k <= j; k++) {
x=x+y;
}
}
}
相应的执行次数也改变了,还是列出前几项的执行次数:
①对于i=1,执行次数是1+2-1次
②对于i=2,执行次数是1+2+3-1次
③对于i=3,执行次数是1+2+3+4-1次
所以可以总结出规律,对于n取多少,执行次数
即有
所以执行次数(时间复杂度):
更多推荐
所有评论(0)