今天做項目時遇到一個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)
因此,我們可以得出結論,一般情況下,小循環放在大循環外面的效率比較高.
當然,這也不是絕對的,具體項目中,因為數據存儲結構或者其他原因,也有可能導致大循環放在外面效率比較高.