Re: [問題] 面試遇到的程式問題,現在還想不出來(MTK)

看板Prob_Solve (計算數學 Problem Solving)作者 (絲弦裂帛隻字動天)時間17年前 (2008/01/06 23:48), 編輯推噓0(000)
留言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
文章代碼(AID): #17WFXBPM (Prob_Solve)
討論串 (同標題文章)
文章代碼(AID): #17WFXBPM (Prob_Solve)