由于是嵌套循环,即使循环0次,比如for(i = 0; i != 0; i--)情况,都需要执行4条指令,分别是:赋值、跳转、比较、判断跳转。具体的例子如18行~22行汇编代码所体现的情况(假设k赋值为0)。而for的主循环结构为3条指令,分别为:赋值、比较、判断跳转。具体例子同样也是18行~22行的汇编代码所体现。所以在嵌套循环中,假如其中一个循环结构需要循环n次,它所需要执行的指令量ALL为:
大循环在外
好的,根据以上所得的结论,我们可以很轻松的计算出大循环在外的整个三层循环所需要执行的指令数量,如下:
-
i = 10000
-
j = 1000
-
k = 100
-
-
i循环结构指令数量 = 4 + i * 3 = 30004
-
j循环结构指令数量 = 4 + j * 3 = 3004
-
k循环结构指令数量 = 4 + k * 3 = 304
-
-
i循环结构被循环次数 = 1
-
j循环结构被循环次数 = i
-
k循环结构被循环次数 = i * j
-
-
整个结构指令数量 = i循环结构指令数量 * i循环结构被循环次数 + j循环结构指令数量 * j循环结构被循环次数 + k循环结构指令数量 * k循环结构被循环次数
-
-
整个结构指令数量 = 30004 * 1 + 3004 * 10000 + 304 * 1000 * 10000 = 3070070004
大循环在内
同上,我们也可以计算出大循环在内的整个
三层循环所需要执行的指令数量,如下:
-
i = 100
-
j = 1000
-
k = 10000
-
-
i循环结构指令数量 = 4 + i * 3 = 304
-
j循环结构指令数量 = 4 + j * 3 = 3004
-
k循环结构指令数量 = 4 + k * 3 = 30004
-
-
i循环结构被循环次数 = 1
-
j循环结构被循环次数 = i
-
k循环结构被循环次数 = i * j
-
-
整个结构指令数量 = i循环结构指令数量 * i循环结构被循环次数 + j循环结构指令数量 * j循环结构被循环次数 + k循环结构指令数量 * k循环结构被循环次数
-
-
整个结构指令数量 = 304 * 1 + 3004 * 100 + 30004 * 100 * 1000 = 3000700704
结论
可以很清楚得看出来,
大循环在内所需要执行的指令数量 < 大循环在外所需执行的指令数量。表示在嵌套循环中,把大循环放入内层比把大循环放入外层的代码要高。而为什么会这样,我们可以通过数学进行计算,如下:
假设 X
1,
X
2,X
3,X
4,X
5,...,X
n都为正整数,他们代表着循环次数,并且
0 < X1 < X2 < X3 < X4 < X5 < ..... < Xn。
大循环在外的情况
第n层
(最内层)的循环结构所需要执行的指令次数为: (4 + 3X
1)X
2X
3X
4X
5...X
n
第n-1层循环结构所需要执行的指令次数为:
(4 + 3X2)X3X4X5...Xn
第n-2层循环结构所需要执行的指令次数为: (4 + 3X3)X4X5...Xn
....................
第2层循环结构所需要执行指令次数为: (4 + 3X
n-1)X
n
第1层循环结构所需要执行的指令次数为: (4 + 3X
n)
总指令数为
-
ALL1 = (4 + 3X1)X2X3X4X5...Xn + (4 + 3X2)X3X4X5...Xn + (4 + 3X3)X4X5...Xn + (4 + 3X4)X5...Xn +...+ (4 + 3Xn-1)Xn + (4 + 3Xn)
-
ALL1 = 4X2X3X4X5...Xn + 3X1X2X3X4X5...Xn + 4X3X4X5...Xn + 3X2X3X4X5...Xn + 4X4X5...Xn + 3X2X3X4...Xn + 4X5...Xn + 3X4X5...Xn +...+ 4Xn + 3Xn-1Xn + 4 + 3Xn
-
合并同类项后,得
-
ALL1 = 4 + 3X1X2X3X4X5...Xn + 7X2X3X4X5...Xn + 7X3X4X5...Xn + 7X4X5...Xn +7X5...Xn + ... + 7Xn-1Xn + 7Xn
大循环在内的情况
第n层(最内层)的循环结构所需要执行的指令次数为: (4 + 3Xn)Xn-1Xn-2Xn-3Xn-4...X1
第n-1层循环结构所需要执行的指令次数为: (4 + 3Xn-1)Xn-2Xn-3Xn-4...X1
第n-2层循环结构所需要执行的指令次数为: (4 + 3Xn-2)Xn-3Xn-4...X1
....................
第2层循环结构所需要执行指令次数为: (4 + 3X2)X1
第1层循环结构所需要执行的指令次数为: (4 + 3X1)