想搞算法竞赛(比如你们最熟悉的OI或者ACM/ICPC)?如果你觉得你已经掌握了C语言,那么最好就从这本书开始竞赛之旅吧!
这本书的优点有:
1 平易近人
如果你连这本书都不能看懂(如果你会C语言),请你先思考自己是不是有认真在看(有没有思考啊,复习啊,做后面的练习啊……之类的)。如果你真的很认真但还看不懂……我建议你不要搞竞赛好了……另外,给出几本不平易近人的书,例如黑书,例如全国信息学奥林匹克联赛培训教程1-2。
笔者当年(高一)的第一本算法书就是后者,其间的一些句段,在其后长达5年的竞赛生涯中才逐渐领会。只是苦了我当年,看不懂就重看一遍……最后还是没看懂……
不过坦白地说,这本书的后半段显得有些仓促,特别是网络流那段简直可以说是很草率。
2 贴近竞赛
竞赛毕竟不同于理论上的算法设计。
有些在具体程序实现中的常犯错误,如果没有人点拨,新手往往就会栽在这上面,而新手一般不怎么会调试程序,经常花了很多时间才会发现是一个非常小的错误。
有些竞赛中的优化时间的小技巧,可能在渐近时间复杂度上没有任何改变,但是可能会成为一道题超时和通过的分水岭。
有些理论虽然知道伪代码,但是自己写出来又臭又长,这就需要学习别人的优越写法。有些写法虽然会慢一些,但是代码简短,易于竞赛中的编码(越长的代码潜在通过成本(包括错误提交的惩罚和调试时间等)就越高)。这本书中给出了大部分关键算法的具体实现代码,并且很优越,值得借鉴和学习,特别是本书中利用STL优先队列来实现堆优化的dijkstra那段代码堪称完美,笔者在之前实现同样功能的模块,长度一般在其3倍以上……
还有比如动态规划那章,仔细比较了定表法和刷表法(这两个词汇是刘汝佳发明的吧?)之间的区别。这两个概念的提出对于具体的动态规划程序实现非常重要,而在一般的理论书籍里面是没有这些内容的。
3 OJ题目推荐
记得原来的竞赛书后面也有题目,但是却只有题面(有些甚至没有数据范围!),没有数据,编写出程序也不知道对不对(不过会有人编写那种无法验证对错的习题么……)。把题目放到OJ上,写出程序之后可以及时评测。
书里面的bug也不少,不过无伤大雅(比如不会告诉你int的取值范围是[-32768,32767])。找出这些bug就当是对读者的检验吧。
如果你把这本书看完了,习题也做了大半,强烈推荐阅读《算法艺术与信息学竞赛学习指导》和《算法艺术与信息学竞赛》。把那两本书看得差不多了,到那时你也知道自己下一步该看什么书了。另外后面那两本书有些内容超出目前竞赛平均水平太多,这个自己把握了。
如果你能把《算法艺术与信息学竞赛》及其学习指导大部分掌握,就目前来看,ACM/ICPC金牌应该还是随便的。
目前为止,我见过的最好的算法竞赛入门书!
对“目前为止,我见过的最好的算法竞赛入门书!”的回应
《算法艺术与信息学竞赛》热门书评
-
把ACM请下神坛
16有用 0无用 Ryen 2010-02-03
一提到ACM竞赛,周围很多同学都觉得高不可攀,感觉是数学天才的专属领域,其实我们常常被很多大牛的光环给误导了, ACM相对于中学的信息学奥赛,难度已经降低了很多,大多数题目即使一般计算机专业的同学去做也完全有能力搞定。  ...
-
力荐,同时给作者一些建议
12有用 0无用 masque 2009-12-09
从书本的编排上,就可以看出作者的确是用心在写书。比如讲,动态规划一章,在介绍各种动态规划基本问题时,我目前见过的所有算法书都只给出最优值的那个值,而没有考虑到竞赛或其它需要时,对答案构造的需要。比如,如果一个题目真要你输出字典序列最小的方案,可能会难倒很多人。而真正靠初学者自己要来领悟这样一些方法,...
-
内容很不错,讲解的言简意赅,直达本质
8有用 0无用 RONGE KUTA 2010-03-26
我初看这本书的时候,感觉内容实在艰深,看了第一章就看不下去了,后来系统的上过算法课程后,看这本书就显然轻松多了。这本书 说来 真的是需要有比赛经验的人看 倒好,个人感觉 作为 业余提高 算法能力的话,倒是可以有其他的选择。说实话,自己的水平太有限了,看书的速度十分的慢。但是 还是真诚的推荐:里面的内...
-
目前为止,我见过的最好的算法竞赛入门书!
5有用 0无用 GungHo 2012-01-31
想搞算法竞赛(比如你们最熟悉的OI或者ACM/ICPC)?如果你觉得你已经掌握了C语言,那么最好就从这本书开始竞赛之旅吧!这本书的优点有:1 平易近人如果你连这本书都不能看懂(如果你会C语言),请你先思考自己是不是有认真在看(有没有思考啊,复习啊,做后面的练习啊……之类的)。如果你真的很认真但还看不...
-
书不错,标题很糟,而且只适合有天赋的人
4有用 2无用 xiaq 2010-07-06
名为入门经典但其实不适合初学者。刘同学和在《算法艺术和信息学竞赛》中一样,把过多的细节留给了读者思考。...