索引 / 001 ZH-TW
演算法導論 cover

電腦科學

電腦科學

演算法導論

Thomas H. Cormen et al.

英文原名: Introduction to Algorithms

演算法設計與分析的綜合教科書,涵蓋基本資料結構、排序、圖形演算法和進階技術,以嚴謹的解釋和偽程式碼兼顧理論和實務。

難度等級
高級
學術層次
大學部
演算法設計演算法分析資料結構圖形演算法演算法複雜度電腦演算法

01 / 導讀

導讀

引用

Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2022). Introduction to Algorithms (4th ed.). The MIT Press.

章節概要

第四版共有 35 章,分為七個部分,之後是數學背景附錄,全書約 1,300 頁。每一部分都以一篇簡短的導言開頭。

第一部分,第1–5章:基礎

第1章“演算法在計算中的角色”(The Role of Algorithms in Computing)和第2章“入門”(Getting Started)介紹演算法及其分析。第3章“刻畫執行時間”(Characterizing Running Times)講漸近記號;第4章“分治”(Divide-and-Conquer)是這一部分中篇幅最長的章節之一;第5章“機率分析與隨機演算法”(Probabilistic Analysis and Randomized Algorithms)為後文的隨機化方法打下基礎。

第二部分,第6–9章:排序與順序統計量

堆排序、快速排序、線性時間排序,以及中位數與順序統計量。這幾章合起來涵蓋比較排序、非比較排序和選擇問題。

第三部分,第10–13章:資料結構

基本資料結構、散列表、二叉搜尋樹和紅黑樹。散列表有一章約四十頁的篇幅,本版的更新說明中也列出了散列表的新增內容。

第四部分,第14–16章:高階設計與分析技術

動態規劃、貪心演算法和攤還分析。動態規劃是全書較長的章節之一(約55頁)。這一部分介紹了兩種主要的最佳化問題設計策略,以及分析操作序列的主要工具。

第五部分,第17–19章:高階資料結構

資料結構的擴張、B 樹和不相交集合的資料結構。

第六部分,第20–25章:圖演算法

基本圖演算法、最小生成樹、單源最短路徑、所有結點對最短路徑、最大流,以及二分圖中的匹配。最後一章是本版新增的。

第七部分,第26–35章:專題選講

並行演算法、線上演算法、矩陣運算、線性規劃、多項式與快速傅立葉變換、數論演算法、字串匹配、機器學習演算法、NP 完全性和近似演算法。線上演算法和機器學習演算法是本版新增的章節。NP 完全性和近似演算法為這一部分收尾。

附錄:數學背景

求和、集合等、計數與機率、矩陣(附錄 A–D),之後是參考文獻和索引。

核心概念

第1–5章

  • 漸近記號與執行時間:不依賴具體機器、用來比較演算法的一套詞彙,在第3章展開。
  • 分治與遞迴式:第4章把遞迴式設計與求解由此產生的遞迴方程的方法放在一起講。
  • 隨機演算法:第5章引入對演算法的機率分析。

第6–19章

  • 排序下界與選擇:第6–9章區分比較排序與線性時間排序,並講授順序統計量。
  • 動態規劃、貪心演算法、攤還分析:第四部分的三種技術。
  • 平衡與擴張的搜尋結構:紅黑樹、B 樹及資料結構的擴張(第13、17、18章)。

第20–35章

  • 最短路徑、生成樹、流與匹配:第六部分的圖演算法各章。
  • NP 完全性與近似:第34、35章,討論被認為沒有高效精確演算法的問題及其近似。
  • 專題選講:並行與線上演算法、線性規劃、快速傅立葉變換、數論、字串匹配和機器學習,各為簡短而自足的一章。

評析

優點

  • 嚴謹而全面。 出版社稱本書兼具嚴謹性與全面性,各章自成體系,演算法用虛擬碼書寫,讀者可以從許多地方切入。
  • 附有數學背景。 附錄 A–D 涵蓋求和、集合、計數與機率、矩陣,大部分預備知識可以在書中自行復習。
  • 習題與思考題。 第四版新增 140 道習題和 22 道思考題,並根據讀者反饋改進了原有的題目。
  • 內容較新。 本版新增了二分圖匹配、線上演算法和機器學習三章,並在遞迴式、散列表、勢函式和字尾陣列方面增加了新內容。

侷限

  • 篇幅龐大。 全書 35 章、一千多頁,既是教材也是參考書;沒有哪一門課程能覆蓋全部內容,讀者必須取捨。
  • 只有虛擬碼。 演算法以虛擬碼給出,想要可執行程式的讀者需要自行實現。
  • 專題部分較簡略。 線性規劃(約27頁)和機器學習(約39頁)等主題各只有一章,更像入門介紹,而不是完整論述。
  • 對初學者要求較高。 數學化的寫法和篇幅使它作為演算法的第一本書比較吃力;配合課堂講授或作為第二遍閱讀效果更好。

在課程中的定位

在演算法課程中,這是一本綜合性的參考書。Cormen 自己的 Algorithms Unlocked 是一本講解演算法如何工作的簡短入門書,寫給尚未準備好讀本書的讀者;Roughgarden 的 Algorithms Illuminated 用對話式的風格講解標準的設計範式,並配有影片講座。兩者都適合作為第一遍閱讀。Skiena 的 The Algorithm Design Manual 是識別問題、選擇設計方案的實用指南,並附有問題目錄,當目標是實現時,與本書搭配很合適。

在專門方向上,本書第35章是對近似演算法的簡短介紹,Vazirani 的 Approximation Algorithms 與 Williamson 和 Shmoys 的 The Design of Approximation Algorithms 則作了完整展開。Mitzenmacher 等人的 Probability and Computing 擴充套件了第5章開始的隨機化內容。

如何使用本書

本書適合高年級本科生和研究生,也可以作為長期的參考書。熟悉證明、求和與基本機率會有幫助,附錄 A–D 可以用來復習。

典型的第一門課程讀第一、二部分,再選讀第三、四部分的若干章節(散列表、二叉搜尋樹、動態規劃、貪心演算法),然後讀第六部分的基本圖演算法、生成樹和最短路徑。攤還分析、B 樹、最大流和 NP 完全性是自然的第二學期主題。第七部分各章大多相互獨立,可按興趣任意順序閱讀。

閱讀每一章時請配合習題和思考題。虛擬碼最好先用手逐步跟蹤,再用自己選擇的語言寫出來。