演算法設計:基礎、分析與網際網路實例 (Algorithm Design: Foundations, Analysis, and Internet Examples)
內容描述
本書特色
■演算法設計模式可提供設計演算法的清晰方法。■視覺化證明可幫助讀者直覺且精確地了解數學論證。■網路範例可引起讀者對網路應用程式所採用傳統及新演算法的學習興趣,例如雜湊、封包路由、密碼學及更多主題。■選讀的Java程式碼章節提供具體的實作範例。■使用隨機技巧可使原本需要設計精巧資料結構、進行複雜的平均狀況分析之處,取代以簡單的資料結構及演算法,分析也變得直覺。■本書網站
(www.wiley.com/college/goodrich) 提供輔助資料給學生及教師,包括線上投影片、習題提示、題庫、Java程式碼及更多資源。
本書內容
本書討論很多網路演算法方面的主題,也在其他章節安排了傳統演算法的網路應用程式範例並已預設提供給有一定程度的學生。本書中全部演算法仍是以高階「虛擬碼」寫成,只有在選讀的Java實作範例章節中,才以特定語言寫出程式。並在第一章中復習包括指數、對數與級數,且將其他實用的數學事實
(包括基本機率) 整理在附錄A中。
<目錄>
Part I 演算法分析第1章 演算法分析1.1
演算法分析方法論1.2 漸進表示法1.3 相關數學速覽1.4 演算法分析實例1.5 攤銷分析1.6 實驗方法1.7 習題第2章 基本資料結構2.1 堆疊和佇列2.2 Vectors、Lists和Sequences2.3 樹2.4 優先權佇列與堆積2.5 字典與雜湊表2.6 Java範例:堆積2.7 練習第3章 搜尋樹與跳躍串列3.1 有序字典和二元搜尋樹3.2 AVL
樹3.3 有限深度搜尋樹3.4 外張樹3.5 跳躍串列3.6 Java範例:AVL和紅黑樹3.7 習題第4章 排序、集合與選擇24.1 合併排序4.2 抽象資型態集合4.3 快速排序4.4 比較式排序的下限4.5 桶子排序與基底排序4.6 排序演算法的比較4.7 挑選4.8 Java
範例:原位的快速排序4.9 習題第5章 基本技巧5.1 貪婪演算法5.2 各個擊破 (Divide-and-Conquer)
5.3 動態規劃5.4 習題Part II 圖形演算法第6章 圖
6.1 圖的抽象資料型態6.2 圖的資料結構6.3 圖形走訪6.4 有向圖6.5 Java範例:深度優先搜尋6.6 習題第7章 加權圖7.1 單一源點的最短路徑7.2 完全配對最短路徑7.3 最小生成樹7.4 Java範例:Dijkstra演算法7.5 習題第8章 網路流與配對8.1 網路流與切割8.2 最大網路流8.3 最大二分配對8.4 最低成本網路流8.5 Java範例:最低成本網路流8.6 習題Part
III 網路演算法第9章 文字處理9.1 字串與樣式比對演算法9.2 Trie樹9.3 文字壓縮9.4 文字相似性測試9.5 習題第10章 數論與密碼學10.1 關於數字的基礎演算法10.2 密碼計算10.3 資訊安全演算法及協定10.4 快速傅利葉轉換10.5 Java範例:FFT10.6 習題第11章 網路演算法11.1 複雜度測量與模型
11.2 基本分散式演算法 11.3 路由廣播與單路由傳輸11.4 群播路由11.5 習題Part
IV 進階主題第12章 計算幾何學12.1 範圍樹12.2 優先搜尋樹12.3 四元樹及-d樹12.4 平面掃描技術12.5 凸多邊形包覆12.6 Java範例:凸多邊形包覆12.7 習題第13章 NP-Complete13.1 P與NP13.2 NP-Completeness13.3 重要的NP-Complete問題13.4 近似演算法13.5 回溯及分支限制13.6 習題第14章 演算架構14.1 外部記憶體演算法14.2 平行演算法14.3 線上演算法14.4 習題附錄A 常用的數學定理