算法(第4版)
內容簡介
- Sedgewick 之巨著,與高德納 TAOCP 一脈相承
- 幾十年多次修訂,經久不衰的暢銷書
- 涵蓋所有程序員必須掌握的 50 種算法
《算法(第4版)》全面講述算法和數據結構的必備知識,具有以下幾大特色。
作者簡介
Robert Sedgewick,斯坦福大學博士,導師為 Donald E.Knuth,從 1985 年開始一直擔任普林斯頓大學計算機科學系教授,曾任該系主任,也是 AdobeSystems 公司董事會成員,曾在 Xerox PARC、國防分析研究所(Institute for DefenseAnalyses)和法國國家信息與自動化研究所(INRIA)從事研究工作。他的研究方向包括解析組合學、數據結構和算法的分析與設計、程序可視化等。
KevinWayne,康奈爾大學博士,普林斯頓大學計算機科學系高級講師,研究方向包括算法的設計、分析和實現,特別是圖和離散優化。
本書內容
譯者序
在計算機領域,算法是一個永恒的主題。即使僅把算法入門方面的書都擺出來,國內外的加起來怕是能鋪滿整個天安門廣場。在這些書中,有幾本尤其與眾不同,本書就是其中之一。
本書是學生的良師。在翻譯的過程中我曾無數次感嘆:“要是當年我能擁有這本書那該多好!”應該說本書是為在校學生量身打造的。沒有數學基礎?沒關系,只要你在高中學過了數學歸納法,那么書中 95% 以上的數學內容你都可以看得懂,更何況書中還輔以大量圖例。沒學過編程?沒關系,第 1 章會給大家介紹足夠多的 Java 知識,即使你不是計算機專業的學生,也不會遇到困難。整本書的內容編排循序漸進,由易到難,前后呼應,足見作者的良苦用心。沒有比本書更專業的算法教科書了。
本書是老師的好幫手。如果老師們還只能照本宣科,只能停留在算法本身一二三四的階段,那就已經大大落后于這個時代了。算法并不僅僅是計算的方法,探究算法的過程反映出的是我們對這個世界的認知方法:是唯唯諾諾地將課本當做圣經,還是通過“實驗—失敗—再實驗”循環的錘煉?數學是保證,數據是驗證。本書通過各種算法,從各個角度,多次說明了這個道理,這也正是第 1 章是全書內容最多的一章的原因。希望每一位讀者都不要錯過第 1 章。無論你有沒有編程基礎,都會從中得到有益的啟示。
本書是程序員的益友。在工作了多年之后,快速排序、霍夫曼編碼、KMP 等曾經熟悉的概念在你腦中是不是已經凋零成了一個個沒有內涵的名詞?是時候重新拾起它們了。無論是為手頭的工作尋找線索,還是為下一份工作努力準備,這些算法基礎知識都是你不能跳過的。本書強調軟件工程中的最佳實踐,特別適合已有工作經驗的程序員朋友。所有的算法都是先有 API,再有實現,之后是證明,最后是數據。這種先接口后實現、強調測試的做法,無疑是在工作中摸爬滾打多年的程序員最熟悉的。
本書也有一些遺憾,比如沒有介紹動態規劃這樣重要的思想。但是瑕不掩瑜,它仍然是最好的入門級算法書。我強烈地希望能夠把本書翻譯成中文,但同時也誠惶誠恐,如履薄冰,擔心自己的水平不足以準確傳達原文的意思。翻譯的過程雖然辛苦,但我覺得非常值得。感謝人民郵電出版社圖靈公司給了我這個機會,感謝編輯和審稿專家的細心檢查。同時感謝我的妻子朱天的全力支持。譯者水平有限,bug 在所難免,還請讀者批評指正。
謝路云
2012.9.17
前言
本書力圖研究當今最重要的計算機算法并將一些最基礎的技能傳授給廣大求知者。它適合用做計算機科學進階教材,面向已經熟悉了計算機系統并掌握了基本編程技能的學生。本書也可用于自學,或是作為開發人員的參考手冊,因為書中實現了許多實用算法并詳盡分析了它們的性能特點和用途。這本書取材廣泛,很適合作為該領域的入門教材。
算法和數據結構的學習是所有計算機科學教學計劃的基礎,但它并不只是對程序員和計算機系的學生有用。任何計算機使用者都希望計算機能運行得更快一些或是能解決更大規模的問題。本書中的算法代表了近 50 年來的大量優秀研究成果,是人們工作中必備的知識。從物理中的 N 體模擬問題到分子生物學中的基因序列問題,我們描述的基本方法對科學研究而言已經必不可少;從建筑建模系統到模擬飛行器,這些算法已經成為工程領域極其重要的工具;從數據庫系統到互聯網搜索引擎,算法已成為現代軟件系統中不可或缺的一部分。這僅是幾個例子而已,隨著計算機應用領域的不斷擴張,這些基礎方法的影響也會不斷擴大。
在開始學習這些基礎算法之前,我們先要熟悉全書中都將會用到的棧、隊列等低級抽象的數據類型。然后依次研究排序、搜索、圖和字符串方面的基礎算法。最后一章將會從宏觀角度總結全書的內容。
獨特之處
本書致力于研究有實用價值的算法。書中講解了多種算法和數據結構,并提供了大量相關的信息,讀者應該能有信心在各種計算環境下實現、調試并應用它們。本書的特點涉及以下幾個方面。
算法 書中均有算法的完整實現,并討論了程序在多個樣例上的運行狀況。書中的代碼都是可以運行的程序而非偽代碼,因此非常便于投入使用。書中程序是用 Java 語言編寫的,但其編程風格方便讀者使用其他現代編程語言重用其中的大部分代碼來實現相同算法。
數據類型 我們在數據抽象上采用了現代編程風格,將數據結構和算法封裝在了一起。
應用 每一章都會給出所述算法起到關鍵作用的應用場景。這些場景多種多樣,包括物理模擬與分子生物學、計算機與系統工程學,以及我們熟悉的數據壓縮和網絡搜索等。
學術性 我們非常重視使用數學模型來描述算法的性能。我們用模型預測算法的性能,然后在真實的環境中運行程序來驗證預測。
廣度 本書討論了基本的抽象數據類型、排序算法、搜索算法、圖及字符串處理。我們在算法的討論中研究數據結構、算法設計范式、歸納法和解題模型。這將涵蓋 20 世紀 60 年代以來的經典方法以及近年來產生的新方法。
我們的主要目標是將今天最重要的實用算法介紹給盡可能廣泛的群體。這些算法一般都十分巧妙奇特,20 行左右的代碼就足以表達。它們展現出的問題解決能力令人嘆為觀止。沒有它們,創造計算智能、解決科學問題、開發商業軟件都是不可能的。
本書網站
本書的一個亮點是它的配套網站 algs4.cs.princeton.edu。這一網站面向教師、學生和專業人士,免費提供關于算法和數據結構的豐富資料。
一份在線大綱 包含了本書內容的結構并提供了鏈接,瀏覽起來十分方便。
全部實現代碼 書中所有的代碼均可以在這里找到,且其形式適合用于程序開發。此外,還包括算法的其他實現,例如高級的實現、書中提及的改進的實現、部分習題的答案以及多個應用場景的客戶端代碼。我們的重點是用真實的應用環境來測試算法。
習題與答案 網站還提供了一些附加的選擇題(只需要一次單擊便可獲取答案)、很多算法應用的例子、編程練習和答案以及一些有挑戰性的難題。
動態可視化 書是死的,但網站是活的,在這里我們充分利用圖形類演示了算法的應用效果。
課程資料 網站包含和本書及網上內容對應的一整套幻燈片,以及一系列編程作業、核對表、測試數據和備課手冊。
相關資料鏈接 網站包含大量的鏈接,提供算法應用的更多背景知識以及學習算法的其他資源。
我們希望這個站點和本書互為補充。一般來說,建議讀者在第一次學習某種算法或是希望獲得整體概念時看書,并把網站作為編程時的參考或是在線查找更多信息的起點。
作為教材
本書為計算機科學專業進階的教材,涵蓋了這門學科的核心內容,并能讓學生充分鍛煉編程、定量推理和解決問題等方面的能力。一般來說,此前學過一門計算機方面的先導課程就足矣,只要熟悉一門現代編程語言并熟知現代計算機系統,就都能夠閱讀本書。
雖然本書使用 Java 實現算法和數據結構,但其代碼風格使得熟悉其他現代編程語言的人也能看懂。我們充分利用了 Java 的抽象性(包括泛型),但不會依賴這門語言的獨門特性。
書中涉及的多數數學知識都有完整的講解(少數會有延伸閱讀),因此閱讀本書并不需要準備太多數學知識,不過有一定的數學基礎當然更好。應用場景都來自其他學科的基礎內容,同樣也在書中有完整介紹。
本書涉及的內容是任何準備主修計算機科學、電氣工程、運籌學等專業的學生應了解的基礎知識,并且對所有對科學、數學或工程學感興趣的學生也十分有價值。
背景介紹
這本書意在接續我們的一本基礎教材《Java 程序設計:一種跨學科的方法》,那本書對計算機領域做了概括性介紹。這兩本書合起來可用做兩到三個學期的計算機科學入門課程教材,為所有學生在自然科學、工程學和社會科學中解決計算問題提供必備的基礎知識。
本書大部分內容來自 Sedgewick 的算法系列圖書。本質上,本書和該系列的第 1 版和第 2 版最接近,但還包含了作者多年教學和學習的經驗。Sedgewick 的《C 算法(第 3 版)》、《C++ 算法(第 3 版)》、《Java 算法(第 3 版)》更適合用做參考書或是高級課程的教材,而本書則是專門為大學一、二年級學生設計的一學期教材,也是最新的基礎入門書或從業者的參考書。
致謝
本書的編寫花了近 40 年時間,因此想要一一列出所有參與人是不可能的。本書的前幾版一共列出了好幾十人,其中包括(按字母順序)Andrew Appel、Trina Avery、Marc Brown、Lyn Dupré、Philippe Flajolet、Tom Freeman、Dave Hanson、Janet Incerpi、Mike Schidlowsky、Steve Summit和Chris Van Wyk。我要感謝他們所有人,盡管其中有些人的貢獻要追溯到幾十年前。至于第 4 版,我們要感謝試用了本書樣稿的普林斯頓及其他院校的數百名學生,以及通過本書網站發表意見和指出錯誤的世界各地的讀者。
我們還要感謝普林斯頓大學對于高質量教學的堅定支持,這是本書得以面世的基礎。
Peter Gordon 幾乎從本書寫作之初就提出了很多有用的建議,這一版奉行的“歸本溯源”的指導思想也是他最早提出的。關于第 4 版,我們要感謝 Barbara Wood 認真又專業的編輯工作,Julie Nahil 對生產過程的管理,以及 Pearson 出版公司中為本書的付梓和營銷辛勤工作的朋友。所有人都在積極地追趕進度,而本書的質量并沒有受到絲毫影響。
第 1 章 基礎(一)
第 1 章 基礎(二)
第 1 章 基礎(三)
第 1 章 基礎(四)
第 2 章 排序(一)
第 2 章 排序(二)
第 2 章 排序(三)
第 2 章 排序(四)
第 3 章 查找(一)
第 3 章 查找(二)
第 3 章 查找(三)
第 3 章 查找(四)
第 4 章 圖(一)
第 4 章 圖(二)
第 4 章 圖(三)
第 4 章 圖(四)
第 5 章 字符串(一)
第 5 章 字符串(二)
第 5 章 字符串(三)
第 5 章 字符串(四)
第 6 章 背景(上)
第 6 章 背景(中)
第 6 章 背景(下)
閱讀全文: http://gitbook.cn/gitchat/geekbook/5d007178a734cc3011ebbba5
總結
- 上一篇: 暂时初步完成了搜索引擎的基本功能
- 下一篇: 通信PK电子,谁牛?