在线时间 2 小时 最后登录 2013-7-16 注册时间 2013-7-15 听众数 0 收听数 0 能力 0 分 体力 7 点 威望 0 点 阅读权限 20 积分 5 相册 0 日志 0 记录 0 帖子 3 主题 2 精华 0 分享 0 好友 11 
 
 
升级  0% 
该用户从未签到
自我介绍 爱数学,爱编程  
前几天,秋叶拓哉(iwi)、岩田阳一(wata)和北川宜稔(kita_masa)所著,我(watashi)、庄俊元(navi)和李津羽(itsuhane)翻译的《挑战程序设计竞赛》,终于通过人民邮电出版社正式出版了。可喜可贺,可喜可贺。有关该书的简介,目录、试读和购买链接请通过传送门访问。这里我主要想说一下自己为什么要翻译和推荐本书,还有对程序设计竞赛学习资料的一些看法。也附带一些对译者序和第1章的补充说明。" X  B2 p9 F( x9 _! s2 g3 n 8 ^5 e) ]  t" \6 r$ O  g/ R 在译者序中我也略谈到了自己翻译此书的动机。和很多读者一样,最开始当然是奔着作者的名头去的,三位作者不但是国际知名的选手,而且TopCoder的最高rating加起来都破9k了。顶尖实力的作者往往可以站在更高的高度指点江山,也就更可能写出一本好书。随后就是读到书中的内容了,书中的绝大多数东西,我大概都在过去四五年时间的摸爬滚打中,逐步通过各种书籍、网络、道听途说、解题经验和总结体会掌握了。不过还是有一些耳目一新的内容,其中有一两个问题还是通过邮件得到了原作者的解答,涨了姿势。但仍有一种相见恨晚的感觉,假如自己早两年读到此书,想必能少费不少劲。从我个人的经历和对周围同学的了解来看,这是一本非常值得引进和推荐的书。* v7 r( P, ~0 ~# S2 F- U& C$ ~; |6 W . z$ M2 A% p% q8 v: @) \ 0 S+ N9 U9 e$ Z: b9 ? 7 T/ t+ ?( ?5 \( ^* } 首先,个人觉得这些书籍大致可以分为两类:教科书和工具书。诸如《数据结构与算法分析》(DSAA)之类的书可以作为教科书的代表,而诸如《计算机程序设计艺术》(大名鼎鼎的TAOCP)则毫无疑问是工具书的代表。大致地说,前者简单易懂,适于学习,后者高深全面,适于参考。二者并没有明显的分界线,很多时候全凭主观,因人而异。比如说,看懂了,这就是教科书,看懂目录了,这就是工具书。当然,和数学沾边越多的书,总是越难啃的,所以就难度而言,这类书籍和编程语言类书籍自然是没有可比性。! T: k3 w7 |/ D  M) ~5 g 6 K4 y) Z' N% n% ~; G ' E+ I" D+ T! e 2 {" O8 o% H- l6 v 按照这个分类标准,个人觉得《挑战程序设计竞赛》是一本很好的教科书。它非常的适合作为有志参加程序设计竞赛的同学自学,或是正在学习数据结构与算法分析的读者作为练习和拓展的参考书。该书将不同的主题按难度分成了三部分,循序渐进。作为教科书,其一个明显的特点是,几乎没有外链,把每个的主题都讲得很清楚,便于读者理解。多数题目附有核心代码,代码风格也不错,而且讲解的时候会附带一些思路的说明和方法技巧的总结。它在正文中详细完整的介绍了在程序设计竞赛中最重要的知识和思想,全书涵盖了在绝大多数题目中所会用到的知识和思想。而对于拓展内容则以补充说明或是附录的形式给出,并未多做介绍。这样的好处是该书很连贯,结合练习容易完整掌握,并突出了对大多数人而言更为重要,应该多花力气的地方。, @4 S% ^- r, @' y7 l) j: m 6 @( u- W' g# D! b8 d 在此举几个例子。书中介绍一般图匹配的时候并没有介绍经典的带花树实现,而是介绍了利用Tutte矩阵求匹配数的随机算法。因为要在书中真正把带花树的实现给读者讲清楚很困难,而对Edmonds算法的介绍资料也很多。在介绍后缀数组的时候,用的也不是线性算法,因为后缀数组最重要的是理解其性质和应用,而求后缀数组往往是模板的工作。在介绍字符串上的动态规划算法的时候,没有介绍KMP算法和Aho-Corasick算法,而是用暴力的方法求出了二者所对应的状态和转移,事实上这反而更有助于真正理解KMP算法和Aho-Corasick算法。  z/ o4 e$ F7 L% y $ @0 _; _/ ?* r  q 另一方面,如果你是想要学像弦图、动态树、Dancing Links(DLX)之类的高深玩意的话,这本书对你就几乎没有任何帮助。当然,说到DLX,我不知道为什么国内会曾经有一段时间盛行出DLX的题,题目的规模大得惊人,能AC的原因却是因为数据太水。真正理解DLX的人应该明白,这本质就是一个常数优化的启发式搜索,并不能改变问题本身的困难程度。从某种意义上说,在把基础搞扎实前,还是少折腾这些高深玩意比较靠谱。: D" a& Q' [2 v, l. d * z" q& b1 {2 y% C* P$ r 相比较而言,刘汝佳的《算法艺术与信息学竞赛》则介于教科书与工具书之间。书中按专题介绍了了相当多的知识,从头到尾许多小节都涉及到非常难的内容,还有一些神题。书中所提及的算法和数据结构要比《挑战程序设计竞赛》多得多,特别是计算几何部分要更为系统详细。书中包含有大量的外链,非常可惜的是OIBH早在多年前就挂掉了。书中对很多问题进行了总结归纳,但不都有详细的讲解介绍,对于身经百战的读者很容易找到共鸣,但对于其他读者而言,恐怕读起来就不那么轻松了,很多地方需要自己钻研,另找资料学习。黑书是可以多读几遍的书。起初可以在短时间内接触大量的算法和技巧,然后通过其他资料学习。遇到某个有印象的问题,或时隔一段时间后,可以再翻开看。慢慢地,就会对书中越来越多东西有共鸣了。8 z0 d8 D6 T  i6 G% H & a5 `4 _1 f; v9 K - o% w4 @8 E. m7 \# H: A " c! S$ n! R8 }! ?# y * h! Q1 |  Y, r + ]- y% J  V; m 5 I5 |+ Z) q4 e+ T8 d. K o 正确地实现8 u/ d& m  D- P: I5 ^ 5 v0 z) }; Z+ G' r( N* J( k o 灵活的想象力# ^: ?; M: p) A. w ) i. ~$ |* ~/ _$ }! b) U 也是必不可少的。平时训练过程中切莫顾此失彼。 
 
zan