| 
在线时间0 小时最后登录2013-7-18注册时间2013-7-18听众数0收听数0能力0 分体力1 点威望0 点阅读权限10积分0相册0日志0记录0帖子0主题0精华0分享0好友1
 
 升级    0% 该用户从未签到 自我介绍技术圈里的非技术人
  | 
zan| 本帖最后由 zuoninger 于 2013-7-18 09:39 编辑 0 m% u! \- E, ~. P" W0 B 
 ' y$ W/ M& I# O7 C* g. W6 c世界顶级程序设计高手的经验总结
 / ]) ]. e; l, t# ?【ACM-ICPC全球总冠军】巫泽俊主译 7 A) p5 l' D! U2 v
 日本ACM-ICPC参赛者人手一册 $ b( z3 g$ R$ Q- o+ X) q& @! R
 
 . {3 A3 Q! L  [7 O7 P) z1 V  k, e* p. i
 ' l) ^0 Q$ v! K: f) P$ J" ~
 先来介绍一下我们这本应该人手一册的《挑战程序设计竞赛》(第2版)译者,这颗闪耀在编程竞赛中的明星巫泽俊,就在2011年的5月30下午2时,他获得了第35届ACM国际大学生程序设计竞赛全球总决赛冠军,媒体称他为“世界最聪明的人”。(见下图)
 5 u7 Q8 T" Y4 K) u( }+ _2 p* |* r' i, E
 
 6 y5 W5 m. d8 O3 v; D" ]
 ![]() / m" k% T$ q7 f3 w : [4 S% q* v8 H
 
 ![]() ! D8 M* ~* z9 X" u1 ~ 巫泽俊平时训练的实验室
 % ]( E: ]1 E. `. u+ e/ h: z$ n/ p' j' c0 H1 B' r/ j
 ; p0 i9 |. w7 ?4 Y; A6 @" s
 
 ![]() : |  C& c& d& {: E! a巫泽俊
 2 v/ p7 h- S; J# j- W% j, g# b* C$ E/ F4 U7 g! @' Q" }
 让我们看顶级ACM-ICPC总冠军是如何来介绍这本译作的!5 N4 x. h" z4 S5 ?7 T# @
 6 L8 s/ F3 |) g" f% H" X% k
 程序设计竞赛因其涉及的知识面广,比赛形式激烈有趣,吸引了越来越多的学生参与其中。参赛者不但可以从中锻炼算法设计能力,还能够提高代码编写能力。其中的佼佼者也受到了越来越多国际知名公司的重视和欢迎。 本书的几位作者是世界公认的顶尖选手,在竞赛和学术领域都取得了令人瞩目的成就。他们结合自己的专业知识和比赛经验,将自己的心得和技巧集结成书。
 / f$ r6 W, Y7 A6 H  V
 7 z; `, w4 F( I/ |2 b全书将不同的算法和例题按专题编排成小节,再将不同的小节由易到难分成四章,这样即便是初出茅庐的新手也不会有太大的阅读障碍。书中涵盖了在程序设计竞赛中会用到的大多数算法和技巧,并在附录中补充了书中未介绍但也比较有用的算法。在题材的安排上,作者取舍得当,主次分明,循序渐进,不以华而不实的奇技淫巧误导读者,又具有一定深度,相信即便是经验丰富的老将同样能从书中有所斩获。本书在结合例题进行讲解时,不是简单地堆砌问题和代码,而是注重引导读者更好地理解和运用算法来分析解决问题。对于正在学习数据结构与算法的读者而言,把它作为一本练习和拓展的参考书也是很好的选择。
 ! B/ e  J! E  F) p8 @7 q& N
 " V. |0 y0 Y+ n8 e1 x本书在日本广受好评,还先后在台湾地区和韩国出版。近年来程序设计竞赛在亚洲发展很快,在中国大陆也出版了不少相关书籍,但鲜见高质量的佳作。所以,在读到此书时,我们非常惊喜,迫切希望中国大陆也能引进这样的好书。2012年初,我们通过作者的推特了解到了本书第二版的出版,一些前辈们踊跃翻译计算机专业书籍的经历也鼓舞了我们,让我们萌生了亲自翻译此书的念头并联系了图灵教育。非常幸运的是,图灵教育也正考虑引进此书,于是有了今天呈现在各位读者面前的简体中文版。
 % H4 a1 N( E) N7 N- |! l* O' k( y$ Q5 @- y7 Z9 c7 E$ g" n, I
 在翻译上,我们力求做到既尊重国内选手的习惯,又符合计算机专业的表述。在修正原书中的一些笔误的同时,加入了一些译者注,以方便国内读者理解。但由于译者水平有限,不足之处在所难免,还望读者多多包涵,并不吝提出意见和建议。" T6 ^" X/ k" l) u& j1 ~
 0 b2 x( w$ s( j" F
 在翻译过程中,秋叶拓哉、岩田阳一和北川宜稔三位作者耐心地对我们的一些疑问和笔误给予了一一解答和确认。浙江大学的陈越、王灿和翁恺三位老师不但将我们领进了“快乐”竞赛的大门,还拨冗审阅了译稿并提出了宝贵的意见。网上不少同好也对本书的出版给予了关切和支持。在此谨对他们表示感谢。2 ]% y" B: J) I6 Y
 
 , \, I( ^7 ?* D$ h$ O( M! P从目录中了解这本书是否符合你的需求; @  a1 g, q* J
 
 % V/ _/ o; w$ d9 h" I) K! X
 ! w1 K5 R* G: V- t6 Y5 W$ r0 x第1章 蓄势待发——准备篇" f: m8 m& U/ f- @& G2 q/ V
 1.1  何谓程序设计竞赛
 $ g0 k7 N! X  y7 s1.2  最负盛名的程序设计竞赛
 $ @8 W3 _) N/ |& ~+ t* t! P1.2.1  世界规模的大赛——Google Code Jam(GCJ)
 8 Q9 G2 L. S  U8 S& q1.2.2  向高排名看齐!——TopCoder; j! z3 ]- F; E# \
 1.2.3  历史最悠久的竞赛—— ACM-ICPC
 , W7 @6 S/ {; d7 l' H1.2.4  面向中学生的信息学奥林匹克竞赛——JOI-IOI
 5 i2 U* u' L6 X9 w! ~' I/ E1.2.5  通过网络自动评测——Online Judge(OJ)
 ! x" K1 n8 I6 i- ?8 E1.3  本书的使用方法, t. N6 K7 h- w$ ^- r
 1.3.1  本书所涉及的内容
 : S' E+ I: y' \% h! k: m: v( V1.3.2  所用的编程语言
 ( M1 K1 S; K" m1.3.3  题目描述的处理
 , ]( D3 o1 V6 J7 @3 a. \1.3.4  程序结构- n( t' ~# T$ v' ~# J/ u
 1.3.5  练习题
 . n( D0 ^$ `0 H5 S0 m7 f7 @: y9 k2 F. M; Q1.3.6  读透本书后更上一层楼的练习方法
 7 {& j! s  A8 A# @8 t1.4  如何提交解答
 ' y6 S# |1 i& O7 \# K: I) K1.4.1  POJ的提交方法
 V5 ^$ h# w+ A9 O1.4.2  GCJ的提交方法
 " N) W( f7 n- g1.5  以高效的算法为目标) d# U3 y3 I# i# a1 ?
 1.5.1  什么是复杂度! a; B) R$ K/ k; Y2 [' X. I
 1.5.2  关于运行时间0 e0 {! _$ P% I/ X3 l* k
 1.6  轻松热身/ y; J! v, z+ [4 s
 1.6.1  先从简单题开始
 4 [  B9 Q; y& i0 h" `) P1.6.2  POJ的题目Ants( d" \& u* t, C# G9 |' Z& F0 @
 1.6.3  难度增加的抽签问题
 % U/ g/ {  f2 K- a% K+ s阅读
 . Z; E2 Y6 X: [8 J3 e第2章 初出茅庐——初级篇0 h& k% t8 p. ?  j
 2.1  最基础的“穷竭搜索”
 8 ^3 a% m& Q& p: k% }; \- T2.1.1  递归函数
 8 {, a# E- z& W# F. A4 k2.1.2  栈
 7 E. d  c" [5 n3 ^7 V* s0 v9 D2 e2.1.3  队列6 l" p/ }, v; j
 2.1.4  深度优先搜索. @* N0 n' T! ]) `- l; u
 2.1.5  宽度优先搜索
 4 G$ D! @" d; @0 F2.1.6  特殊状态的枚举
 7 y9 i, y) E, B2.1.7  剪枝- u/ j) m0 f1 l- C' @: e
 2.2  一往直前!贪心法. E: L. Z  V* e
 2.2.1  硬币问题
 / Q- A3 X/ J7 a+ ~. j7 e2.2.2  区间问题
 ( k9 V0 b1 h- R& K5 }6 g2.2.3  字典序最小问题, G1 k& a3 K* g2 ]5 ^; }7 @
 2.2.4  其他例题
 , R' `2 b2 `9 T% ~2.3  记录结果再利用的“动态规划”
 + `8 i) Q  d4 F0 _+ Z) D0 c, U2.3.1  记忆化搜索与动态规划$ J0 t0 ^4 h0 {6 w2 ^. ]
 2.3.2  进一步探讨递推关系
 / ?9 Z: V# F5 T( a+ ?" t0 r; \, j2.3.3  有关计数问题的DP
 / I2 ?( q. q- O5 {+ I& M$ h, r2.4  加工并存储数据的数据结构2 M' E9 [; J) h+ g
 2.4.1  树和二叉树  R2 w. `" p5 b' d6 F, Q9 d# ^5 v
 2.4.2  优先队列和堆
 9 l: A3 n, y& X% G( B& v( o8 n- o2.4.3  二叉搜索树: J$ \: P0 L% s7 i+ |
 2.4.4  并查集, M6 ?% z0 i' U+ l, o" ?8 j( h
 2.5  它们其实都是“图”3 R. T$ o, ?" M9 n1 Y% ~! E
 2.5.1  图是什么
 4 _, c/ R& y0 q$ b% z/ V2.5.2  图的表示3 L$ h$ v  E! J9 E6 n* z: C- a+ q
 2.5.3  图的搜索8 \, Z" K" ^0 f0 Y1 T! `) H
 2.5.4  最短路问题2 N- }& I0 J/ z8 [
 2.5.5  最小生成树
 ! H9 r0 v( z0 B( S* N2.5.6  应用问题
 - s" W( Z! ~) i, h* d. y( U2.6  数学问题的解题窍门) H& V" \3 O* m- W& }
 2.6.1  辗转相除法
 9 U2 j, E, C* s) n' U& H2.6.2  有关素数的基础算法7 ~6 [' Q5 V% t( F$ m. X
 2.6.3  模运算
 ( T! E8 Z: k4 e- Z- \& V2.6.4  快速幂运算
 : Z1 e! P' |! N9 n( s2.7  一起来挑战GCJ的题目(1)  Z8 a$ }2 a* \: f8 X- ~0 A8 m
 2.7.1  Minimum Scalar Product
 ' g+ j- t  {3 j8 N# f0 R2.7.2  Crazy Rows. x1 j  Z, T1 \  n
 2.7.3  Bribe the Prisoners" w$ f9 t1 L, n3 B: `) ]
 2.7.4  Millionaire
 & C- [3 H$ g* A/ u$ x6 J2 ]# D5 V阅读
 7 T8 _. K% y! E; s* b5 i第3章 出类拔萃——中级篇; x; n" o9 u# K3 d$ @6 C
 3.1  不光是查找值!“二分搜索”: m0 Q% y, U: v: s2 [) t% L+ Y
 3.1.1  从有序数组中查找某个值) h* i: r7 _8 @# |( e
 3.1.2  假定一个解并判断是否可行
 3 W0 w8 e& }- n; R$ ?: i* M3.1.3  最大化最小值* u0 E; l9 v0 J1 \
 3.1.4  最大化平均值3 s8 a7 G" T3 p& a7 o, b
 3.2  常用技巧精选(一)' L1 X# D8 \3 s. q
 3.2.1  尺取法1 s; }: D1 U  g. m; B
 3.2.2  反转(开关问题)
 ( R  Q" C% [+ `: D8 i4 j$ m6 z3.2.3  弹性碰撞" }" y8 p4 n0 y. t
 3.2.4  折半枚举(双向搜索). F  u+ W5 }1 i0 [, Y- J1 n: c
 3.2.5  坐标离散化
 : x0 l! U5 F' x" ?4 y8 j5 i3.3  活用各种数据结构8 a+ L& n9 f" z3 E3 H; s' W( F
 3.3.1  线段树/ w5 O* R- f9 R
 3.3.2  Binary Indexed Tree
 ! _" m2 O* S0 O6 D+ |  P- y5 H3.3.3  分桶法和平方分割2 S# w8 X2 E5 ~+ ~. i- B
 3.4  熟练掌握动态规划( N1 f  ^6 o: g8 [  _( ]9 `8 _8 `& R
 3.4.1  状态压缩DP
 7 p. F4 V8 Y1 Y) G4 R& ?+ [& R3.4.2  矩阵的幂: u( X$ X! e% W" H: R; S, h# H
 3.4.3  利用数据结构高效求解2 C) W( e; ~2 n8 g- x
 3.5  借助水流解决问题的网络流
 # s. L2 s+ N/ [8 H+ U* ]3.5.1  最大流
 1 U+ z2 l6 r# g- s! Q3 z3.5.2  最小割
 / i! `$ Y: y" h% v. }3.5.3  二分图匹配9 e9 f6 S. o- Y3 a" Z
 3.5.4  一般图匹配( Y# f9 p# E2 X9 K/ r  h
 3.5.5  匹配、边覆盖、独立集和顶点覆盖
 - l. Q) |* i8 p1 G" s9 C: L3.5.6  最小费用流
 ; \4 y9 F; s% O5 v3.5.7  应用问题
 / k3 i/ j' E7 {9 e3.6  与平面和空间打交道的计算几何
 * _' V- F/ h; Z3.6.1  计算几何基础
 , X  R5 `* g1 J! V7 d) ]1 ?3.6.2  极限情况& I" p: n. |/ n) k* k+ S4 J% q
 3.6.3  平面扫描* z8 }$ T/ M( t% J- |2 V2 W
 3.6.4  凸包
 0 q$ q; _- O2 S; y' [! U8 m8 @; r3.6.5  数值积分
 6 c0 ?# l- F& u1 L! s! E% V  ^& N3.7  一起来挑战GCJ的题目(2)# `7 y( ?" ^( ]4 x4 w
 3.7.1  Numbers
 - ^( \; r' z  W- O6 y3.7.2  No Cheating# Q9 p6 M" }% u( A. N+ t
 3.7.3  Stock Charts) C; {! O; W2 O. X8 Q  U; @' O
 3.7.4  Watering Plants
 ) M$ L/ k4 O7 Z% D$ T, s5 t3.7.5  Number Sets
 - N/ R, o; R5 r( x+ }2 w3.7.6  Wi-fi Towers
 % R! [, g  s0 L. G1 ~第4章 登峰造极——高级篇) Z+ n# k) l8 [3 P) \/ |
 4.1  更加复杂的数学问题$ h. A: X* u! l/ W3 P3 F; G- ?7 c
 4.1.1  矩阵
 1 U# y6 y9 k1 R% r4.1.2  模运算的世界. E7 B5 D9 J4 r  t" }
 4.1.3  计数- @  R. E# v* S
 4.1.4  具有对称性的计数
 ) i5 R3 I7 p' G4.2  找出游戏的必胜策略+ B4 Q: h1 k; u/ t& P
 4.2.1  游戏与必胜策略/ R# W8 @( W6 [4 ~5 a* a
 4.2.2  Nim( r+ H5 Q4 L5 b1 H
 4.2.3  Grundy数% Q* e& b  F4 J0 q' p: M
 4.3  成为图论大师之路. ~  W, {8 \3 G' B! o  \0 Z
 4.3.1  强连通分量分解' _! `1 p6 V8 N% A+ j: h
 4.3.2  2-SAT
 $ s; r8 [' t/ J2 C# l6 G( [. n3 y+ W4.3.3  LCA
 2 U  G% s/ [6 Q9 I/ y. u4.4  常用技巧精选(二)
 & r- Q; R( x  e5 Y; A6 V4.4.1  栈的运用; Z, d$ o1 k8 b) e4 h% {! C' r8 T
 4.4.2  双端队列的运用9 a, e0 ?. x7 d2 q3 U7 Q4 a
 4.4.3  倍增法3 t! e# }+ E6 m) S" c. }. ^, U( b. D
 4.5  开动脑筋智慧搜索# k; B+ f8 `, M+ u5 C
 4.5.1  剪枝
 ) G% q& t& I1 L% V' ~) o4.5.2  A*与IDA*/ V1 u7 e) J, v9 }- O
 4.6  划分、解决、合并:分治法3 s2 U. ?) r  C
 4.6.1  数列上的分治法- q$ ~' r1 o7 l% a' y5 E* T
 4.6.2  树上的分治法
 0 i  H# e- }8 i( f! _' B3 u3 ]" f. o$ D4.6.3  平面上的分治法
 & a$ i9 x4 g, z9 Q4.7  华丽地处理字符串
 : o5 T/ Z) f5 {1 N4.7.1  字符串上的动态规划算法1 p8 Q% b! y$ I# n3 G- P. `8 W! _
 4.7.2  字符串匹配8 V  K6 I8 b# P% P8 G! F* _" y0 H
 4.7.3  后缀数组
 : I6 v1 n. i/ W$ F* s4.8  一起来挑战GCJ的题目(3)2 O( W; f# }+ ?8 l! F5 W" M: V
 4.8.1  Mine Layer/ v" X2 Q  J' E+ X. \
 4.8.2  Year of More Code Jam6 ~& |6 C7 `% j+ Z2 g
 4.8.3  Football Team2 Q( u$ ]) X. _& r9 e! z
 4.8.4  Endless Knight
 ; s3 c1 `- ]9 {4.8.5  The Year of Code Jam4 }8 O/ y' P' V* E5 V6 Z, `! ^
 J$ S) D2 ?- X
 稍后会上传迷你书!!!
 | 
 |