兩重for迴圈的效率對比

2021-07-13 06:19:22 字數 866 閱讀 7302

int a[n][m]

for(int i=0;ifor(int j=0;j// a[i][j]

}}for(int j=0;jfor(int i=0;i// a[i][j]

}}

以上兩個迴圈的效率誰比較高:

對於現代陣列來說,都是行儲存優先:

a[0][0]

a[0][1]

a[0][2]

....

a[100][0]

a[100][1]

....

a[n][m]

而我們的快取,主要是將記憶體中的某段資料放入快取區,下次訪問記憶體則不需通過記憶體讀取而是直接從快取讀取。

比如乙個通用cpu,一級快取(l1-cache)的大小為16k,而其組織結構為每32個位元組一組,我們能一次快取8個整形資料:

a[0][0]

a[0][1]

a[0][2]

a[0][3]

如果我們以先列後行的形式進行訪問的話:

a[0][0]命中

a[1][0]不命中,重新讀取記憶體資料至快取

a[2][0]不命中,重新讀取記憶體資料至快取

...

以此類推,這種讀取的方法不僅僅降低了快取的命中率,而且還增加了大量的讀取記憶體的時間開銷。

相反以先行後列地讀取:

a[0][0]命中

a[0][1]命中

a[0][2]命中

...

每次讀取記憶體可降低四次訪問的時間開銷,因為可從快取中直接讀取。

所以,寫法1比寫法2效率高得多。

對logistic回歸分析的兩重認識

logistic回歸,回歸給人的直觀印象只是要求解乙個模型的係數,然後可以 某個變數的回歸值。而logistic回歸在應用中多了一層含義,它 經常應用於分類中。第一重認識 logistic是給真正的回歸結果做分類,將回歸值h x i 帶入logistic公式可得到乙個p概率值,當p 0.5,判定i為...

普通for迴圈與增強for迴圈效率對比

開發中經常用到for迴圈,但是到底選擇那乙個效率更高,可能讓有些同學出現糾結,給人感覺好像是增強for迴圈效率高,但是。猜測總是沒法讓人不放心,千猜萬猜還不如,動手做個測試,證明下,測試步驟如下 1 定義乙個物件,data public class car2 用乙個普通for迴圈往list裡增加物件...

foreach與正常for迴圈效率對比。

答案 可以看出,迴圈arraylist時,普通for迴圈比foreach迴圈花費的時間要少一點 迴圈linklist時,普通for迴圈比foreach迴圈花費的時間要多很多。當我將迴圈次數提公升到一百萬次的時候,迴圈arraylist,普通for迴圈還是比foreach要快一點 但是普通for迴圈在...