算法书籍推荐及网络资源 [转]

 

The Art of Computer Programming
作者:Donald  E.  Knuth
出版社:中文版由国防大学出版社发行,中文译本书名为《计算机程序设计艺术》
作者主页:http://www-cs-faculty.stanford.edu/~knuth/
学习笔记:http://www.cfcs.com.cn/fjas/ebook.htm

简介:简称TAOCP,是算法界公认的"葵花宝典"。这本书被American Scientist评为20世纪科学界最重要的12本学术著作之一,这12本著作中包括Einstein的相对论、Dirac的量子力学、Mandelbrot的分形理论、Wiener的控制论等,由此可见这本书的价值。该书的作者Donald E. Knuth也是计算机界公认的大师,他是Tex和metafont文件格式的发明者,是编译原理中LR(k)文法分析算法以及其它很多著名算法的发明者。因为他在算法设计和分析领域的贡献,以及他所写的这本TAOCP,他获得了1974年计算机界的诺贝尔奖--图灵奖。
TAOCP原计划要出七册,但是一直到目前为止Knuth只完成了三册,而目前只能找到第一册和第三册的中文版。这本书最初写于60年代,当时还没有流行的高级编程语言,所以Knuth自己发明了一种称为MIX的汇编语言,书中的算法和代码都用MIX语言描述,因此这本书并不适合初学者使用。现在虽然已经是第三次修订版,但是看来Knuth并不打算用某种高级语言来重写他的书。这本书最大的特点就是语言生动活泼,内容深入浅出,随手翻来读一读也会觉得妙趣无穷。即使不作为学习资料,该书也极具收藏价值,毕竟历史上还没有人像Knuth一样因为写了一本书而得到图灵奖。
推荐程度:五星级
使用语言:MIX
适用对象:适用于有较高水平的读者,初学者不易读懂,但是该书极具收藏价值。

Introduction to Algorithms
作者:Thomas H. Cormen,Charles E. Leiserson,Ronald L. Rivest
出版社:中文版书名为《现代计算机常用数据结构和算法》,潘金贵等编译,由南京大学出版社发行。
第二版译名《算法导论》高等教育出版社。
网络资源:http://www.cfcs.com.cn/fjas/ebook.htm

简介:如果说TACOP是算法界的"葵花宝典",那么称这本书为"独孤九剑"必然当之无愧。该书是MIT的电子工程系和计算机系的算法教材,其三个作者也是计算机界赫赫有名的大师。该书的第一部分是算法学习的数学基础知识介绍;第二部分分类介绍常用算法和数据结构;第三部分是高级专题,介绍包括并行算法、NP问题、近似算法等在内的高级科研专题。其中基础知识部分适合初学者,高级专题部分则适合作为研究生的研究课题。该书的最大特点就是每条算法的设计分析都有严密的证明,看了后给人一种知其然而知其所以然的感觉。该书既可以作为算法学习用书,也可以作为一本算法和数据结构的字典,适合各类读者,十分具有收藏价值。该书使用类似Pascal的伪代码进行描述,并不拘泥于语言的细节,适合使用各种编程语言的读者。
推荐程度:五星级
使用语言:类Pascal的伪代码
适用对象:适合各类读者,极具收藏价值

算法与数据结构
作者:傅清祥 王晓东
出版社:电子工业出版社
简介:该书是《计算机学科教学计划1993》的配套教材之一。它覆盖了《计算机学科教学计划1993》中开列的关于算法与数据结构主科目的所有知识单元。全书强调"算法"与"数据结构"之间密不可分的联系,因而强调融数据类型与定义在数据类型上的运算于一体的抽象数据类型,为面向对象的程序设计方法打下扎实的基础。该内容丰富,表述详细,适合不同层次的读者。其中基础部分可作为计算机学科专业本科生的教材,高级专题部分可作为高年级本科生或研究生的教材。该书的第一章绪论介绍算法的复杂性和算法表达中的抽象机制,这一章写的尤为经典,受到了不少网友的推崇。该书某些章节和内容摘自前面介绍的那本《Introduction to Algorithms》,但是这本书省略了其中复杂的数学证明,因此更适合于初学者。
推荐程度:五星级
使用语言:Pascal
适用对象:初学编程者,较有经验者,以及要参加各类程序员等级考试的读者

国际信息学奥林匹克竞赛指导--实用算法的分析与程序设计
作者:吴文虎 王建德
出版社:电子工业出版社
http://oibh.ioiforum.org/download/ebook.htm

简介:该书是中学生信息学奥赛的辅导丛书之一。该书介绍了各种常用的算法和算法设计思想,并以大量的例题和解析详细说明各种算法的具体应用。因为是写给中学生看的,所以该书的语言通俗易懂,不需要太多的数学知识也能够看懂其中大部分的算法。该书的缺点是对算法只给出具体步骤而缺乏严密的理论证明,不过也正是因为这样才使得该书浅显易懂。书中引用了大量信息学竞赛的题目,这些题目很多都是具有实际应用背景的经典问题,具有较高的实用价值。对于参加竞赛的中学生和大学生读者来说,该书是竞赛的必备书,因为该书基本上涵盖了NOI、IOI、ACM/ICPC竞赛的各个方面的内容;对于初学编程者来说,该书内容通俗易懂,深入浅出,例题生动有趣,解析具体详细,是学习编程不可多得的好书之一;对于有经验的编程者来说,该书涵盖的算法非常广泛,可作为算法参考手册使用。
推荐程度:五星级
使用语言:Pascal
适用对象:参加竞赛者,初学编程者,较有经验者,以及要参加各类程序员等级考试的读者

Computer Algorithms: Introduction to Design and Analysis
作者:Sara Baase,Allen Van Gelder
出版社:影印版由高等教育出版社出版。目前尚未见到有中文版。
网络资源:http://algorithm.lzu.edu.cn/modules.php?name=Downloads
简介:这本书是国外计算机系的经典教材,是中国教育部推荐的国外优秀教材之一,被包括南京大学在内的几所国内著名大学的计算机系作为算法设计课程指定教材。该书的特点是强调算法设计的具体步骤,对每个算法的设计和分析都给出一步一步的思维过程,而不是直接给出结果。该书的第三章对递归思想的描述非常经典,以简单的语言和清晰的表述深入浅出地说明了递归的工作过程和原理。该书的内容也非常新,第三版的第13章介绍了如何用最新的DNA计算机设计算法来解决哈密尔顿路径问题。该书使用类似Java语言的伪代码进行描述,充分利用了面向对象思想来描述抽象的ADT,但并不拘泥于具体的语言细节,学过任何一种高级语言的读者都能够看懂。该书重点在于介绍算法的设计和分析,对数据结构的介绍比较少,所以要和其他的数据结构参考书配套使用。
推荐程度:四星级
使用语言:类Java的伪代码
使用对象:已经学习过数据结构的读者,参加程序员等级考试的读者

数据结构与算法--面向对象的C++设计模式
英文版书名:Data Structures and Algorithms with Object-Oriented Design Patterns in C++
作者:Bruno R. Preiss
出版社:影印版和中文版由电子工业出版社出版
作者主页:http://www.pads.uwaterloo.ca/Bruno.Preiss/
英文电子版和书中代码下载:
http://www.pads.uwaterloo.ca/Bruno.Preiss/books/opus4/
Java语言版本的英文电子版:
http://www.pads.uwaterloo.ca/Bruno.Preiss/books/opus5/
C#语言版本的英文电子版:
http://www.pads.uwaterloo.ca/Bruno.Preiss/books/opus6
简介:正如书名所显示的,该书的最大特点是以面向对象的C++设计模式来描述数据结构和算法。书中所有的数据结构都以类和对象进行封装,充分体现了抽象数据类型ADT的内在含义。该书既可作为基本算法和数据结构的学习教材,也可作为面向对象的设计模式的经典范例。该书的作者还写了这本书的Java版和C#版,在作者的主页有该书不同语言版本的英文电子版,可以免费浏览或下载。这本书更适合作为数据结构的教材,作为算法分析的教材内容稍微浅了一点。
推荐程度:四星级
使用语言:有C++,Java,C#不同语言的版本
适用对象:初学编程者,参加程序员等级考试者,以及C++(或java, C#)语言的初学者

数据结构、算法与应用--C++语言描述
英文版书名:Data Structure, Algorithms, and Application in C++
作者:Sartaj Sahni
出版社:影印版和中文版由机械工业出版社出版
作者主页:http://www.cise.ufl.edu/~sahni/
书中代码和习题答案下载:
http://www.mhhe.com/engcs/compsci/sahni/
该书的Java语言版本主页:
http://www.cise.ufl.edu/~sahni/dsaaj/index.html
简介:这又是一本C++描述的数据结构和算法教材。该教材第一章介绍了一下C++的一些语法,书中所有出现代码的地方都对代码做了较详细的解释,比较适合C++的初学者作为学习数据结构的教材。该书强调面向对象的思想和设计模式,对常用的ADT进行了封装,并且用大量的实例说明了数据结构和算法的具体应用。该书还有一个用Java语言描述的版本。该书适合初学者作为数据结构的教材。
推荐程度:四星级
使用语言:C++,另有Java语言的版本
适用对象:编程初学者、参加程序员等级考试者以及C++(或Java)语言初学者

posted @ 2006-11-08 16:46  Kevin Lin  阅读(3948)  评论(1编辑  收藏  举报