作者progden (習慣成自然)
站內Prob_Solve
標題Re: [問題] 面試遇到的程式問題,現在還想不出來(MTK)
時間Sun Mar 30 21:35:22 2008
※ 引述《previewslave (蝦蝦蝦蝦 來玩圍棋吧)》之銘言:
: ※ 引述《previewslave (蝦蝦蝦蝦 來玩圍棋吧)》之銘言:
: : for (i=100; i--;) s+= i;
: 修正:
: for (i=101; i--;) s += i;
把迴圈展開 速度真的會變快說
int sum = 0 ;
int N = 1000000000 ;
long start,end ;
start = System.currentTimeMillis();
for(int i = 0 ; i < N ;){
sum += (i++) ;
}
end = System.currentTimeMillis();
System.out.println("test1 : (end-start) = "+(end-start));
start = System.currentTimeMillis();
for(int i = 0 ; i < N ;){
sum += (i++) ;
sum += (i++) ;
sum += (i++) ;
sum += (i++) ;
sum += (i++) ;
sum += (i++) ;
sum += (i++) ;
sum += (i++) ;
sum += (i++) ;
sum += (i++) ;
}
end = System.currentTimeMillis();
System.out.println("test2 : (end-start) = "+(end-start));
先不管sum會溢位的問題的話
輸出結果是
test1 (end-start) = 2000
test2 (end-start) = 1531
誤差大概到 +- 20 左右
使用的compiler是 java (build 1.6.0_05-b13)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.128.18.137
推 final01:迴圈展開好像真的比較快~但好像沒人會這樣寫耶 03/31 02:05
推 yoco315:會有人這樣寫阿,而且好的 compiler 還會自動作這件事情 03/31 23:55
推 H45:Compiling it by gcj with optimization, it'll be the same. 04/01 04:54
推 frank99977:把程式做平行計算會比較快嗎? 04/04 18:26