作者Uni1122 (淡雪)
看板CSSE
標題Re: 程式效率
時間Thu Oct 19 22:26:39 2006
※ 引述《invalid (everlasting)》之銘言:
: ※ 引述《gwliao (gwliao)》之銘言:
: : 這是算一次Cost/Fitness value的時間.
: : 假如能減少number of iterations的話, Total running time應該會減少.
: : 不知你是用別人的Solver還是自己寫?
: : 假如是自己寫話, 可以想想產生Next generation的方法.
: : 用Solver的話, 那要試試能調的參數.
: : 有啊, 讀多一點書和寫多一點程式.
: : 可以未寫程式前, 先猜這有沒有意義.
: 我覺得在演算法的層次上
: 在寫之前本來就可以根據演算法本身的time/size complexity
: 來選擇,如果是自己想的演算法
: 最好是自己推一下complexity (數學要夠好XD)
: 這樣才算是真正的設計演算法
: 必竟實作後牽涉的因素太多,倒推回去有的時候不是很準
: 而之前討論的部份感覺起來其實滿接近實作的範圍
: 遞迴與迴圈的比較,相信以看的懂組語的人來說根本就不是問題
: 而某些rule of thumb的確是可以在profile前提升效能
: 譬如針對cpu cache或是software pipeline的常識
: 或是陣列宣告等的小技巧
: 不過絕大多數的最佳化技巧,可能在某個平台上相當適合
: 而到另一個平台上就可能因為核心架構的不同而變成累贅
: 所以大部份的最佳化都會強烈建議等到profile後再進行
: 不然有可能是事倍功半
: 書的話比較少,畢竟演算法上的改良才是最有效的
: 實作上的技巧也會隨硬體演進變化,沒有太多不變的真理
: 在沒有pipeline上的cpu玩software pipeline就一點用都沒有
: 比起這個,良好的coding style更能夠帶來巨大的效益啊
演算法進化推一個先
這堆討論串,讓我想到了以前在上演算法時,老師有提到過的
演算法為何會出現,主要就是因為以前電腦不夠好CPU不夠快
如果你一隻程式,要多耗費掉CPU的1秒的時間,那成本就會不知道要多多少
(以前的CPU使用時間是要算錢的,不過那是在沒有PC的時代)
也因此就突出顯出演算法的重要性,你可以多省幾秒就可以多省一些研究經費
不過這是在金錢上的考量
但是在現今的硬體進步下,在PC上可能會覺得多那一秒沒差,
或許在PC真的多那一秒沒差,但是如果是在SERVER上跑這種程式
你跑一次要多一秒,那跑一萬次就要多出1萬秒,大概2.7小時
那這就是時間成本上的浪費了,但其實裏面或許還有更多的考量在裡面
這也是謂何就算在現在硬體已經成長到這樣地步的情況下,依然會教你怎樣寫演算法
很多很多時候,你比別人多出一秒也能多做很多事情
儘管你需要為了這一秒,去花費更多時間再寫演算法,但我認為是值得的
因為這就是屬於自己的成長,相對的以後或許你可以用此演算法去套用在其他程式上
而不必要再去多花時間思考你就有一隻很棒的程式,因為你腦袋就已經有這種架構
會很好很快速的幫你去建構你要的程式
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.225.99.201
→ marukocc:嗯...我覺得你根本不懂什麼是演算法 10/20 00:10
推 ykjiang:你太老實了 :) 10/20 00:54
推 eva19452002:那可以請1F說明一下何謂演算法的真諦嗎 10/21 00:51