Re: [問題] 面試遇到的程式問題,現在還想不出來(MTK)
看板Prob_Solve (計算數學 Problem Solving)作者dh3014 (絲弦裂帛隻字動天)時間17年前 (2008/01/06 23:48)推噓0(0推 0噓 0→)留言0則, 0人參與討論串4/16 (看更多)
※ 引述《asleepme (冬天了)》之銘言:
: ※ [本文轉錄自 Tech_Job 看板]
: 作者: asleepme (冬天了) 看板: Tech_Job
: 標題: [問題] 面試遇到的程式問題,現在還想不出來...
: 時間: Sun Dec 30 13:42:09 2007
: 是當面問的
: 不過他當初是這樣講的:
: 有一個for迴圈,從0加到100
: 可是我覺得他不夠快,要怎樣才能讓他更快
: for( i=0; i<=100; i++)
: s=s+i;
: 不可以用數學公式
: 請忽略宣告或初始化的問題,我想不是重點
顯然,從數學和算法的角度出發,絕對是最理想的,
而且本題既然可以這樣做,把線性的化成常數(well,容我不精確地把數值計算當成常數)
就應該這樣做。
如果他真的是打算考較你程式碼調校,那這個例子也未免不太恰當…
因為根本沒啥必要調校,多數的compiler對這種簡單的一層迴圈,
自動的最佳化能比你的調校還要好。
目前調校程式碼,最簡單的是善用cache的技巧以及迴圈的展開,
兩者間要取一個trade-off並總是很容易,通常8層~16層左右的迴圈展開都會有
1.5以上的速度增益。
總之我完全建議採用:
s=5050; 來加速,你想用常數或巨集都請便,如果說100是個變數:
顯然
s=n* (n+1)/2; 就好了,你喜歡搞神秘也可以用
s=(n*-~n)>>1;
程式碼調校不應該在這種case下列入考量…
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.84.97.54
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 16 篇):
Prob_Solve 近期熱門文章
PTT數位生活區 即時熱門文章