for循環嵌套執行效率


今天做項目時遇到一個for循環的嵌套問題,一個循環次數多,一個次數少,怎樣設計效率較高.

想起以前筆試時遇到過這個問題,當時由於時間倉促,沒有細想,今天在實際代碼中遇到這么問題,於是動筆算了下.

設兩個循環次數分別為m、n,m為一個很大的數,n為一個較小的數。假設在m循環中第i(0<i<=m)個,n循環中第j(0<j<=n)個退出

則大循環套小循環所需的運算次數y1=(i-1)*n+j;

    小循環套大循環所需的運算次數y2=(j-1)*m+i;

令f(i,j)=y1-y2=(n-1)*i+(1-m)*j+m-n

當f(i,j)>0時,           

由此我們可以得到函數圖像

通過計算相應面積所占的比例,我們可以算出相應的概率:

p1為大循環套小循環運算次數比較多的概率

p2為小循環套大循環運算次數比較多的概率

令m=k*n,則上式變為:

 

我們假設n=10,則可以得到函數圖像為

橫坐標為k,藍色為p1概率,黃色為p2概率,從圖中可以看出,

當k=1時,即m=n時,兩着效率一樣;

當k>1時,即m>n時,大循環套小循環的運算次數比較多,

當k趨向正無窮時,大循環嵌套小循環和小循環嵌套大循環運算次數的比例為(n+1)/(n-1)

因此,我們可以得出結論,一般情況下,小循環放在大循環外面的效率比較高.

 

當然,這也不是絕對的,具體項目中,因為數據存儲結構或者其他原因,也有可能導致大循環放在外面效率比較高.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM