軟體工程師手冊/生命週期/設計/選擇演算法
外觀
< 軟體工程師手冊
在許多情況下,問題在於找到或建立任何演算法。以下是一些提示,可以幫助你克服演算法編寫障礙,找到你不知道存在的現有演算法,以及找到你已經知道的演算法的新方法。
- 打電話給朋友。
- 與他人面對面、透過電話或電子郵件詳細解釋你需要解決的問題,通常可以幫助你產生解決方案。你的朋友也可能有一個解決方案。
- 閱讀演算法教科書。
- 瀏覽或閱讀演算法教科書可以產生更多用於網路搜尋的術語,以及可能使用此演算法的領域。你可能會偶然發現答案。
- 在其他領域搜尋。
- 如果你可以將你的問題表達為其他領域的問題,例如計算機圖形學,那麼其他資源就變得可行。
- 嘗試新聞組。
- 很有可能其他人之前也遇到過這個問題。開源解決方案可能已經可用。
如果你發現不止一個合適的演算法,可以使用以下想法來比較它們對你的應用程式的適用性。
- 先實現,再最佳化。
- 所有可用的演算法都可能足夠好。
- 效能
- 它在你的典型資料上如何執行?它在你的異常資料上如何執行?
- 易於實現
- 你能夠多快地實現並執行此演算法?
- 可擴充套件性
- 演算法的階數(大O表示法)是多少?它隨著更多輸入如何擴充套件?它隨著更復雜的輸入如何擴充套件?
- 可維護性
- 演算法有多容易理解和維護?
- 多處理器相容性
- 你有多個處理器可用嗎?此演算法是否最大化了它們的利用率?
- 大小
- 程式碼大小是否是一個問題?記憶體/快取/檔案大小是否是一個問題?
這些問題的權重對於不同的應用程式會有所不同。例如,原型可能會強調易於實現而不是其他標準。對大型資料庫的搜尋可能會強調效能而不是其他標準。
- 《演算法導論》ISBN 0262032937 由 Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest 和 Clifford Stein 合著,是一本經典的演算法教科書。
- 選擇正確的演算法 由 Lagoudakis 等人撰寫,討論瞭如何選擇正確的排序演算法
- 選擇雜湊演算法 由 McKensie 等人撰寫。
- comp.graphics.algorithms 常見問題解答 包含許多演算法的連結和討論