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迴圈在...