嵌套For循环性能优化
请对以下的代码进行优化
for (int i = 0; i < 1000; i++)
for (int j = 0; j < 100; j++)
for (int k = 0; k < 10; k++)
test(i, j, k);
从循环变量i,j,k的实例化、初始化、比较、自增等耗时方面来进行优化。
代码性能优化时尽可能地减少循环变量i、j、k的实例化、初始化、比较、自增的次数,同时不引起其他可能的耗时运算。
原题代码耗时情况:
变量 | 实例化(次数) | 初始化(次数) | 比较(次数) | 自增(次数) |
---|---|---|---|---|
i | 1 | 1 | 1000 | 1000 |
j | 1000 | 1000 | 1000*100 | 1000*100 |
k | 1000*100 | 1000*100 | 100010010 | 100010010 |
优化方案1:
for (int i = 0; i < 10; i++)
for (int j = 0; j < 100; j++)
for (int k = 0; k < 1000; k++)
test(k, j, i);
优化思想:将循环次数少的放在外面层, 循环次数多的放在内层, 减少变量的实例化次数和初始化次数
方案耗时情况如下:
变量 | 实例化(次数) | 初始化(次数) | 比较(次数) | 自增(次数) |
---|---|---|---|---|
i | 1 | 1 | 10 | 10 |
j | 10 | 10 | 10*100 | 10*100 |
k | 10*100 | 10*100 | 101001000 | 101001000 |
优化方案2:
int i, j, k;
for (i = 0; i < 10; i++)
for (j = 0; j < 100; j++)
for (k = 0; k < 1000; k++)
test(k, j, i);
优化思想:将变量实例化放在循环外,减少实例化次数
方案耗时情况如下:
变量 | 实例化(次数) | 初始化(次数) | 比较(次数) | 自增(次数) |
---|---|---|---|---|
i | 1 | 1 | 10 | 10 |
j | 1 | 10 | 10*100 | 10*100 |
k | 1 | 10*100 | 101001000 | 101001000 |