《算法导论》为什么经典

长期以来,我对于是否要在博客上写非技术类的东西取决不下。同是从0开头学习技术,一定会遇到许多相似的问题,我把它们记下来,还会给人以帮助。但是非技术类的东西,写了也是给自己看的,在没有从“对小我的思考”转变为“对大我的思考”之前(看了刘未鹏的博客后的感触),我不需要别人的理解和同情。再者,即使面对面交流,也不能保证使一个人完全理解另一个人,更何况活的思考变成死的文字。然而今天,我只是想把憋在心里的话写出来。人的层次并不相同,譬如许多计算机专业的学生在进入大学之前已能熟练编程,而我其时还连光驱和光盘都弄不清楚。我只是也想在这里说说自己一直放在心里没有说的话,来我博客的朋友请略过这一篇。

事情源于一次对比。最近学习网络流算法,啃了国内一本知名的算法教材好几天,通过不断重复倒是熟记了很多基本概念,但是记住的概念越多,心里的问号越多。对于算法学习来说,死记硬背算法是很低效的。我于是翻开《算法导论》,交叉学习。看了《算法导论》几页,发现两本书讲解方式上有非常大的不同,简单对比如下:《算法导论》中,第26章讲网络流算法,总共用了35页(翻译过来的中文版),使用了10组演示图片,总共使用了64行伪代码;国内的那本知名教材,讲解同样内容的网络流算法,用了40页,4张图片,没有一张图片是用来演示算法执行流程的,最让我吃惊的是,在40页的算法讲解中,C++代码超过了20页!

64行伪代码和超过20页的C++代码,这巨大的反差,使我对国内那本教材非常失望和惋惜。这让我想到霍金引用过的一句话,大意是书中每一条物理公式会使读者的数量减少一半,同样,对于讲解算法的书,代码的行数是与书的可读性成反比的。代码是非常有个人特色的,看到与自己风格不同的代码,不自觉就会产生一种排斥的心理。更不用说我们国内教材中的代码:风格混乱,字体难看,纸张低劣,印刷错误。最让我痛苦的是,完整的代码被切割得很碎,配合着讲解算法的需要,这里撒一小块,那里撒一小块,我经常为了一个莫名其妙的变量和函数调用到处在前面的书页中找它的意义,或者根据上下文去猜它的意义。代码中不可避免地要用到如栈、队列、链表等这些基本数据结构,为了能集中精力讲算法,这些数据结构的实现代码是不应该贴上来的,所以只好杜撰一些名称,用惯了STL,我对这些不遵守STL中的约定的代码非常反感。一边看书我一边提醒自己,知道这些代码表示什么意思就行了,没必要对这些代码这么认真。我想,作者的初衷是为了实用,我仔细读了些代码,感觉作者对算法的实现是非常精简的,代码的细节也处理的很好,但是很可惜,代码中有太多的细节了,一门生僻的伪代码又会加重读者的负担,两难的选择。

如果说这本教材让我感到惋惜,那么其它的教材,书店里铺天盖地的基础教程、入门教程,就让人愤怒了。尽管电子工业出版社和机械工业出版社不断推出让人一看就想买下来的书,这却对教材没有产生任何的影响。回想我大学时候的教材,C、C++、数据结构、算法,其中充斥着大量风格糟糕的代码:没有缩进,没有注释、变量名一律abcd或者汉语拼音。我当时痛苦地写着这样的代码,在我上C++课时看到老师在黑板上写下int anIntVar;这样的语句时,我为这个变量名兴奋了好久。随着写的代码多了起来,与非教材类的经典技术书籍的接触多了起来,我对大学的教材和课堂的失望和反感也与日俱增。大学里那些理论性强的专业课的教材,很多地方明明几句话就可以点透的东西,却啰哩啰嗦晦涩难懂的讲上一大堆,在需要仔细讲解的时候,却往往又一句话带过,似乎唯恐不能炫耀其高超的水平。那些艰涩的文字,读完很多遍才发现也不过就是那么回事,真让人觉得,采用这种方式讲解的目的,就是因为对真正的难题束手无策,才专门在这些小问题上大做文章。既没有数学的简洁直接,又不通俗,一句话:入的貌似很深,出的绝对不浅。

这些烂教材和烂书导致了一个更严重的后果:真正好的教材被忽视了。而今,一提起“教材”这个词语,我们的印象就是一堆内容陈腐、讲解死板、形式僵化、专门用来应付考试的垃圾纸。这使得那些教材中十分珍贵的精华被一起当成了垃圾,考完试就随手抛掉。这对任何一方,都是巨大的浪费。

事实上,大学的专业课教材有些并不比那些经典著作省钱。为什么我们在课堂上就只能看到那些纸张低劣的教材,既然自己没有好的,为什么不“拿来”更好的?

上面这些只是我的牢骚,我刚上大学时对计算机是个白痴,经常被一大堆名词弄的晕头转向,上很多课,我看不到这和计算机有什么联系,老师也从不讲开的这些课都有什么用,所以经常逃课,等到知道逃的课很有用的时候,那门课已经考完试了,所以积累了不少牢骚。但我也在网上看到很多的对我极有启发的博客,看到很多文笔非常优秀的技术作家,牢骚归牢骚,我还是充满了希望的。只是感觉,需要时间。

 

  • 12
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
算法导论(原书第2版)》一书深入浅出,全面地介绍了计算机算法。对每一个算法的分析既易于理解又十分有趣,并保持了数学严谨性。本书的设计目标全面,适用于多种用途。涵盖的内容有:算法在计算中的作用,概率分析和随机算法的介绍。本书专门讨论了线性规划,介绍了动态规划的两个应用,随机化和线性规划技术的近似算法等,还有有关递归求解、快速排序中用到的划分方法与期望线性时间顺序统计算法,以及对贪心算法元素的讨论。本书还介绍了对强连通子图算法正确性的证明,对哈密顿回路和子集求和问题的NP完全性的证明等内容。全书提供了900多个练习题和思考题以及叙述较为详细的实例研究。 《算法导论(原书第2版)》一书内容丰富,对本科生的数据结构课程和研究生的算法课程都是很实用的教材。本书在读者的职业生涯中,也是一本案头的数学参考书或工程实践手册。 在有关算法的书中,有一些叙述非常严谨,但不够全面,另一些涉及了大量的题材,但又缺乏严谨性。《算法导论》将严谨性和全面性融为一体。 《算法导论(原书第2版)》一书深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。各章自成体系,可以作为独立的学习单元。算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂。说明和解释力求浅显易懂,不失深度和数学严谨性。 《算法导论(原书第2版)》一书自第1版出版以来,已经成为世界范围内广泛使用的大学教材和专业人员的标准参考书。第2版增加了论述算法作用、概率分析与随机算法、线性规划等几章。同时,对第1版的几乎每一节都作了大量的修订。一项巧妙而又重要的修改是提前引入循环不变式,并在全书中用来证明算法的正确性。在不改变数学和分析重点的前提下,作者将许多数学基础知识从第一部分移到了附录中,并在开始部分加入了一些富有诱导性的题材。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值