跳轉至內容

軟體工程師手冊/生命週期/設計/選擇演算法

來自 Wikibooks,開放世界的開放書籍

尋找演算法

[編輯 | 編輯原始碼]

在許多情況下,問題在於找到或建立任何演算法。以下是一些提示,可以幫助你克服演算法編寫障礙,找到你不知道存在的現有演算法,以及找到你已經知道的演算法的新方法。

打電話給朋友。
與他人面對面、透過電話或電子郵件詳細解釋你需要解決的問題,通常可以幫助你產生解決方案。你的朋友也可能有一個解決方案。
閱讀演算法教科書。
瀏覽或閱讀演算法教科書可以產生更多用於網路搜尋的術語,以及可能使用此演算法的領域。你可能會偶然發現答案。
在其他領域搜尋。
如果你可以將你的問題表達為其他領域的問題,例如計算機圖形學,那麼其他資源就變得可行。
嘗試新聞組。
很有可能其他人之前也遇到過這個問題。開源解決方案可能已經可用。

選擇演算法

[編輯 | 編輯原始碼]

如果你發現不止一個合適的演算法,可以使用以下想法來比較它們對你的應用程式的適用性。

先實現,再最佳化。
所有可用的演算法都可能足夠好。
效能
它在你的典型資料上如何執行?它在你的異常資料上如何執行?
易於實現
你能夠多快地實現並執行此演算法?
可擴充套件性
演算法的階數(大O表示法)是多少?它隨著更多輸入如何擴充套件?它隨著更復雜的輸入如何擴充套件?
可維護性
演算法有多容易理解和維護?
多處理器相容性
你有多個處理器可用嗎?此演算法是否最大化了它們的利用率?
大小
程式碼大小是否是一個問題?記憶體/快取/檔案大小是否是一個問題?

這些問題的權重對於不同的應用程式會有所不同。例如,原型可能會強調易於實現而不是其他標準。對大型資料庫的搜尋可能會強調效能而不是其他標準。

書籍和文章

[編輯 | 編輯原始碼]
  • 《演算法導論》ISBN 0262032937 由 Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest 和 Clifford Stein 合著,是一本經典的演算法教科書。
華夏公益教科書