对书稿的不定期更新……

书稿算是完成了第一版的定稿了,已经转成PDF供有需要的朋友免费下载使用,还请多多提出意见,以便进一步完善。以下是底稿更新的记录,适当的时候再放出第二版的定稿。

2021-06-08
(1)V2021-01-11:新增了第0章“准备”,介绍了具有较大影响力的若干程序编程竞赛以及 UVa OJ 的使用方法。
(2)V2021-06-01:强连通分支算法中的Tarjan算法实现,代码9.4.8.2.cpp的最后一行代码少了句末分号;
(3)V2021-06-01:第128页KMP算法中,“若令$fail[k]=k$',则有$p_k'=p_j$”,应为:“令$fail[k]=k'$,若有$p_k'=p_j$”。
(4)V2021-06-01:第450页强连通分支Tarjan算法。“可以证明,在$low[u]$小于$dfn[u]$的结点中,一定有且只一个结点其$low[u]$等于$dfn[u]$,这个结点就是某个强连通分支的根。” => “对于结点$u$,当其所有的子树结点均已访问完毕时,如果发现$low[u]$等于dfn[n],可以证明,从结点u在栈中的位置直到栈顶的任意结点$v$,均有$low[v]$小于等于$dfn[n]$,而且在这些结点中,一定有且只一个结点其$low[v]$等于$dfn[v]$,这个结点就是某个强连通分支的根,也就是结点$u$——该性质即为前述所提到的“栈不变量”性质。”
(5)V2021-06-01:第454页强连通分支Tarjan算法。(a)“则不予处理,因为$u$和$v$之间的边并不是圈的一部分,所以不应对$u$的$low$值产生影响。” => “则不予处理。因为$u$和$v$之间的边并不是有向圈的一部分,所以不应对$u$的$low$值产生影响。”(b)“则表明$u$和$v$之间的边是圈的一部分” => “则表明$u$和$v$之间的边是有向圈的一部分”。

2021-05-06

(1)在“图遍历”一章新增了”树的重心“一节。

(2)修正了若干错别字。

2021-04-01

(1)修改了Dinic算法的实现示例代码,使得代码的适用范围更广。

2021-02-24

(1)网友“WorrywartsL”通过邮件指出:Dijkstra工作图(p.497页)中图(c)中通过a点更新b点到源点的距离应该是15,而不是12。已予以更正。在此表示感谢!

2021-02-20

(1)网友“WorrywartsL”通过邮件指出:字符串-KMP算法一节中,发现 图3-6下方注释:"p1p2p3 = p3p4"不匹配,应该是"p1p2 = p3p4"。已予以更正。在此表示感谢!

2020-06-26
(1)杨明通过邮件告知P105存在一个小错误:常用的语法解析方法有自顶向下解析(top-down paring)、自底向上解析(bottom-up parsing)等”,这句话里parsing解析这个单词少拼了一个s。在此表示感谢!

2020-06-25
(1)对名词索引的若干问题进行了修正。
(2)在第10章“图算法”中增加了一个小节,介绍了“第K短路径问题”的求解。
(3)拟对全书的正文进行了一遍review,修正了一些叙述上的小错误或者不恰当的地方。在出版之前,只对正文部分做内容上的修正,不再增加新的章节。
(4)对最近公共祖先、强连通分支所在小节进行了修正。
(5)第421页,强连通分支Tarjan算法的伪代码中,“low[u] = min(low[u], dfn[u])”应为“low[u] = min(low[u], dfn[v])”。
(6)为第10章“图算法”中的Dijkstra算法增加了工作示例配图。
(7)为第14章“计算几何”中的“14.5.1 Graham扫描法”增加了工作示例配图。
(8)为第14章“计算几何”中的“14.5.2 Jarvis步进法”增加了工作示例配图。
(9)为第14章“计算几何”中的“14.5.3 Andrew合并法”增加了工作示例配图。
(10)为第14章“计算几何”中的“半平面交”的排序增量算法增加了示意图,并对代码增加了注释。
(11)对第14章“三维空间几何”的“点、线、面”一节做了较多的修改,修正了叙述上的错误,并将其按点、线、面分开叙述,并增加了示意图和相应的代码逻辑叙述。
(12)为10029 Edit Step Ladders,10051 Tower of Cubes增加了解题注释。

2020-05-18:
(1)对二分搜索的应用增加了一个技巧注释,即二分搜索的值为整数时,为了避免从middle推导最终正确的值,使用一个额外的变量r来记录解,这样不容易出错。
(2)第13章“几何”第13.1节“点”,增加了强化练习:1595 Symmetry。
(3)在第10章“图算法”中,Ford-Fulkerson方法的参考实现代码有一处小错误:flags[source].status = flag{UNCHECKED, -1, INF}; 应为:flags[source] = flag{UNCHECKED, -1, INF};
(4)第11.11.5小节——“最优策略选择”。增加了扩展练习:1205 Color a Tree。
(5)第11.9.4小节——“单调队列优化”。叙述存在错误,做了修改。
(6)在第2章“数据结构”增加了一个小节:2.11.6——“根号分块”,介绍了分块查询技巧,增加了例题:12003 Array Transformer,扩展练习:11990 Dynamic Inversion。
(7)第7.2.1小节——“最大公约数”,增加了扩展练习:1642 Magical GCD。
(8)在第13章“几何”增加了一个小节:13.6.5——“最小圆覆盖”,介绍了使用随机增量法求最小圆覆盖的方法,附有强化练习:10005 Packing Polygons。
(9)第11页:“ios::boolalpha 输出布尔值时,使用true表示1,flase表示0。”其中的“flase”应为“false”(洛谷用户“卞宇轩”发现并反馈)。
(10)将第14章的“三分搜索”调整了位置,将其与第4章“排序与查找”的“二分查找”并列,作为第4.8.5小节予以介绍。
(11)对“10.3.5 次最优最小生成树”进行了较多的修改,以使得逻辑和叙述更为完善。

2020-04-10:
(1)完成了示例UVa 10559 Blocks题目的翻译,分析,配图的制作。
(2)增加了“树形动态规划”一般递推关系式,将“树形动态规划”所介绍的三种类型加了小标题,使得书的结构更为清晰。
(3)修改了注释中的若干错别字,调整了某些题目解题注释的叙述。
(4)在“四边形不等式优化”中增加了对经典的石子合并问题使用该优化技巧的分析。
(5)在“数论”一章增加了一个小节:离散对数,介绍了使用小步大步(Baby-Step and Giant-Step)算法求解离散对数的方法,增加了扩展练习11916 Emoogle Grid。
(6)为10003 Cutting Sticks增加了解题注释。
(7)第183页:【计数减的次数即为该位的上】修改为【计数“减的次数”即为该位的商】。
(8)第272页:以注释的形式给出了扩展蒙提霍尔问题中两个提问的答案。
(9)增加了702 The Vindictive Coach作为“动态规划的优化”——“状态优化”一节的例题。
(10)对“数论”一章中“模的逆元”小节进行了修改。

2020-04-01:
(1)增加了一种石子合并问题的变形(源自于洛谷用户OSOL的提问)。

2020-03-29:
(1)对“1.3.5 缓冲区与输入输出同步”中的“tie与sync_with_stdio”的部分叙述进行了修改润色。

2020-03-28:
(1)区间型动态规划的概述有些莫名奇妙,对其进行了修改。加入了一个小节,对“石子合并”类的区间型动态规划及其变形和扩展进行了分析,扩展了对环形区间动态规划的分析。

  • 19
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值