讓我們重視程式執行效率 (轉)
讓我們重視執行: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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用並行提高sql執行效率(轉)並行SQL
- 這一次,讓我們完全掌握Java多執行緒(2/10)Java執行緒
- 聊聊如何讓springboot攔截器的執行順序按我們想要的順序執行Spring Boot
- 陳皓:程式碼執行的效率
- 我命由我不由天!如何只讓程式執行指定時間?
- 使用互斥物件讓程式只執行一次 (轉)物件
- 讓我們成為更好的程式設計師程式設計師
- 我會手動建立執行緒,為什麼讓我使用執行緒池?執行緒
- switch執行效率
- 提高程式碼的執行效率(1)
- 程式池、執行緒池效率測試執行緒
- 什麼?又來智慧AI程式設計?讓不讓我們活了!AI程式設計
- @Java Web 程式設計師,我們一起給程式開個後門吧:讓你在保留現場,服務不重啟的情況下,執行我們的除錯程式碼JavaWeb程式設計師除錯
- 如何讓我們的Android應用程式保活?Android
- 讓我們來搞崩 Cocoa 吧(黑暗程式碼)
- 簡單的3步,重構我們的程式碼
- 零程式碼儲存視窗執行狀態 (轉)
- 我們該如何正確的中斷一個執行緒的執行??執行緒
- 我們們worker有力量-在瀏覽器中玩轉多執行緒和離線應用瀏覽器執行緒
- @Spring Boot程式設計師,我們一起給程式開個後門吧:讓你在保留現場,服務不重啟的情況下,執行我們的除錯程式碼Spring Boot程式設計師除錯
- 幾維安全,讓程式安全執行
- Nohup命令讓Linux下的程式在後臺執行 - 轉Linux
- 讓Pqmagic在Server版中執行 (轉)Server
- V社:玩家說我們不做遊戲了,這讓我們很受傷遊戲
- 讓我們一起啃演算法----整數反轉演算法
- 面試官!讓我們聊聊正則面試
- sql server中如何檢視執行效率不高的語句SQLServer
- 有關程式碼執行效率提升的小例子
- 5. 多執行緒程式如何讓 IO 和“計算”相互重疊,降低 latency?執行緒
- "你們不要學python,python執行效率慢,去學XX吧"Python
- 誰能幫我讓liferay執行正常起來?
- 檢視oracle執行計劃 - 轉Oracle
- ORACLE中檢視執行計劃(轉)Oracle
- 讓.py程式後臺執行(Linux)Linux
- document.createDocumentFragment()執行效率Fragment
- Javascript執行效率小結JavaScript
- in/exists和not in/not exists執行效率
- Windows程式效率 (轉)Windows