前言
“算法設計與分析”是計算機科學的核心問題,該課程已經成為計算機科學與技術專業及軟件工程專業課程體系中一門重要的必修課。本課程目的是通過對計算機領域的許多常見問題和有代表性算法的學習和研究,使讀者了解并掌握算法設計的一些主要方法,提高分析問題的基本技能,達到獨立設計算法和分析其復雜度的水平。
全書共7章。第1章介紹算法的基本概念,并對分析算法復雜度的準則及本書用到的基本數據結構的知識做了簡要的介紹。第2章至第7章分別介紹常用的算法設計方法,它們分別是遞歸算法、分治算法、貪心算法、動態規劃算法、回溯算法和分支限界算法。本書選取具有代表性的問題,講解這些經典算法的思路。另外,為了便于讀者掌握各類基本算法,書后附有算法應用的練習。
本書主要體現了如下特點。
(1)以算法設計為主線來組織素材,針對具體問題類,深入分析了算法設計思路、設計步驟、算法描述及算法復雜度等;從問題建模、算法設計與分析、算法改進等方面給出適當的描述,在理論上為實際問題的算法設計與分析提供了清晰、整體的思路和方法。與常見的算法和數據結構教材有所不同,本書并沒有過多關注細節,算法描述采用偽碼,力求突出對問題本身的分析和求解方法的闡述。
(2)在本書內容的組織上,不僅圍繞問題類展開,將不同方法用于求解同一問題并進行講解,便于讀者把握問題分析的發展脈絡,還通過比較分布在不同章節、求解同一問題的不同算法,讓讀者了解算法的設計過程。同時,在各章中還將同一算法的設計方法和設計策略用于不同問題的求解,更便于讀者體會、掌握算法設計的思路。
(3)本書的素材來自作者多年的教學積淀,選材適當,組織合理,先引入基本概念和數學基礎知識,然后進行算法設計與分析的核心內容講解。在敘述中不但注意理論的嚴謹,也精選了大量生動有趣的例子,每章都配有難度適當的練習,適合教學使用。
本書框架由多位教學一線的老師共同討論制定。參與編寫的老師分工如下:楊崇艷編寫第1章,張曉霞編寫第2章、第5章,王幸民編寫第3章、第4章,閆鵬飛編寫第6章和實驗指導,薛晉東編寫第7章。
在編寫的過程中參考了國內外多種版本的算法設計與分析以及計算復雜性方面的教材、論文和專著,從中吸取了一些優秀的思路和素材,在此一并向有關作者致謝。
編 者
2018年1月