讓我們重視程式執行效率 (轉)

amyz發表於2007-10-17
讓我們重視程式執行效率 (轉)[@more@]

讓我們重視執行:namespace prefix = o ns = "urn:schemas--com::office" />

  起初,程式執行效率一直是學習的人們關心的話題。但是隨著的飛速發展,“執行效率”這個概念已經在校園和初學者之中淡化,只有在設計商業開發和競賽時才能看見它的身影。這是我們目前的狀況,也是值得大家思考的問題。

有必要改程式序的執行效率嗎?

隨著計算機硬體的發展,微機的速度越來越快(奔騰4的主頻已經上了3G,同步快取等技術已經得到應用),執行軟體的能力也越來越強,似乎程式的執行效率已經不在成為我們關注的焦點。的確,在學校的課堂上,老師幾乎沒講過這方面的內容,同學對此也是一知半解;很多書籍也對此不聞不問。難道效率真的不重要了?其實,效率是很重要的,要不然就沒有工作效率之說了。初學者認為不重要,那是因為寫不出更高效的程式;即使能寫出來,也會因為程式太小,而感覺不出上的差別。而在一些嵌入式中,程式的執行效率顯得格外重要;小段程式碼的效率,直接影響到了大型軟體的執行速度。所以說,我們很有必要去改進自己的程式,讓它能夠更快更好的執行。

日常的速演算法完全有效嗎?

人們日常用的速演算法,對計算機來說並不是完全有效的。舉個例子:大家都知道從1加到100怎麼算:可以1+2+3+…….+100算出5050;也可以用簡便的演算法:(0+100)+(1+99)+(2+98)+……得到結果也是5050。顯然第二種方法更適合人們計算,它的效率比順序相加快得多,甚至口算就能迅速得到答案。但對於計算機來說,第二種方法並不比第一種快,如果程式編制不當,反而會降低計算速度。所以建議大家,對於一般的數值計算不必考慮用什麼速演算法,請相信中運算器的能力。

程式演算法是關鍵

(1)選擇適當演算法

要想提高程式執行效率,改進演算法是最關鍵的。演算法是影響程式執行效率的主要因素,在編寫不同程式時要選擇適當的演算法。比如同樣是查詢演算法,在處理不同資料時,效率是不同的,這是就要從中選擇一個最好的。還比如,同一問題中可以用棧也可以用佇列,這時就要考慮用哪個更好,還要考慮用順序結構還是鏈式結構。總之,選擇適當的演算法是提高執行效率的關鍵。

(2)善於改進演算法

大家一定都學過“氣泡排序”演算法,也都會用。不知道有多少人改進過這種“古老”的演算法。其實想法很簡單,設一個標誌位用來表示已經排過序的序列,當下一次比較時跳過這段,就能大大提高排序效率。這只是一個很簡單的例子,目的是鼓勵大家多多改進已有的演算法,多些一些好的演算法出來,這是很必要的,因為有時系統提供的語句是用不成的。就拿查詢來說,最簡單的就是用語句。其實這個語句是很有必要改進的,如果在大型資料庫中直接這樣寫:Select xxx FROM xxx WHILE xxx ,可想而知它的效率有多麼低下。所以說,我們要善於改進已有的演算法。

(3)一個想法

這是我在改程式序執行效率的一個想法――多運算,少器操作。因為運算是由CPU中的運算器完成的,操作則是要到中,甚至外存中進行。兩者相差幾個數量級,執行速率當然不一樣(雖然看不出來,實際是有區別的)。所以在程式設計過程中,能直接計算的就直接算,不要把資料移來移去的。

(4)小小的建議

要寫出高效的演算法,對基本的資料結構一定要理解,對基本的演算法一定要熟練掌握。所以建議大家一定要學好資料結構,在不斷的實踐中提高演算法的編制能力,這樣你的程式才能更好的高效執行。這裡還建議大家看看每期《程式設計師》的“程式設計擂臺”,那裡的程式都是講效率的。

我寫這篇文章的目的不是為了說明什麼樣的演算法效率高,該用什麼演算法編制程式。而是發動大家一起來關心這個快被時代冷落的話題,讓我們重視程式執行效率,把程式設計進行到底。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-977265/,如需轉載,請註明出處,否則將追究法律責任。

相關文章