算法导论(原书第2版)
作者 : Thomas H.Cormen, Charles E.Leiserson, Ronald L.Rivest, Clifford Stein
译者 : 潘金贵 顾铁成 李成法 叶懋
丛书名 : 计算机科学丛书
出版日期 : 2006-09-20
ISBN : 7-111-18777-6
定价 : 85.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 754
开本 : 16开
原书名 : Introduction to Algorithms, Second Edition
原出版社: MIT Press
属性分类: 教材
包含CD :
绝版 :
图书简介

在有关算法的书中,有一些叙述非常严谨,但不够全面,另一些涉及了大量的题材,但又缺乏严谨性。《算法导论》将严谨性和全面性融为一体。
  本书深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。各章自成体系,可以作为独立的学习单元。算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂。说明和解释力求浅显易懂,不失深度和数学严谨性。
  本书自第1版出版以来,已经成为世界范围内广泛使用的大学教材和专业人员的标准参考书。第2版增加了论述算法作用、概率分析与随机算法、线性规划等几章。同时,对第1版的几乎每一节都作了大量的修订。一项巧妙而又重要的修改是提前引入循环不变式,并在全书中用来证明算法的正确性。在不改变数学和分析重点的前提下,作者将许多数学基础知识从第一部分移到了附录中,并在开始部分加入了一些富有诱导性的题材。

图书特色

图书前言

本书提供了对当代计算机算法研究的一个全面、综合性的介绍。书中给出了多个算法,并对它们进行了较为深入的分析,使得这些算法的设计和分析易于被各个层次的读者所理解。力求在不牺牲分析的深度和数学严密性的前提下,给出深入浅出的说明。
  书中每一章都给出了一个算法、一种算法设计技术、一个应用领域或一个相关的主题。算法是用英语和一种“伪代码”来描述的,任何有一点程序设计经验的人都能看得懂。书中给出了230多幅图,说明各个算法的工作过程。我们强调将算法的效率作为一种设计标准,对书中的所有算法,都给出了关于其运行时间的详细分析。
  本书主要供本科生和研究生的算法或数据结构课程使用。因为书中讨论了算法设计中的工程问题及其数学性质,因此,本书也可以供专业技术人员自学之用。
  本书是第2版。在这个版本里,我们对全书进行了更新。所做的改动从新增了若干章,到个别语句的改写。
  致使用本书的教师
  本书的设计目标是全面、适用于多种用途。它可用于若干课程,从本科生的数据结构课程到研究生的算法课程。由于书中给出的内容比较多,只讲一学期一般讲不完,因此,教师们应该将本书看成是一种“缓存区”或“瑞典式自助餐”,从中挑选出能最好地支持自己希望教授的课程的内容。
  教师们会发现,要围绕自己所需的各个章节来组织课程是比较容易的。书中的各章都是相对独立的,因此,你不必担心意想不到的或不必要的各章之间的依赖关系。每一章都是以节为单位,内容由易到难。如果将本书用于本科生的课程,可以选用每一章的前面几节内容;在研究生课程中,则可以完整地讲授每一章。
  全书包含920多个练习题和140多个思考题。每一节结束时给出练习题,每一章结束时给出一些思考题。练习一般比较短,用于检查学生对书中内容的基本掌握情况。有一些是简单的自查性思考题,另一些则要更充实,可以作为家庭作业布置给学生。每一章后的思考题都是些叙述较为详细的实例研究,它们常常会介绍一些新的知识。一般来说,这些思考题都会包含几个小问题,引导学生逐步得到问题的解。
  在那些不太适合于本科生、更适合于研究生的章节和练习前面,都加上了星号(*)。带星号的章节也不一定就比不带星号的更难,但可能要求了解更多的数学知识。类似地,带星号的练习可能要求有更好的数学背景或创造力。
  致使用本书的学生
  希望本教材能为同学们提供关于算法这一领域的有趣介绍。我们力求使书中给出的每一个算法都易于理解和有趣。为了在同学们遇到不熟悉或比较困难的算法时提供帮助,我们逐个步骤地描述每一个算法。此外,为了便于大家理解书中对算法的分析,对于其中所需的数学知识,我们给出了详细的解释。如果对某一主题已经有所了解,会发现根据书中各章的编排顺序,可以跳过一些介绍性的小节,直接阅读更高级的内容。
  本书是一本大部头著作,读者所修的课程可能只讲授其中的一部分。我们试图使它能成为一本现在对读者有用的教材,将来在读者的职业生涯中,也能成为一本案头的数学参考书或工程实践手册。
  阅读本书需要哪些预备知识呢?
 读者需要有一些程序设计方面的经验,尤其需要理解递归过程和简单的数据结构,如数组和链表。
 读者应该能较为熟练地利用数学归纳法进行证明。书中有一些内容要求读者具备初等微积分方面的知识。除此之外,本书的第一部分和第八部分将介绍读者需要用到的所有数学技巧。
  致使用本书的专业技术人员
  本书涉及的主题非常广泛,因而是一本很好的算法参考手册。因为每一章都是相对独立的,因而,读者可以重点查阅自己感兴趣的主题。
  在我们所讨论的算法中,多数都有着极大的实用价值。因此,我们在书中涉及了算法实现方面的考虑和其他工程方面的问题。对于那些为数不多的、主要具有理论研究价值的算法,通常还给出其实用的替代算法。
  如果希望实现这些算法中的任何一个,就会发现,将书中的伪代码翻译成读者熟悉的某种程序设计语言,是一件相当直接的事。伪代码被设计成能够清晰简明地描述每一个算法。因此,我们不考虑出错处理和其他需要对读者所用编程环境有特定假设的软件工程问题。我们力求简单而直接地给出每一个算法,而不会让某种特定程序设计语言的特殊性掩盖算法的本质内容。
  致我们的同事
  我们在本书中给出了详尽的参考文献。每一章在结束时都给出了“本章注记”,介绍一些历史性的细节和参考文献。但是,各章的注记并没有提供整个算法领域的全部参考文献。有一点可能是让人难以置信的,就是在本书这样一本大部头中,由于篇幅的原因,很多有趣的算法都没能包括进来。
  尽管学生们发来了大量的请求,希望我们提供思考题和练习的解答,但我们还是决定不提供思考题和练习的参考答案,以彻底打消学生们试图查阅答案、而不是自己动手得出答案的念头。
  第2版中所做的修改
  在本书的第1版和第2版之间有哪些变化呢?这些变化可以说不太大,也可以说很大,具体要看读者怎么看待这些变化了。
  快速地浏览一遍目录,就会发现,第1版中的多数章节在第2版中都出现了。在第2版中,去掉了两章和一些节的内容,增加了三章新的内容。除了这三章新的内容外,还增加了四个新节。如果单从目录来判断第2版中改动的范围的话,得出的结论很可能是改动不大。
  但实际上,第2版中的改动远不止目录中显示的那样。以下列出了第2版中所做的主要改动(没有经过特别的排序):
 新增了Clifford Stein这位合著者。
 修正了一些错误。有多少错误呢?可以说有几个吧。
 增加了新的三章内容:
  ■第1章讨论了算法在计算中的作用。
  ■第5章介绍了概率分析和随机算法。如第1版中一样,这些主题贯穿了整本书。
  ■第29章专门讨论了线性规划。
 在从第1版保留下来的各章中,增加了关于以下主题的新节:
  ■完全散列技术(perfect hashing)(第115节)。
  ■动态规划的两个应用(第151节和第155节)。
  ■利用随机化和线性规划技术的近似算法(第354节)。
 为了使更多的算法可以更早地在书中出现,第1版中有关数学背景知识的三章内容从第一部分移到了附录中,即现在的第八部分。
 新增了40多个思考题和超过185个练习题。
 明确地使用循环不变式来证明算法的正确性。第一个循环不变式出现在第2章中;整本书中循环不变式共用到了数十次。
 很多概率分析都进行了重新编写。特别地,我们在十多处用到了“指示器随机变量”(indicator random variable)技术,它简化了概率分析,在随机变量之间互相依赖的情况下,尤其如此。
 扩展和更新了各章注记和参考文献。参考文献增加了50%以上,我们也提及了许多在第1版印刷之后,新出现的算法研究成果。
我们还进行了以下的改动:
 有关递归求解的那一章中,不再包含迭代方法了。在第42节中,我们将递归树“提升”为一种方法。我们发现,与对递归式进行迭代相比,画出递归树后出错的可能性小了。但是,我们也指出了递归树的最佳用途,即利用它来产生猜测,再利用替代方法对猜测进行验证。
 快速排序(第71节)中用到的划分方法与期望线性时间顺序统计算法(expected lineartime orderstatistic algorithm,第92节)有所变化。现在,我们采用了Lomuto提出的方法,并将该方法与指示器随机变量一起使用,从而可以使分析更为简单一些。第1版中采用的是Hoare提出的方法,它现在是作为第7章中的一个思考题出现的。
 在第1133节中,修改了对通用散列技术(universal hashing)的讨论,将其纳入到关于完美散列的讨论中。
 在第124节中,对随机构造二叉查找树的高度,给出了一个简单得多的分析。
 对动态规划元素的讨论(第153节)和对贪心算法元素的讨论(第162节)大大地扩展了。关于活动选择问题的解释在贪心算法一章中开始出现,有助于读者搞清楚动态规划与贪心算法之间的关系。
 在第214节中,我们换掉了对不相交集合并(disjointsetunion)数据结构运行时间的证明,代之以利用潜势方法(potential method)导出一个紧致界的证明。
 在第225节中,对强连通子图算法正确性的证明更简单、清晰,也更直接了。
 对讨论单源最短路径的第24章做了重新组织,把对基本性质的证明移到了各自的节中。这种新的结构使我们可以更早地将注意力放在算法上。
 第345节给出了对NP完全问题的一个有所扩展的综述,并新增了对哈密顿回路(hamiltoniancycle)与子集和(subsetsum)问题的NP完全性的证明。
  对书中的每一节,几乎都做了重新编辑,修正了说明和证明中的错误,使之更简单明了。
  网站
  本书自第1版后的另一项变化就是拥有了自己的网站:http://mitpressmitedu/algorithms/。读者可以通过该网站报告在书中发现的错误,得到已知错误的清单,或者提出建议;欢迎大家提出意见和建议。我们特别欢迎大家提出一些关于新的练习题和思考题的想法,但请同时提供问题的解答。
  我们对不能亲自答复所有的意见和建议表示遗憾。
  第1版致谢
  很多朋友和同行都为本书做出了很大的贡献。在此对你们的帮助和富有建设性的意见表示感谢。
  麻省理工学院(MIT)的计算机科学实验室(Laboratory for Computer Science)为我们提供了一个理想的工作环境。在这个实验室里,计算理论小组的同事们特别支持和容忍我们,因为我们不断地请他们对本书的各个章节提出批评和建议。我们特别要感谢Baruch Awerbuch,Shafi Goldwasser,Leo Guibas,Tom Leighton,Albert Meyer,David Shmoys,以及va Tardos。感谢William Ang,Sally Bemus,Ray Hirschfeld以及Mark Reinhold,他们使我们的机器(DEC Microvax,Apple Macintosh以及Sun Sparc工作站)能够始终保持正常运行,并在我们超过了编译时间期限时,帮助我们重新编译。在Charles Leiserson暂时离开麻省理工学院的那段时间里,Thinking Machine公司为他在写作本书方面的工作提供了部分支持。
  很多同行在其他学校的一些课程中,都使用了本书的初稿作为教材。他们提供了大量有关错误修正和内容修订方面的建议。我们特别希望感谢Richard Beigel,Andrew Goldberg,Joan Lucas,Mark Overmars,Alan Sherman以及Diane Souvaine。
  在我们所教授的课程中,很多助教也为书中内容的形成做出了重要的贡献。我们特别要感谢Alan Baratz,Bonnie Berger,Aditi Dhagat,Burt Kaliski,Arthur Lent,Andrew Moulton,Marios Papaefthymiou,Cindy Phillips,Mark Reinhold,Phil Rogaway,Flavio Rose,Arie Rudich,Alan Sherman,Cliff Stein,Susmita Sur,Gregory Troxel,以及Margaret Tuttle。
  很多人提供了其他有价值的技术支持。Denise Sergent花了大量时间在麻省理工学院图书馆里查阅整理参考文献。Maria Sensale是我们阅览室的资料管理员,始终是那么乐于提供帮助。能使用Albert Meyer的私人藏书,帮我们节省了大量准备章节注记的时间。Shlomo Kipnis,Bill Niehaus以及David Wilson校正了旧的练习题,编写了一些新的练习题,并准备了有关练习题解答的注解。Marios Papaefthymiou和Gregory Troxel缩写了本书的索引。在过去的几年里,我们的秘书Inna Radzihovsky,Denise Sergent,Gayle Sherman,特别是Be Blackburn,都在本书的形成过程中,提供了无尽的支持,在此对他们表示感谢。
  本书早期的初稿中,有许多错误都是由学生们发现的。我们特别要感谢Bobby Blumofe,Bonnie Eisenberg,Raymond Johnson,John Keen,Richard Lethin,Mark Lillibridge,John Pezaris,Steve Ponzio以及Margaret Tuttle,他们仔细地阅读了本书。
  同行们对本书的某些章节或某些算法提供了重要的意见和建议,在此深表感谢。我们特别要感谢Bill Aiello,Alok Aggarwal,Eric Bach,Vaek Chvtal,Richard Cole,Johan Hastad,Alex Ishii,David Johnson,Joe Kilian,Dina Kravets,Bruce Maggs,Jim Orlin,James Park,Thane Plambeck,Hershel Safer,Jeff Shallit,Cliff Stein,Gil Strang,Bob Tarjan,以及Paul Wang。有几位同行无私地提供了一些思考题;我们特别要感谢Andrew Goldberg,Danny Sleator以及Umesh Vazirani。
  在写作本书的过程中,与麻省理工学院出版社及McGrawHill的合作始终是非常愉快的。我们特别要感谢麻省理工学院出版社的Frank Satlow,Terry Ehling,Larry Cohen,以及Lorrie Lejeune,以及McGrawHill的David Shapiro,感谢他们给予的鼓励、支持和耐心。尤其要感谢Larry Cohen所做的出色的审阅工作。
  第2版致谢
  当我们请Julie Sussman,PPA来担当本书第2版的技术审阅人时,我们并不知道自己有多么幸运。Julie除了编辑技术内容外,还热情地编辑了我们的文字部分。想到Julie在我们早期的初稿中发现了多少问题,就让我们觉得汗颜。想一想她在第1版中发现了多少错误(不幸的是,是在印刷之后),在这一版中,她能发现如此多的错误就不足为奇了。此外,Julie牺牲了她个人的计划来方便我们的安排;在她去维尔京群岛旅行时,甚至还随身带了某些章节的稿子!Julie,对于你所完成的令人惊叹的工作,我们怎么感谢都是不够的。
  在完成第2版时,本书的作者分别在达特茅斯学院的计算机科学系和麻省理工学院的计算机科学实验室工作。这两个单位都提供了令人兴奋的工作环境,感谢我们的同事们提供的支持。
  遍布世界各地的朋友和同行们提供了许多建议和意见,它们引导着我们的写作。非常感谢Sanjeev Arora,Javed Aslam,Guy Blelloch,Avrim Blum,Scot Drysdale,Hany Farid,Hal Gabow,Andrew Goldberg,David Johnson,Yanlin Liu,Nicolas Schabanel,Alexander Schrijver,Sasha Shen,David Shmoys,Dan Spielman,Gerald Jay Sussman,Bob Tarjan,Mikkel Thorup,以及Vijay Vazirani。
  很多老师和同行都教给我们许多有关算法的知识。特别要感谢我们的老师Jon L Bentley,Bob Floyd,Don Knuth,Harold Kuhn,HT Kung,Richard Lipton,Arnold Ross,Larry Snyder,Michael I Shamos,David Shmoys,Ken Steiglitz,Tom Szymanski,Eva Tardos,Bob Tarjan,以及Jeffrey Ullman。
  感谢我们在麻省理工学院和达特茅斯所授算法课程的许多助教做出的工作,他们是Joseph Adler,Craig Barrack,Bobby Blumofe,Roberto De Prisco,Matteo Frigo,Igal Galperin,David Gupta,Raj D Iyer,Nabil Kahale,Sarfraz Khurshid,Stavros Kolliopoulos,Alain Leblanc,Yuan Ma,Maria Minkoff,Dimitris Mitsouras,Alin Popescu,Harald Prokop,Sudipta Sengupta,Donna Slonim,Joshua A Tauber,Sivan Toledo,Elisheva WernerReiss,Lea Wittie,Qiang Wu,以及Michael Zhang。
  为我们提供计算机支持的包括麻省理工学院的William Ang,Scott Blomquist和Greg Shomo,以及达特茅斯的Wayne Cripps,John Konkle和Tim Tregubov。还要感谢麻省理工学院的Be Blackburn,Don Dailey,Leigh Deacon,Irene Sebeda和Cheryl Patton Wu,以及达特茅斯的Phyllis Bellmore,Kelly Clark,Delia Mauceli,Sammie Travis,Deb Whiting和Beth Young,感谢他们提供的管理方面的支持。达特茅斯的Michael Fromberger,Brian Campbell,Amanda Eubanks,Sung Hoon Kim以及Neha Narula也提供了及时的支持。
  有许多人报告了他们在第1版中发现的错误。我们要感谢以下的人,其中的每一个人都是首先报告在第1版中发现的某个错误的:Len Adleman,Selim Akl,Richard Anderson,Juan AndradeCetto,Gregory Bachelis,David Barrington,Paul Beame,Richard Beigel,Margrit Betke,Alex Blakemore,Bobby Blumofe,Alexander Brown,Xavier Cazin,Jack Chan,Richard Chang,Chienhua Chen,Ien Cheng,Hoon Choi,Drue Coles,Christian Collberg,George Collins,Eric Conrad,Peter Csaszar,Paul Dietz,Martin Dietzfelbinger,Scot Drysdale,Patricia Ealy,Yaakov Eisenberg,Michael Ernst,Michael Formann,Nedim Fresko,Hal Gabow,Marek Galecki,Igal Galperin,Luisa Gargano,John Gately,Rosario Genario,Mihaly Gereb,Ronald Greenberg,Jerry Grossman,Stephen Guattery,Alexander Hartemik,Anthony Hill,Thomas Hofmeister,Mathew Hostetter,YihChun Hu,Dick Johnsonbaugh,Marcin Jurdzinki,Nabil Kahale,Fumiaki Kamiya,Anand Kanagala,Mark Kantrowitz,Scott Karlin,Dean Kelley,Sanjay Khanna,Haluk Konuk,Dina Kravets,Jon Kroger,Bradley Kuszmaul,Tim Lambert,Hang Lau,Thomas Lengauer,George Madrid,Bruce Maggs,Victor Miller,Joseph Muskat,Tung Nguyen,Michael Orlov,James Park,Seongbin Park,Ioannis Paschalidis,Boaz PattShamir,Leonid Peshkin,Patricio Poblete,Ira Pohl,Stephen Ponzio,Kjell Post,Todd Poynor,Colin Prepscius,Sholom Rosen,Dale Russell,Hershel Safer,Karen Seidel,Joel Seiferas,Erik Seligman,Stanley Selkow,Jeffrey Shallit,Greg Shannon,Micha Sharir,Sasha Shen,Norman Shulman,Andrew Singer,Daniel Sleator,Bob Sloan,Michael Sofka,Volker Strumpen,Lon Sunshine,Julie Sussman,Asterio Tanaka,Clark Thomborson,Nils Thommesen,Homer Tilton,Martin Tompa,Andrei Toom,Felzer Torsten,Hirendu Vaishnav,MVeldhorst,Luca Venuti,Jian Wang,Michael Wellman,Gerry Wiener,Ronald Williams,David Wolfe,Jeff Wong,Richard Woundy,Neal Young,Huaiyuan Yu,Tian Yuxing,Joe Zachary,Steve Zhang,Florian Zschoke,以及Uri Zwick。
  我们的许多同行提供了经过深入思考的评审意见,填写了一份很长的调查表。我们要感谢评审人Nancy Amato,Jim Aspnes,Kevin Compton,William Evans,Peter Gacs,Michael Goldwasser,Andrzej Proskurowski,Vijaya Ramachandran以及John Reif。我们还要感谢以下人员,感谢他们将调查问卷寄了回来:James Abello,Josh Benaloh,Bryan BeresfordSmith,Kenneth Blaha,Hans Bodlaender,Richard Borie,Ted Brown,Domenico Cantone,M Chen,Robert Cimikowski,William Clocksin,Paul Cull,Rick Decker,Matthew Dickerson,Robert Douglas,Margaret Fleck,Michael Goodrich,Susanne Hambrusch,Dean Hendrix,Richard Johnsonbaugh,Kyriakos Kalorkoti,Srinivas Kankanahalli,Hikyoo Koh,Steven Lindell,Errol Lloyd,Andy Lopez,Dian Rae Lopez,George Lucker,David Maier,Charles Martel,Xiannong Meng,David Mount,Alberto Policriti,Andrzej Proskurowski,Kirk Pruhs,Yves Robert,Guna Seetharaman,Stanley Selkow,Robert Sloan,Charles Steele,Gerard Tel,Murali Varanasi,Bernd Walter,以及Alden Wright。我们希望能够将你们所有的建议付诸实现。唯一的问题是如果我们真采纳了所有建议的话,第2版的篇幅就会达到大约3000页之巨!
  第2版是用2ε编排出来的。Michael Downes将宏从古典(classic) 转换成了2ε,并将文本文件转换成使用这些新的宏。David Jones还提供了2ε支持。第2版中的插图是由本书作者利用MacDrawPro制作而成的。如在第1版中一样,索引是用Windex编译生成的,这是一个由作者用C语言编写的程序。参考文献是用生成的。Ayorkor MillsTettey和Rob Leathern帮助将插图转换成了MacDraw Pro格式,Ayorkor还对我们的参考文献进行了检查。
  就像在编写本书的第1版时一样,与麻省理工学院出版社和McGrawHill的合作是件令人愉快的事。我们的编辑,麻省理工学院出版社的Bob Prior和McGrawHill的Betsy Jones容忍了我们的各种怪毛病,并用胡萝卜加大棒的方式来不断督促我们向前走。
  最后,非常感谢我们各自的妻子Nicole Cormen,Gail Rivest和Rebecca Ivry,还有我们的孩子:Ricky,William和Debby Leiserson;Alex和Christopher Rivest;Molly,Noah和Benjamin Stein,还有我们的父母,Renee和Perry Cormen,Jean和Mark Leiserson,Shirley和Lloyd Rivest,以及Irene和Ira Stein,感谢他们在我们写作本书过程中给予的爱和支持。正是由于有了来自家庭的耐心和鼓励,本书的写作出版工作才得以完成。谨将此书献给他们。

THOMAS HCORMEN汉诺威,新罕布什尔州
CHARLES ELEISERSON剑桥,马萨诸塞州
RONALD LRIVEST剑桥,马萨诸塞州
CLIFFORD STEIN汉诺威,新罕布什尔州

作者简介

Thomas H.Cormen, Charles E.Leiserson, Ronald L.Rivest, Clifford Stein:Thomas H.Cormen: 达特茅斯学院计算机科学系副教授
Charles E.Leiserson: 麻省理工学院计算机科学与电气工程系教授
Ronald L.Rivest: 麻省理工学院计算机科学系Andrew与Erna Viterbi具名教授
Clifford Stein: 哥伦比亚大学工业工程与运筹学副教授

译者简介

潘金贵 顾铁成 李成法 叶懋:暂无简介

译者序

一、本书的内容
  目前,市面上有关计算机算法的书很多,有些叙述严谨但不全面,另外一些则是容量很大但不够严谨。本书将叙述的严谨性以及内容的深度和广度有机地结合了起来。第1版推出后,即在世界范围内受到了广泛的欢迎,被各高等院校用作多种课程的教材和业界的标准参考资料。它深入浅出地介绍了大量的算法及相关的数据结构,以及用于解决一些复杂计算问题的高级策略(如动态规划、贪心算法、平摊分析等),重点在于算法的分析和设计。对于每一个专题,作者都试图提供目前最新的研究成果及样例解答,并通过清晰的图示来说明算法的执行过程。
  本书是原书的第2版,在第1版的基础之上增加了一些新的内容,涉及算法的作用、概率分析和随机化算法、线性规划,以及对第1版中详尽的、几乎涉及到每一小节的修订。这些修订看似细微,实际上非常重要。书中引入了“循环不变式”,并贯穿始终地用来证明算法的正确性。在不改动数学和分析重点的前提下,作者将第1版中的许多数学基础知识从第一部分移到了附录中。
  二、本书的特点
  本书在进行算法分析的过程中,保持了很好的数学严谨性。书中的分析和设计可以被具有各种水平的读者所理解。相对来说,每一章都可以作为一个相对独立的单元来教授或学习。书中的算法以英语加伪代码的形式给出,只要有一点程序设计经验的人都能读懂,并可以用任何计算机语言(如C/C++和Java等)方便地实现。在书中,作者将算法的讨论集中在一些比较现代的例子上,它们来自分子生物学(如人类基因项目)、商业和工程等领域。每一小节通常以对相关历史素材的讨论结束,讨论了在每一算法领域的原创研究。
  本书的特点可以概括为以下几个方面:
  1概念清晰,广度、深度兼顾。
  本书收集了现代计算机常用的数据结构和算法,并作了系统而深入的介绍。对涉及的概念和背景知识都作了清晰的阐述,有关的定理给出了完整的证明。
  2“五个一”的描述方法。
  本书以相当的深度介绍了许多常用的数据结构和有效的算法。编写上采用了“五个一”,即一章介绍一个算法、一种设计技术、一个应用领域和一个相关话题。
  3图文并茂,可读性强。
  书中的算法均以通俗易懂的语言进行说明,并采用了大量插图来说明算法是如何工作的,易于理解。
  4算法的“伪代码”形式简明实用。
  书中的算法均以非常简明的“伪代码”形式来设计,可以很容易地把它转化为计算机程序,直接应用。
  注重算法设计的效率,对所有的算法进行了仔细、精确的运行时间分析,有利于进一步改进算法。
  三、本书的用法
  本书对内容进行了精心的设计和安排,尽可能考虑到所有水平的读者。即使是初学计算机算法的人,也可以在本书中找到所需的材料。
  每一章都是独立的,读者只需将注意力集中到最感兴趣的章节阅读。
  1适合作为教材或教学参考书。
  本书兼顾通用性与系统性,覆盖了许多方面的内容。本书不但阐述通俗、严谨,而且提供了大量练习和思考题。针对每一节的内容,都给出了数量和难度不等的练习题。练习题用于考察对基本内容的掌握程度,思考题有一定的难度,需进行精心的研究,有时还通过思考题介绍一些新的知识。
  2. 适合作为工程技术手册和参考书。
  对于工程技术人员来说,本书的覆盖范围很广,涉及专题的内容比较全面,因此,它是一本关于计算机数据结构和算法的非常好的参考手册。
  3适合作为工具书。
  本书收集的数据结构和算法都是比较常用的、典型的、高效的、成熟的,短时间内不会过时,故本书具有很好的收藏价值。
  参加本书翻译的人员有潘金贵、顾铁成、李成法、叶懋、戴世东、李春洪、王亚丽、叶保留、高青、左伟兴、徐健、李桂琼、张剑、吴堃、冯明辉、姚建等同志。由于我们的水平所限,翻译过程中错误在所难免,请广大读者批评指正。
  在此,我们还要感谢在翻译工作过程中为我们提供帮助的所有人。

  译者
  2005年10月

图书目录

第一部分基 础 知 识
引言
第1章算法在计算中的作用
11算法
12作为一种技术的算法
第2章算法入门
21插入排序
22算法分析
23算法设计
231分治法
232分治法分析
第3章函数的增长
31渐近记号
32标准记号和常用函数
第4章递归式
41代换法
42递归树方法
43主方法
*44主定理的证明
441取正合幂时的证明
442上取整函数和下取整函数
第5章概率分析和随机算法
51雇用问题
52指示器随机变量
53随机算法
*54概率分析和指示器随机变量的进一步使用
541生日悖论
542球与盒子
543序列
544在线雇用问题
第二部分排序和顺序统计学
引言
第6章堆排序
61堆
62保持堆的性质
63建堆
64堆排序算法
65优先级队列
第7章快速排序
71快速排序的描述
72快速排序的性能
73快速排序的随机化版本
74快速排序分析
741最坏情况分析
742期望的运行时间
第8章线性时间排序
81排序算法时间的下界
82计数排序
83基数排序
84桶排序
第9章中位数和顺序统计学
91最小值和最大值
92以期望线性时间做选择
93最坏情况线性时间的选择
第三部分数 据 结 构
引言
第10章基本数据结构
101栈和队列
102链表
103指针和对象的实现
104有根树的表示
第11章散列表
111直接寻址表
112散列表
113散列函数
1131除法散列法
1132乘法散列法
*1133全域散列
114开放寻址法
*115完全散列
第12章二叉查找树
121二叉查找树
122查询二叉查找树
123插入和删除
*124随机构造的二叉查找树
第13章红黑树
131红黑树的性质
132旋转
133插入
134删除
第14章数据结构的扩张
141动态顺序统计
142如何扩张数据结构
143区间树
录第四部分高级设计和分析技术导论
第15章动态规划
151装配线调度
152矩阵链乘法
153动态规划基础
154最长公共子序列
155最优二叉查找树
第16章贪心算法
161活动选择问题
162贪心策略的基本内容
163赫夫曼编码
*164贪心法的理论基础
*165一个任务调度问题
第17章平摊分析
171聚集分析
172记账方法
173势能方法
174动态表
1741表扩张
1742表扩张和收缩
第五部分高级数据结构
概述
第18章B树
181B树的定义
182对B树的基本操作
183从B树中删除关键字
第19章二项堆
191二项树与二项堆
1911二项树
1912二项堆
192对二项堆的操作
第20章斐波那契堆
201斐波那契堆的结构
202可合并堆的操作
203减小一个关键字与删除一个结点
204最大度数的界
第21章用于不相交集合的数据结构
211不相交集合上的操作
212不相交集合的链表表示
213不相交集合森林
*214带路径压缩的按秩合并的分析
第六部分图算法
引言
第22章图的基本算法
221图的表示
222广度优先搜索
223深度优先搜索
224拓扑排序
225强连通分支
第23章最小生成树
231最小生成树的形成
232Kruskal算法和Prim算法
第24章单源最短路径
241BellmanFord算法
242有向无回路图中的单源最短路径
243Dijkstra算法
244差分约束与最短路径
245最短路径性质的证明
第25章每对顶点间的最短路径
251最短路径与矩阵乘法
252FloydWarshall算法
253稀疏图上的Johnson算法
第26章最大流
261流网络
262FordFulkerson方法
263最大二分匹配
*264压入与重标记算法
*265重标记与前移算法
第七部分算法研究问题选编
引言
第27章排序网络
271比较网络
27201原理
273双调排序网络
274合并网络
275排序网络
第28章矩阵运算
281矩阵的性质
282矩阵乘法的Strassen算法
283求解线性方程组
284矩阵求逆
285对称正定矩阵与最小二乘逼近
第29章线性规划
291标准型和松弛型
292将问题表达为线性规划
293单纯形算法
294对偶性
295初始基本可行解
第30章多项式与快速傅里叶变换
301多项式的表示
302DFT与FFT
303有效的FFT实现
第31章有关数论的算法
311初等数论概念
312最大公约数
313模运算
314求解模线性方程
315中国余数定理
316元素的幂
317RSA公钥加密系统
*318素数的测试
*319整数的因子分解
第32章字符串匹配
321朴素的字符串匹配算法
322RabinKarp算法
323利用有限自动机进行字符串匹配
*324KnuthMorrisPratt算法
第33章计算几何学
331线段的性质
332确定任意一对线段是否相交
333寻找凸包
334寻找最近点对
第34章NP完全性
341多项式时间
342多项式时间的验证
343NP完全性与可归约性
344NP完全性的证明
345NP完全问题
3451团问题
3452顶点覆盖问题
3453哈密顿回路问题
3454旅行商问题
3455子集和问题
第35章近似算法
351顶点覆盖问题
352旅行商问题
3521满足三角不等式的旅行商问题
3522一般旅行商问题
353集合覆盖问题
354随机化和线性规划
355子集和问题
第八部分附录:数学基础知识
引言
A求和
A1求和公式及其性质
A2确定求和时间的界
B集合等离散数学结构
B1集合
B2关系
B3函数
B4图
B5树
B51自由树
B52有根树和有序树
B53二叉树与位置树
C计数和概率
C1计数
C2概率
C3离散随机变量
C4几何分布与二项分布
*C5二项分布的尾
参考文献
索引

教学资源推荐
作者: (美)Carl Hamacher 等
作者: Alfred V. Aho; Monica S. Lam; Ravi Sethi; Jeffrey D. Ullman
参考读物推荐
作者: 戴艳 等编著
作者: (美)Vic (J.R.) Winkler 著
作者: 刘宇航 包云岗 编著
作者: 于中华,黄桂钦等