小评《算法导论》(转载)

来源:互联网 发布:股票新闻软件知乎 编辑:程序博客网 时间:2024/05/16 16:18

原帖地址:http://blog.sina.com.cn/s/blog_5a3929df0100eoje.html

 

走进算法——小评《算法导论》

   “程序=算法+数据结构”这式子我们都知道,可是却又不是很“知道”。越来越高级的程序设计语言和集成开发环境帮助我们进行快速的软件开发,代码自动生成机制和封装良好的组件技术使得我们可以像搭积木一样构造系统。于是我们开始对数据结构和算法生疏了,转而跟风去学习这样那样的编程语言。很多本科生正是因为这样的原因错过了打好坚实基础的大好时间,在技术的海洋中迷失了方向。于是,多了很多有趣的问题,譬如语言之争、平台之争……甚至还没有开始系统掌握一门语言之前就开始考虑是学习Java还是C++,PHP还是CGI……当然现在又多了c#、Ruby、Python等等等等。舍本逐末的做法明显愚蠢,可我们恰恰是乐此不疲。


直到真正开发项目或者做科研的时候,才意识到自以为了不起的编程技术并不足以应付真正的研发需要。其实很多很多的软件开发恰恰需要扎实的理论基础知识,如何高效地处理并发任务,如何应对高负载和阻塞,如何解决系统瓶颈等等。很多的系统其实需要我们绞尽脑汁,找到一套切实可行的数据结构和运行算法。而IT技术职位之所以还处于高薪之列,正是因为需要更多的基础知识扎实、拥有创造性能力的开发人员。君不见,现有的IT技术职位的笔试和面试涉及越来越多的算法和数据结构方面的知识。我身边也有众多同仁开始意识到自己上学时候的欠缺,纷纷恶补数据结构和算法分析。



如果有人要我推荐一本系统研习算法的图书,那我会不加思索地选这本《算法导论》。有人说这么多的算法书籍,为何要推荐这本。其实,和介绍各种开发平台和程序设计语言的那些抄来抄去的书相比,算法类的书实在是少的可怜。在如此有限的书籍之中找到一本最好的还是相对比较容易的。我钟情这本书的原因如下:



1.这是一本科班教材。数不清的名牌大学采用了这本书作为计算机专业的算法教材,其中包括卡内基•梅隆、麻省理工、斯坦福三所公认拥有全世界最顶尖的计算机科学专业的学校。所以这本书是可信的、严谨的、科学的、经过检验的。同时,课后习题的存在,可以帮助我们检验自己的学习情况。



2.这本书的涵盖范围相当的广。由易到难,几乎囊括绝大部分主要的算法分支。如果想通过一本书就系统地学习算法分析与设计课程,那么本书显然是最佳选择之一。当然也有《算法导论》一书没有涵盖的方面,但是,确实已经相当广博了。



3.这本书具有一定的深度。不同专题的讨论具有相当的深度,基本上从分析和设计思想方面来传递知识体系和方法论,引导我们建立自己的思考方式。单靠学习到的书本知识肯定是不够的,但是通过有一定深度的训练,我们可以学会如何进行算法的分析与设计,不至于浮在面上。



4.综合以上:既有深度又有广度,同时保持科学的严谨性的一本书,以我目前的阅读经历来看,只此一本。当然,有更好的书,即高德纳(Knuth)的《计算机程序设计艺术》。但那是大部头,至今还没有写完,全书七卷才刚刚进行到第四卷。而且就已经出版的四卷书来看,想要读通这部书,没有两、三年功夫还做不到。我表弟是专搞OI和ACM的,以他的投入程度,一样是读了一半《计算机程序设计艺术》就投入了《算法导论》的怀抱。所以我会推荐《算法导论》。至于《计算机程序设计艺术》这套书,等学会了这一本书后再去研究,也还是很大的工程。



5.适用性好。《算法导论》除了具有教材的系统性外,同时在安排结构的时候也充分把各个章节独立起来,使得读者能够有选择地阅读自己需要的内容。在附录中还提供了必备的数学基础知识介绍。初学者作为教材,程序员作为参考书,应试者用来突击复习,都是不错的选择。同时,全书使用伪代码进行描述,没有语言上的差别,也扩大了本书的适用范围。



6.选择一本书当然是为了更好地学习,《算法导论》的另一个优势就是,MIT的开放课程计划为广大求知若渴的青年们提供了与本书配套的视频教程、课堂讲稿、课后作业、测验和教师参考。让我们有机会获得更好的学习效果。(该课程在MIT的中文网址:
http://www.myoops.org/cocw/mit/E ... ourseHome/index.htm。该课程在MIT的英文网址:http://ocw.mit.edu/OcwWeb/Electr ... ourseHome/index.htm。VeryCD提供的Emule课程下载网址:http://lib.verycd.com/2006/03/02/0000092463.html。)



当然本书也有一点不足。其一是书后习题没有答案,这其实在算法学习中很恼人,同样的问题会有很多不同的解决算法,初学者无法知道自己是否已经掌握了解决问题的较好办法,好在MIT开放课程中会提供部分答案;其二因为教材的本质,使得阅读的趣味性相对降低,至少不具备畅销书(例如headfirst系列)的幽默感,同时在举例方面也有所欠缺,有时理解起来不是特别顺畅。但是算法研究就是如此,需要专注和投入,同时在目前的图书市场上,这本书已经是不二之选了。我第一次拜读的时候还没有中文版可以阅读,啃英文版的过程对我来说也是充满了乐趣。现在有了中文版,实在是件值得庆祝的事情,应该可以帮助我解决当时对一些句子的困惑。中文版的译者们,其实很早以前就翻译过本书第一版的内容,大家可以查阅《现代计算机常用数据结构和算法》一书。因此我对这次第二版的翻译质量是很信任的,并在第一时间购买了中文版收藏在自己的书柜之中。



如果想用2~3个月的时间系统地学习算法分析与设计,如果想要短时间地复习一下算法知识,再次的,郑重向大家推介这本《算法导论》。不仅仅是因为个人的喜爱,同时这本书确确实实是一本不可多得的计算机算法方面的经典教材。最后,要感谢机械工业出版社华章公司和几位译者,感谢他们在计算机技术略显浮躁的今天能够带来这样一本理论巨著的中译本

原创粉丝点击