请选择 进入手机版 | 继续访问电脑版

QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3824|回复: 6

《挑战程序设计竞赛》推荐及算法相关书籍吐槽

[复制链接]
字体大小: 正常 放大
尛鳳ル        

2

主题

0

听众

5

积分

该用户从未签到

升级  0%

自我介绍
爱数学,爱编程
发表于 2013-7-16 10:59 |显示全部楼层
|招呼Ta 关注Ta
前几天,秋叶拓哉(iwi)、岩田阳一(wata)和北川宜稔(kita_masa)所著,我(watashi)、庄俊元(navi)和李津羽(itsuhane)翻译的《挑战程序设计竞赛》,终于通过人民邮电出版社正式出版了。可喜可贺,可喜可贺。有关该书的简介,目录、试读和购买链接请通过传送门访问。这里我主要想说一下自己为什么要翻译和推荐本书,还有对程序设计竞赛学习资料的一些看法。也附带一些对译者序和第1章的补充说明。
' c% I+ t: x" ?# L! j9 B3 s- w  z0 d
在译者序中我也略谈到了自己翻译此书的动机。和很多读者一样,最开始当然是奔着作者的名头去的,三位作者不但是国际知名的选手,而且TopCoder的最高rating加起来都破9k了。顶尖实力的作者往往可以站在更高的高度指点江山,也就更可能写出一本好书。随后就是读到书中的内容了,书中的绝大多数东西,我大概都在过去四五年时间的摸爬滚打中,逐步通过各种书籍、网络、道听途说、解题经验和总结体会掌握了。不过还是有一些耳目一新的内容,其中有一两个问题还是通过邮件得到了原作者的解答,涨了姿势。但仍有一种相见恨晚的感觉,假如自己早两年读到此书,想必能少费不少劲。从我个人的经历和对周围同学的了解来看,这是一本非常值得引进和推荐的书。
1 o0 r- P* ~' F8 L& A( \5 f1 b: Y, k: [, Q
当然,在此之前国内已经出版有不少算法竞赛相关的书籍了,很多人想必希望知道这本书有什么特别之处。算法竞赛相关的书籍大致有两类,一类是算法和数学类的书籍,比如各种数据结构教材、离散数学教材、《算法导论》、《具体数学》等,一类是专门针对算法竞赛的书籍,其中的代表就是刘汝佳所著的几本书,而《算法艺术与信息学竞赛》(黑书)又是其中的代表。作者之一的iwi在MSRA实习期间也得知了黑书的大名。3 z5 b  h1 |' w$ B2 ~" N: ]5 Q

+ h& |+ t0 _  q2 C; h0 E& y3 B; X首先,个人觉得这些书籍大致可以分为两类:教科书和工具书。诸如《数据结构与算法分析》(DSAA)之类的书可以作为教科书的代表,而诸如《计算机程序设计艺术》(大名鼎鼎的TAOCP)则毫无疑问是工具书的代表。大致地说,前者简单易懂,适于学习,后者高深全面,适于参考。二者并没有明显的分界线,很多时候全凭主观,因人而异。比如说,看懂了,这就是教科书,看懂目录了,这就是工具书。当然,和数学沾边越多的书,总是越难啃的,所以就难度而言,这类书籍和编程语言类书籍自然是没有可比性。
9 C3 o# k% h! D) J8 ^9 [& }& q3 g6 v
8 A) L. p$ a2 {许多书都作为程序设计竞赛的学习资料被反复推荐,但事实上,我们大概可以仿照《最常被程序员们谎称读过的计算机书籍》写一篇《最常被ACMer们谎称读过的书籍》的吐槽文。里头有一句话很重要,所以我再抄一遍:“如果你自己没有读过这些计算机书籍,请不要推荐给别人”。当然,像《算法导论》这样的书个人觉得还是值得一读的,多数的章节并不难,可以当作教科书,后面的一些内容可以作为工具书需要时再参考,里面很多东西讲的很细,容易做到真正的理解吸收,比如从自动机引出KMP等等。而TAOCP则无疑是最常躺枪的装逼神器。有一天,我在同学的桌上看到一本TAOCP第一卷,打开一看很黄很暴力,我赶紧就把它盖上了。TAOCP很厉害,看exponentiation by squaring能引用到它,看permanent也能引用到它,连看数え上げお姉さん都能引用到它。读完TAOCP那必须能变得超厉害了,可那得是能读完啊,读不完说啥都白搭。所以推荐学习资料不能光看书好不好,还得看对目标人群合不合适。而一本好的教科书,不应该是尽可能体现作者有多牛,而是要能够尽可能简单地帮助读者变得更牛。如果看完了,懂的还是懂,不懂的还是不懂,那是没有意义的。; S1 Y& D! c' ^% a, u
  J! {5 u) X9 I6 [  Z5 v* s- n
按照这个分类标准,个人觉得《挑战程序设计竞赛》是一本很好的教科书。它非常的适合作为有志参加程序设计竞赛的同学自学,或是正在学习数据结构与算法分析的读者作为练习和拓展的参考书。该书将不同的主题按难度分成了三部分,循序渐进。作为教科书,其一个明显的特点是,几乎没有外链,把每个的主题都讲得很清楚,便于读者理解。多数题目附有核心代码,代码风格也不错,而且讲解的时候会附带一些思路的说明和方法技巧的总结。它在正文中详细完整的介绍了在程序设计竞赛中最重要的知识和思想,全书涵盖了在绝大多数题目中所会用到的知识和思想。而对于拓展内容则以补充说明或是附录的形式给出,并未多做介绍。这样的好处是该书很连贯,结合练习容易完整掌握,并突出了对大多数人而言更为重要,应该多花力气的地方。
, D; y1 s, P7 P  X( |' q$ t  x0 G0 |: a, t0 C7 A, H
在此举几个例子。书中介绍一般图匹配的时候并没有介绍经典的带花树实现,而是介绍了利用Tutte矩阵求匹配数的随机算法。因为要在书中真正把带花树的实现给读者讲清楚很困难,而对Edmonds算法的介绍资料也很多。在介绍后缀数组的时候,用的也不是线性算法,因为后缀数组最重要的是理解其性质和应用,而求后缀数组往往是模板的工作。在介绍字符串上的动态规划算法的时候,没有介绍KMP算法和Aho-Corasick算法,而是用暴力的方法求出了二者所对应的状态和转移,事实上这反而更有助于真正理解KMP算法和Aho-Corasick算法。6 l& t* F$ ^8 A  N
8 S( M5 w3 X7 t2 j: @9 w- b
另一方面,如果你是想要学像弦图、动态树、Dancing Links(DLX)之类的高深玩意的话,这本书对你就几乎没有任何帮助。当然,说到DLX,我不知道为什么国内会曾经有一段时间盛行出DLX的题,题目的规模大得惊人,能AC的原因却是因为数据太水。真正理解DLX的人应该明白,这本质就是一个常数优化的启发式搜索,并不能改变问题本身的困难程度。从某种意义上说,在把基础搞扎实前,还是少折腾这些高深玩意比较靠谱。3 E* L1 H- B/ V# `3 J

: C$ }& |& c) N, ~' D+ [6 m5 V相比较而言,刘汝佳的《算法艺术与信息学竞赛》则介于教科书与工具书之间。书中按专题介绍了了相当多的知识,从头到尾许多小节都涉及到非常难的内容,还有一些神题。书中所提及的算法和数据结构要比《挑战程序设计竞赛》多得多,特别是计算几何部分要更为系统详细。书中包含有大量的外链,非常可惜的是OIBH早在多年前就挂掉了。书中对很多问题进行了总结归纳,但不都有详细的讲解介绍,对于身经百战的读者很容易找到共鸣,但对于其他读者而言,恐怕读起来就不那么轻松了,很多地方需要自己钻研,另找资料学习。黑书是可以多读几遍的书。起初可以在短时间内接触大量的算法和技巧,然后通过其他资料学习。遇到某个有印象的问题,或时隔一段时间后,可以再翻开看。慢慢地,就会对书中越来越多东西有共鸣了。9 _/ l  q% {, P( h6 _+ y' J

$ C( s  l5 h5 u" l2 X) t当然,从最初阅读《算法艺术与信息学竞赛》,到去年翻译《挑战程序设计竞赛》,我自身的实力也已经不可同日而语了。所以上面对于两书的评价,当作两个不同的人做出的应该会更为客观一些。
% o, h% E8 w) M& d8 ^; Q3 z5 B- `2 ?
冰冻三尺非一日之寒。虽然书中的内容已经足以让读者的rating冲上2500,但真要达到2500的实力却还离不开充足的训练,通过实践把书中的内容真正化为己有。另一方面,训练的方法也是很重要了,好的方法能够做到事半功倍。正如《挑战程序设计竞赛》最开始所说的:程序设计竞赛是综合了以下两个要素的复合竞赛:
6 G, U: v' J6 w( K& B: \) l6 \$ W4 n: {  u9 r' \& b4 h, [
o 设计高效且正确的算法2 k2 t* `% _0 u. {8 I
o 正确地实现
. L) }; \6 j$ q. A1 z并且,为了设计算法:. q5 ]; E6 q, z; A- p% n
o 灵活的想象力+ m( N- W2 y) W% d9 y" P  N# @* h
o 算法的基础知识  p0 ], T9 m4 K+ p7 A. N
也是必不可少的。平时训练过程中切莫顾此失彼。
zan
Gone_wind        

0

主题

6

听众

77

积分

  • TA的每日心情
    奋斗
    2014-9-13 12:56
  • 签到天数: 24 天

    [LV.4]偶尔看看III

    升级  75.79%

    自我介绍
    建模小菜

    群组国赛讨论

    回复

    使用道具 举报

    p31415 实名认证       

    77

    主题

    7

    听众

    1592

    积分

  • TA的每日心情
    奋斗
    2017-8-4 11:07
  • 签到天数: 43 天

    [LV.5]常住居民I

    升级  59.2%

    新人进步奖

    群组我行我数

    群组数学趣味、游戏、IQ等

    群组数学建模

    群组数学天下

    群组南京邮电大学数模协会

    回复

    使用道具 举报

    p31415 实名认证       

    77

    主题

    7

    听众

    1592

    积分

  • TA的每日心情
    奋斗
    2017-8-4 11:07
  • 签到天数: 43 天

    [LV.5]常住居民I

    升级  59.2%

    新人进步奖

    群组我行我数

    群组数学趣味、游戏、IQ等

    群组数学建模

    群组数学天下

    群组南京邮电大学数模协会

    回复

    使用道具 举报

    7

    主题

    6

    听众

    259

    积分

  • TA的每日心情
    擦汗
    2014-3-23 19:23
  • 签到天数: 58 天

    [LV.5]常住居民I

    升级  79.5%

    自我介绍
    哈工程学生,大三
    回复

    使用道具 举报

    wmwm        

    0

    主题

    8

    听众

    29

    积分

  • TA的每日心情
    难过
    2013-12-3 18:36
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    升级  25.26%

    群组网络挑战赛B题交流群

    回复

    使用道具 举报

    1

    主题

    6

    听众

    1430

    积分

  • TA的每日心情
    开心
    2014-9-23 20:39
  • 签到天数: 390 天

    [LV.9]以坛为家II

    群组2013年美赛优秀论文解

    群组数学中国第二期SAS培训

    群组竹迹工作室

    群组电子科技大学成都学院

    群组学术交流A

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    fastpost qq
    收缩
    • 电话咨询

    • 04714969085

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文   

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2019-10-15 09:39 , Processed in 0.622659 second(s), 88 queries .

    回顶部