算法最适合学习阶段是在工作期间,但是学生时代也会要求开这一门课程,枯燥、乏味是上课时的感受,在大学期间有着一本书学算法就够了。

全书代码用C语言书写,相对来说受众面不太宽阔,现在学习Java等语言的程序员并不比C语言少,若是使用伪代码来描述也许更好。不过《算法的乐趣》 给出详细的步骤、思路和通用思想,更加抓住了算法的要点。《算法的乐趣》在开始的部分简单讲述了一下数据结构,之后是针对各个经典算法问题,进行的分析和讲解。很贴切的匹配了本书的名字“乐趣”,确实是帮助你学习算法的好书。之前也看过《算法导论》,和本书比起来,就显得比较深奥、晦涩,而且没有生气,想要坚持读下去,需要很大的恒心和耐力。对于没有学过数据结构的同学,建议看这本书是,配合数据结构一起看,特别是在开始的时候,会比较有感觉,比较轻松一点。《算法的乐趣》从思路出发,兼具思想,以一个生活中常见的例子(真正做到算法改变生活)来讲解算法。

这里就举书里的一个例子。

Gale-Shapley 算法即“求婚-拒绝算法”(propose-and-reject algorithm),以舞伴问题的整个求解过程来看,女孩从接受第一个邀请开始就有了舞伴,并且舞伴会越来越好,因为女孩可以根据自己的排序表确定是否选择更好的舞伴。与此同时,男孩如果被拒绝,他的选择对象会越来越差(因为男孩是根据自己的排序表从好到差开始选择的)。然而实际情况却并不是这样的,Gale-Shapley 算法中“求婚”的一方总是以最佳可能的稳定岗匹配结束,被“求婚”的一方总是以最差可能的稳定匹配结束,因为选择的主动权掌握在“求婚”者手中。现实生活中的道理也是如此,婚姻中男人如果不主动争取,条件好的女孩就会投入别人的怀抱,留给自己的机会就越来越差。学校里那些勇气可嘉、敢于主动示爱的男生,据说都是学过Gale-Shapley 算法的,不信你问问他们。

好好学习算法吧,这关系到人生大事啊!