作者micklin (Mick@Tucson)
看板CSSE
標題Re: 程式效率
時間Wed Sep 13 21:16:07 2006
※ 引述《kola12 (kola)》之銘言:
: 這個主題我覺得原po的問題還蠻簡單的
: 原po就是覺得他多花點時間把程式最佳化,可以縮短程式執行的時間
: 但是你能把程式最佳到什麼程度?
: 真的如原po所想的=>他花在程式最佳化的時間=程式增進效率後縮短的執行時間?
: 這個問題很難評估
: 所以最好的做法就是用另外一台電腦跑程式
: 一邊跑一邊改
: 一般軟體開發時間是算人力/時,沒在算程式執行的時間的
: 所以這邊用軟體專案管理的方法來解決這個問題
: 應該是沒有什麼意義的
我的表達能力似乎很差 / \
用例子來看好了,
對於一個函數, f(x,y)=x+y-x*x+x*y, 如果我們現在要對此函數求值,
又假設運算元都是二元運算子, 函數己儲存在二元樹中,
那程式的寫法可以用最簡單的遞迴來做, 也可以用stack來做,
遞迴的程式碼簡單好寫
function foo(node){
if node is an operator
return (foo(left) op foo(right))
otherwise
return node value
}
用stack的話, 乘g起來很囉嗦, 但不管是用STL的stack還是自己建的stack,
速度都會變快, 變快的時間有多少? 不知道。
但這是確定會變快的選擇, 如果我明天就要把程式交出去,
那我只好用遞迴, 簡單又不容易出錯,
但是如果我要要求效率, 我會自己建一個stack類別來最佳化我要的運算。
又如排序, 泡沫排序法很快就能寫好, 換成quick sort在理論上可以得到比較好的表現,
但是如果整個程式也就sort這麼一次, 而且sort的資料量不大,
那我花時間寫quick sort的意義就不大,
當然我是假設不用元件或套件或函式庫, 要自己寫的時候。
大家都知道建index可以很快找到資料, 但是我要怎麼評估有沒有必要用hashing?
資料量不夠大的時候, 就沒意義了, 差距大概只有0.0001秒吧 orz
花在hasing的時間變的沒意義了。
其實我一開始想知道的就是, 能不能在寫程式前就知道這樣寫有沒有意義?
有專門的書或文章在探討這一類的問題嗎?
或者板友們有可以分享的心得嗎?
現在倒是看到了不少建議與心得, 感激 m(_ _)m
新問題~
80/20法則適用於我的這個問題嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 70.171.224.50
推 taiwancat:%80的人在BBS找答案 能回答問題的那%20的人在認真讀書.. 09/13 23:01
推 xam:programming pearl 09/13 23:17