節譯自The Algorithm Design Manual
Copyright Steven S. Skiena All Rights Reserved
Copyleft g9yuayon(渡渡鳥) All Rights Lost
這 兩天VC++版的演算法之爭好不熱鬧。剛好俺考完一門試,心情寬鬆, 便來湊趣。演算法的重要性各位大俠都說得很清楚了。看看周圍優秀的程式員,哪個不是為了好的演算法殫精竭慮,哪個優秀的軟體不 是以高效的演算法為基礎。我也就轉一些例子作為佐證。我計劃先翻譯 一部分The Algorithm Design Manual上的文章,然後再翻譯部分 Programming Pearls上的文章。我才學了兩年多電腦,也是菜鳥, 翻譯不周的地方,還請高手指正。好了,話不須繁,言歸正傳,請看本文。
1. 作者的話(選自序言) 大多數我打過交道的專業程式員都不能勝任演算法設計的任務,實在讓人 遺憾,因為演算法設計的技巧畢竟是電腦科學的核心技術之一。為一個現實的問題設計正確,高效,和可以實現的演算法不是件容易事,因為一個成功的演算法設計人員 需要掌握如下兩種不同類別的知識:
技巧--一個好的演算法設計人員理解一些基本的演算法設計技巧,包括資料結構,動態規劃,深度優先搜尋,回溯,以及啟發學習法設計。不過也許最重要的技術還是建模--把紛繁複雜的現實應用抽象為適合用演算法解決的 簡潔問題的藝術。
資源--好的演算法設計者站在巨人的肩上。他們不會花費精力為每一個問題從 頭設計演算法,而是設法找出哪些已知的東西可用以解決待解的問題;他們也 不會從頭實現常見的演算法,而是找出現成的代碼作為出發點。
在 實際工作中,演算法問題不會在一個大型項目開始時出現。想反,它們多在 程式員突然不知道如何繼續往下完成編程或當前的程式不敷使用時出現在某些 子問題裡。為了讓大家更好地理解實際應用中演算法問題的來龍去脈,我們在此 提供一組“實戰故事”。它們都來自於我們解決實際問題的經驗。這些故事的寓意 是,演算法的設計和分析不僅是理論,也是協助人們解決問題的重要工具。
該去看書複習嘍,收工