今天做專案時遇到乙個for迴圈的巢狀問題,乙個迴圈次數多,乙個次數少,怎樣設計效率較高.
想起以前筆試時遇到過這個問題,當時由於時間倉促,沒有細想,今天在實際**中遇到這麼問題,於是動筆算了下.
設兩個迴圈次數分別為m、n,m為乙個很大的數,n為乙個較小的數。假設在m迴圈中第i(0則大迴圈套小迴圈所需的運算次數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)
因此,我們可以得出結論,一般情況下,小迴圈放在大迴圈外面的效率比較高.
當然,這也不是絕對的,具體專案中,因為資料儲存結構或者其他原因,也有可能導致大迴圈放在外面效率比較高.
for迴圈執行效率
include include include include define a 10000 define b 10 define num 100000 void main double a a b double b 0 int t1 clock for int n 0 n 第一種情況是內外層迴圈次...
雙重迴圈巢狀執行原理
對於有規律,且遞增或遞減的一些案例,使用雙重迴圈巢狀解決比較方便,而且 相對簡潔。首先要知道雙重迴圈的執行原理 第一次進入外層迴圈,第一次內層迴圈開始,直到內層迴圈結束,執行第二次外層迴圈 第二次進入外層迴圈,第二次內層迴圈開始,直到內層迴圈結束,執行第三次外層迴圈 以此類推。for迴圈比較常用,f...
雙重for迴圈巢狀執行原理
先簡單介紹下單個for迴圈的原理 for 定義變數 迴圈條件 變數變化 1 定義變數在進入迴圈前執行一次 2 迴圈條件是每次進入迴圈之前都會執行並判斷 3 變數變化是每次完成迴圈語句塊後執行的內容 下面看一段 逆戰 停課不停學 加油!for i 1 i 5 i 當執行程式時,先執行外層 i 的迴圈 ...