關於多層for循環迭代的效率優化問題
今天筆試的時候遇到這么一道題目 說有上面這么循環嵌套 ,問怎么優化 並說明原因。 for(int i = 0 ; i < 1000 ;i++){ for(int j = 0; i < 100; j++){ for(int k = 0;k < 10; k++ ){ fun(i,j,k); } } } 咋一看,被這個題目蒙到了,可能是因為平時沒怎么注意這些方面。因此上網找了些資料來學習一下。 對於這種多層循環的遍歷,我們的一個原則是內大外小。 內大外小 for( int k=0;k <10;k++){ for(int j=0;j <100;j++){ for(int i=0;i <1000;i++){ function(i,j,k); } } } k <10;k++; 執行10次 j <100;j++ 執行10*100次 i <1000;i++ 執行10*100*1000次 function(i,j,k); 執行10*100*1000次 共執行語句數=(10+10*100+10*100*1000)*2+10*100*1000=3002020 內小外大 for( int k=0;k <1000;k++){ for(int j=0;j <100;j++){ for(int i=0;i <10;i++){ function(i,j,k); } } } k <1000;k++; 執行1000次 j <100;j++ 執行1000*100次 i <10;i++ 執行10*100*1000次 function(i,j,k); 執行10*100*1000次 共執行語句數=(1000+1000*100+10*100*1000)*2+10*100*1000=3202000 所以執行效率應該是內大外小更高一寫 內小外大-內大外小=3202000條語句-3002020條語句=199980條語句