算法 - 图1

    关键字:算法,抽象数据类型,排序,查找,图,字符串

    推荐:★★★★
    难度:★★★

    豆瓣链接:https://book.douban.com/subject/19952400/


    终于把这本书看完了,之前看的一本是《算法导论》。
    跟算法导论比起来,这本书更现代化。
    仿佛从游牧民族回到了高科技的今天。
    当然算法导论也有好的方面,请参考相关书评。

    现在,再回忆一下这本书的结构和内容,真的令人很不舍。
    阅读起来就好像读一本武侠小说一样,不想让它结束。
    本书的结构上有以下几点特色。

    • 使用科学方法指导实践

    科学方法:观察,假设,预测,核实,反复。
    提出所有假设必须是可证伪的,实验必须是可重现的。
    这对研究一个偏理论的学科至关重要,能摆正世界,模型,实验,三者之间的关系。

    • 不断改进,再现算法的发现过程

    很多书中讲解算法,只讲解已有的成果,并不知道这些成果是怎样想出来的。
    这本书,每章都循序渐进的,从简单算法开始,逐渐改进它,直到目前常用的算法。
    然后,介绍一下目前研究状态,以避免非专业人士在其中浪费时间。

    • 面向对象的设计,以及抽象数据类型,降低思维的深度

    面向对象的封装,使得信息得以隐藏,我们只需要关注一个特定功能即可。
    我们不用考虑程序的其他部分,使得理解算法更简单了。
    本书并没有用很多篇幅来介绍数据结构,而是将数据结构具体实现为了一个个的抽象数据类型。
    这使得算法的描述能落到实处。

    • 测试驱动开发,测试用例指导设计接口,并进行验证

    本书对每一个算法,都使用相应的测试用例进行约束。
    这不但符合科学的实验验证方法,还减少了对抽象数据类型接口的描述性说明。
    让我们可以清楚的知道,它们用起来是什么样子的。

    • java具体实现,可运行的源代码

    很多算法书上,并没有给出具体实现,或者只给出了部分实现。
    让读者很难有一个全局的观点认识特定算法。
    本书不同的是,使用了java语言实现了几乎所有的算法细节。
    让我们知道算法的实现,代码其实很少,是算法的思想重要。

    本书内容上,博大精深,主要介绍了以下几方面的内容。

    • 排序

    插入排序,希尔排序,归并排序,快速排序,优先队列

    • 查找

    二叉查找树,平衡查找树,散列表

    深度优先搜索,广度优先搜索,最小生成树,最短路径

    • 字符串

    字符串排序,单词查找树,字符串查找,正则表达式

    我们发现,每一种算法其实都是基于一种特定的数据结构而实现的。
    从面向对象的角度来看,算法和数据结构融合成了一个完整的数据类型。
    我们会更容易看出,算法维持数据结构不变的本质特征。

    最后,本书中的图示非常之多,算法的执行过程一目了然。

    好了,不多说了,再说说缺点吧。
    缺点可能和翻译有关,有些语句不是特别通顺,理解起来有些困难。
    好在java代码和图示,它们是全世界通用的,一定程度上弥补了这一点。

    如果想了解一下算法,当做入门读物。
    这本书已经非常好了,很值得推荐。