K.O.《算法导论》——寻找算法真正入门路径
算法 对编程专业 很重要大家都认可,但怎么个重要法?算法好难学,怎么入门?这些问题则是对大家来说更为有意义的一个问题。
很多人,和专家都推荐《算法导论》这本书,有点捧为经书的意味。我读了一下以后,我觉得,名不符实。叫导论实有误导的嫌疑,更不能算入门书。我个人认为此书有以下一特点(不足):
- 第一,数学内容过多;
- 第二,行文不友好,中文翻译生硬;
- 第三,深入方向不对,也不浅出;
- 第四,内容组织不合理,不符合由基础到应用的认知自然规律;
好书应该行文流畅,深入浅出,这两条此书都不合格。就深入浅出而言,浅出是绝没有的,深入的话,深入到哪里去?数学内容这么多,可是算法的核心是数学(数学证明)吗?这一本书由几位从事计算机科学教学研究的应用数学家编著的,不是算法专业(也没有这个专业)的专家,也不是教育家,阅读体验可想而知。(以上只是个人初步的分析,或许有偏颇)
本文推荐一些反《算法导论》的专著,希望寻找 算法专业的真正入门路经。
第一本 《Mastering Algorithms with C》
算法不是数学,有自己的专业特性
When one studies data structures and algorithms, normally there is a fair amount of time spent on proving their correctness rigorously. Consequently, many books on this subject have an academic feel about them, and real details such as implementation and application are left to be resolved elsewhere. 当我们一般学习算法时,都会花费时间去「证明算法的正确性」,结果,很多书带有「严重的学究味」,而真正的细节(具体实现和应用)则被忽视了。 本书讲解数据结构和算法的工作原理和原因,它们真实世界中的应用,数学证明只有非常必要时才给出
这个观点相信对很多人说,是振聋发聩的,至少对我来说,有很大的共鸣。
技术和应用都照顾,是浅出的典范
作者在每一章节介绍一种技术时,都会给出技术的门类,「更重要的是给出技术的应用场景」,这能让学习者感觉到sense,是浅出好教材的典范。深入原因,浅出意义。
寻找算法和数据结构的原因
效率、抽象和重用性,都是算法和数据结构的原因。
作者是在引言提出这个观点,作者只看到了表面,不过提出「原因」这个概念非常有意义,他在下意识的寻找 算法专业的专业理论。这是数学式算法专著所没有的。
作者在尝试抽象,抽象出算法的「专业理论」,只是抽象得不够,因为:
- 第一,说数据结构和算法技术的原因是「效率」,这个原因太泛了;因为所有工具和技术都是为了效率的。所以原因不够具体;
- 第二,抽象同样类似,太宽泛;
- 第三,工程重用性,这个应该是不相关的
第二本 《A Common-Sense Guide to Data Structures and Algorithms》
这本 开篇高度质疑 《算法导论》这种引入过多的数学内容,让初学感觉no sense的作法,故书名就叫common-sense,意思是让算法研究回归到「它应该所在专业范围内」,译作“图解”估计是因为书有不少的图例展示算法过程,但完全违背作者的用意,所翻译者译意不良。
提出原因
书开章提出了数据结构,和算法技术是算法效率的因素,此即就是在寻找「原因」的迹象。
行文友好
本书最的大特点,是行文非常用户友好,非常的好读。缺点是,例子使用一般,最大的不足是低估了读者的智商。
缺点是低估了读者的智力
使用过多图例,展示算法过程
第三本《Introduction to The Design and Analysis of Algorithms》
以一种问题介绍不同的算法技术,和以同一种算术技术介绍不同的问题,显然,后者更接近理论。理论,技术,和应用是有序的。此本也是美国大学教材,选择的角度不 同。
新的 算法技术分类法
作者认为当前的 算法技术分类存在不足(过于粗糙),提出新的分类方案,更细致的算法技术分类,这种努力和创新,就是在找理论,完善理论的表现。
揭示 算法解题是「解题的一种」
提出,算法训练的成果可用在计算机之外,是一种通用的技能训练,这个观点是让人耳目一新的。
在本书中,主要将设计技术应用于计算机科学中的经典问题。但把这些设计技术看作问题求解的一般性工具时,它们的应用就 不仅限于传统的计算问题 和数学问题了。
第四本《Algorithms & Data Structures The Science Of Computing》
这本要被淹没了,因为它有点阳春白雪,理论高度比前几本要高出不少。可贵的是作者研究的理论,是真正的 算法专业的理论,而不是《算法导论》那样用那么多数学说事。
作者质疑「计算机科学」这个名字,提出CS是研究计算,而不是计算机,这个观点让我印象很深刻。 这本最大一个不足,是例子选的不太好,行文有点啰嗦,教育能力不合格,虽然理论出众。当然只是初步,有待深究。