这次我们来看看一本独特的内功心法,也就是《算法设计》(Algorithm Design)。这本书由Cornell大学两位理论计算机科学领域的知名专家Kleinberg和Tardos撰写,观点很高但又具有极强的可读性。
当然,有人会争辩这两位作者所做的研究领域不是特别传统的TCS,不过这属于见仁见智的问题了。权当八卦花边来看。
为何说这本书称之为易筋经呢?主要是因为它从头到尾都在训练算法思维,不求全不贪多,主打算法思想。最重要的是,它步步深入,从若干典型问题着手让你一点点提高姿势水平。
- 引言部分的几个经典问题可以说是开胃菜,然后作者就开始讲算法分析的知识。需要指出的是,好多人没有学会这个就妄谈算法效率,这点非常不合适,好歹得明白渐近记号的意思才能评判算法吧。
- 接下来这本书开始讨论图,虽然出乎意料但又在情理之中。因为很多高级算法都是关于图的,所以具备图的知识是相当重要的。另外,作者在这章复习了数据结构的知识,让其学以致用。
- 贪心算法的最好例子就是Kruskal算法,而且可以关联Union-Find的知识,因此作者在贪心算法这节详细论述了相关算法,可谓一举多得。
- 分治算法以递推式为纲,详细讲解了如何设计这类算法才能达到高效。当然,算法分析知识的基础在这里就发挥了重要作用,如果搞不清就难以找到好的划分策略。
- 动态规划向来是难点中的难点,作者用了很大篇幅讨论这种算法设计策略。当然,又用图问题来考虑,这反应了写作的完整性。
- 这本书也详细讨论了网络流,这是进阶算法必备的技能。
- 以上部分基本已经涵盖了算法设计策略。但这本书在后半部分从难解问题出发,讲解了近似算法和随机算法,更能助你修炼内力。
当然,秘籍虽好,还是要踏踏实实练习。若想投机取巧,骨感的现实分分钟会打脸的。正如本系列的主旨一样,一本书主义,是要将这本书实实在在地看完,不明白的地方反复阅读体会,方能成就自我。
由于国内版权到期,《算法设计》的影印版和译本已经无法买到。不过不必担心,据说这本书要在2018年推出第2版,期待它有新的改进。它的竞争对手繁多,例如《算法导论》和《算法设计指南》,还有Sedgewick的《算法》第4版。
不知道这本独门秘籍是否会给我们带来更多的惊喜,拭目以待吧!