没有合适的资源?快使用搜索试试~ 我知道了~
首页第三版《算法导论》英文高清PDF
第三版《算法导论》英文高清PDF
需积分: 4 5 下载量 77 浏览量
更新于2024-07-21
收藏 8.73MB PDF 举报
《算法导论》第三版是计算机科学领域的经典之作,由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein四位知名学者合著。该书英文原版于2009年由麻省理工学院出版社出版,全面覆盖了算法设计与分析的基础理论以及实践技巧。本书是计算机编程和算法领域的基石,旨在提供一套系统而深入的学习算法的方法。 本书共分为两个主要部分:理论基础和实践应用。理论部分详尽地介绍了各种算法的设计思想,如排序、搜索、图论、动态规划、贪心算法等,通过严谨的数学证明和实例解析,使读者理解算法背后的逻辑。作者强调算法的效率,不仅关注时间复杂度和空间复杂度的分析,还涉及算法的稳定性、可行性以及在实际问题中的优化策略。 实践应用部分则通过大量实例演示如何将理论知识应用于解决实际问题,包括数据结构的设计与实现,如数组、链表、树、图等,以及这些数据结构在算法设计中的关键作用。此外,书中还涵盖了一些高级主题,如近似算法、在线算法和随机化算法,帮助读者拓宽视野,应对复杂多变的计算环境。 《算法导论》第三版的特色在于其清晰的结构、丰富的例子和深入的剖析,使得无论是初学者还是经验丰富的专业人士都能从中获益匪浅。它不仅是学习计算机科学的基础读物,也是从事软件开发、人工智能、数据科学等领域研究的必备参考书。版权方面,未经许可,任何形式的复制或电子存储都受到严格保护。 《算法导论》第三版是一本全面且权威的算法教材,对于理解并掌握计算机科学的核心原理,提升编程技能,以及进行高效问题求解具有不可替代的价值。对于那些希望在这个快速发展的领域保持竞争力的人来说,这是一本不可或缺的宝典。
资源详情
资源推荐
Preface xv
What are the prerequisites for reading this book?
!
You should h ave some programming experie nce. In partic ular, y ou should u n-
derstand recursive procedures and simple data structures such as arrays and
linked lists.
!
You should have some facility w ith mat hematical proofs , and espe cially proofs
by mathematical induction. A few portions of the book rely on some knowledge
of elementary calculus. Beyond that, Parts I and VIII of this book teach you all
the mathematical techniques you will need.
We have heard, loud and clear, the call to supply solutions to problems and
exercises. Our Web site, http://mitpress.mit.edu/algorithms/, links to solutions for
afewoftheproblemsandexercises. Feelfreetocheckyoursolutionsagainstours.
We ask, however, that you do not send your solutions to us.
To the professional
The wide range of topics in this book makes it an excellent handbook on algo-
rithms. Because each chapter is relatively self-contained, you can focus in on the
topics that most interest you.
Most of the algorithms we discuss have great practical utility. We therefore
address implementation concerns and other engineering issues. We often provide
practical alternatives to the few algorithms that are primarily of theoretical interest.
If you wish to implement any of the algorithms, you should find the transla-
tion of our pseudocode into your favorite programming language to be a fairly
straightforward task. We have designed the pseudocode to present each algorithm
clearly and succinctly. Consequently, we do not address error-handling and other
software-engineering issues that require specific assumptions about your program-
ming environment. We attempt to present each algorithm simply and directly with-
out allowing the idiosyncrasies of a particular programming language to obscure
its essence.
We understand that if you are using this book outside of a course, then you
might be unable to check your solutions to problems and exercises against solutions
provided by an instructor. Our Web site, http://mitpress.mit.edu/algorithms/, links
to solutions for some of the problems and exercises so that you can check your
work. Please do not send your solutions to us.
To our colleagues
We have supplied an extensive bibliography and pointers to the current literature.
Each chapter ends with a set of chapter notes that give historical details and ref-
erences. The chapter notes do not provide a complete reference to the whole field
xvi Preface
of algorithms, however. Though it may be hard to believe for a book of this size,
space constraints prevented us from including many interesting algorithms.
Despite myriad requests from students for solutions to problems and exercises,
we have chosen as a matter of policy not to supply references for problems and
exercises, to remove the temptation for students to look up a solution rather than to
find it themselves.
Changes for the third edition
What has changed between the second and third editions of this book? The mag-
nitude of the changes is on a par with the changes between the first and second
editions. As we said about the second-edition changes, depending on how you
look at it, the book changed either not much or quite a bit.
Aquicklookatthetableofcontentsshowsthatmostofthesecond-editionchap-
ters and sections appear in the third edition. We removed two chapters and one
section, but we have added three new chapters and two new sections apart from
these new chapters.
We kept the hybrid organization from the first two editions. Rather than organiz-
ing chapters by only problem domains or according only to techniques, this book
has elements of both. It contains technique-based chapters on divide-and-conquer,
dynamic programming, greedy algorithms, amortized analysis, NP-Completeness,
and approximation algorithms. But it also has entire parts on sorting, on data
structures for dynamic sets, and on algorithms for graph problems. We find that
although you need to know how to apply techniques for designing and analyzing al-
gorithms, problems seldom announce to you which techniques are most amenable
to solving them.
Here is a summary of the most significant changes for the third edition:
!
We added new chapters on van Emde Boas trees and multithreaded algorithms,
and we have broken out material on matrix basics into its own appendix chapter.
!
We revised the chapter on recurrences to more broadly cover the divide-and-
conquer technique, and its first two sections apply divide-and-conquer to solve
two problems. The second section of this chapter presents Strassen’s algorithm
for matrix multiplication, which we have moved from the chapter on matrix
operations.
!
We removed two chapters that were rarely taught: binomial heaps and sorting
networks. One key idea in the sorting networks chapter, the 0-1 principle, ap-
pears in this edition within Problem 8-7 as the 0-1 sorting lemma for compare-
exchange algorithms. The treatment of Fibonacci heaps no longer relies on
binomial heaps as a precursor.
Preface xvii
!
We revised our treatment of dynamic programming and greedy algorithms. Dy-
namic programming now leads off with a more interesting problem, rod cutting,
than the assembly-line scheduling problem from the second edition. Further-
more, we emphasize memoization a bit more than we did in the second edition,
and we introduce the notion of the subproblem graph as a way to understand
the running time of a dynamic-programming algorithm. In our opening exam-
ple of greedy algorithms, the activity-selection problem, we get to the greedy
algorithm more directly than we did in the second edition.
!
The way we delete a node from binary search trees (which includes red-black
trees) now guarantees that the node requested for deletion is the node that is
actually deleted. In the first two editions, in certain cases, some other node
would be deleted, with its contents moving into the node passed to the deletion
procedure. With our new way to delete nodes, if other components of a program
maintain pointers to nodes in the tree, they will not mistakenly end up with stale
pointers to nodes that have been deleted.
!
The material on flow networks now bases flows entirely on edges. This ap-
proach is more intuitive than the net flow used in the first two editions.
!
With the material on matrix basics and Strassen’s algorithm moved to other
chapters, the chapter on matrix operations is smaller than in the second edition.
!
We have modified our treatment of the Knuth-Morris-Pratt string-matching al-
gorithm.
!
We corrected several errors. Most of these errors were posted on our Web site
of second-edition errata, but a few were not.
!
Based on many requests, we changed the syntax (as it were) of our pseudocode.
We now use “ D”toindicateassignmentand“
==
”totestforequality,justasC,
C++, Java, and Python do. Likewise, we have eliminated the keywords do and
then and adopted “//”asourcomment-to-end-of-linesymbol.Wealsonowuse
dot-notation to indicate object attributes. Our pseudocode remains procedural,
rather than object-oriented. In other words, rather than running methods on
objects, we simply call procedures, passing objects as parameters.
!
We added 100 new exercises and 28 new problems. We also updated many
bibliography entries and added several new ones.
!
Finally, we went through the entire book and rewrote sentences, paragraphs,
and sections to make the writing clearer and more active.
xviii Preface
Web site
You c an use our Web site, http://mitpres s.m it.edu/algorithms/, to obtain s u pple-
mentary information and to communicate with us. The Web site links to a list of
known errors, solutions to selected exercises and problems, and (of course) a list
explaining the corny professor jokes, as well as other content that we might add.
The Web site also tells you how to report errors or make suggestions.
How we p roduced this book
Like the second edition, the third edition was produced in L
A
T
E
X2
"
.Weusedthe
Times font with mathematics typeset using the MathTime Pro 2 fonts. We thank
Michael Spivak from Publish or Perish, Inc., Lance Carnes from Personal TeX,
Inc., and Tim Tregubov from Dartmouth College for technical support. As in the
previous two editions, we compiled the index using Windex, a C program that we
wrote, and the bibliography was produced with B
IBT
E
X. The PDF files for this
book were created on a MacBook running OS 10.5.
We drew the illustrations for the third edition using MacDraw Pro, with some
of the mathematical expressions in illustrations laid in with the psfrag package
for L
A
T
E
X2
"
.Unfortunately,MacDrawProislegacysoftware,havingnotbeen
marketed for over a decade now. Happily, we still have a couple of Macintoshes
that can run the Classic environment under OS 10.4, and hence they can run Mac-
Draw Pro—mostly. Even under the Classic environment, we find MacDraw Pro to
be far easier to use than any other drawing software for the types of illustrations
that accompany computer-science text, and it produces beautiful output.
1
Who
knows how long our pre-Intel Macs will continue to run, so if anyone from Apple
is listening: Please create an OS X-compatible version of MacDraw Pro!
Acknowledgments for the third edition
We have been working with the MIT Press for over two decades now, and what a
terrific relationship it has been! We thank Ellen Faran, Bob Prior, Ada Brunstein,
and Mary Reilly for their help and support.
We were geographically distributed while producing the third edition, working
in the Dartmouth College Department of Computer Science, the MIT Computer
1
We investigated several drawing programs that run under Mac OS X, but all had significant short-
comings compared with MacDraw Pro. We briefly attempted to produce the illustrations for this
book with a different, well known drawing program. We found that it took at least five times as long
to produce each illustration as it took with MacDraw Pro, and the resulting illustrations did not look
as good. Hence the decision to revert to MacDraw Pro running on older Macintoshes.
Preface xix
Science and Artificial Intelligence Laboratory, and the Columbia University De-
partment of Industrial Engineering and Operations Research. We thank our re-
spective universities and colleagues for providing such supportive and stimulating
environments.
Julie Sussman, P.P.A., once again bailed us out as the technical copyeditor. Time
and again, we were amazed at the errors that eluded us, but that Julie caught. She
also helped us improve our presentation in several places. If there is a Hall of Fame
for technical copyeditors, Julie is a sure-fire, first-ballot inductee. She is nothing
short of phenomenal. Thank you, thank you, thank you, Julie! Priya Natarajan also
found some errors that we were able to correct before this book went to press. Any
errors that remain (and undoubtedly, some do) are the responsibility of the authors
(and probably were inserted after Julie read the material).
The treatment for van Emde Boas trees derives from Erik Demaine’s notes,
which were in turn influenced by Michael Bender. We also incorporated ideas
from Javed Aslam, Bradley Kuszmaul, and Hui Zha into this edition.
The chapter on multithreading was based on notes originally written jointly with
Harald Prokop. The material was influenced by several others working on the Cilk
project at MIT, including Bradley Kuszmaul and Matteo Frigo. The design of the
multithreaded pseudocode took its inspiration from the MIT Cilk extensions to C
and by Cilk Arts’s Cilk++ extensions to C++.
We also thank the many readers of the first and second editions who reported
errors or submitted suggestions for how to improve this book. We corrected all the
bona fide errors that were reported, and we incorporated as many suggestions as
we could. We rejoice that the number of such contributors has grown so great that
we must regret that it has become impractical to list them all.
Finally, we thank our wives—Nicole Cormen, Wendy Leiserson, Gail Rivest,
and Rebecca Ivry—and our children—Ricky, Will, Debby, and Katie Leiserson;
Alex and Christopher Rivest; and Molly, Noah, and Benjamin Stein—for their love
and support while we prepared this book. The patience and encouragement of our
families made this project possible. We affectionately dedicate this book to them.
T
HOMAS H. CORMEN Lebanon, New Hampshire
CHARLES E. LEISERSON Cambridge, Massachusetts
RONALD L. RIVEST Cambridge, Massachusetts
CLIFFORD STEIN New York, New York
February 2009
剩余1312页未读,继续阅读
千度寻
- 粉丝: 61
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功