《深入浅出程序设计竞赛·基础篇》评测

StudyingFather

2020-01-11 23:18:58

Personal

(本文可同时在 [我的博客](https://studyingfather.com/archives/2730) 以及 [知乎](https://zhuanlan.zhihu.com/p/102239762) 上查看) 最近笔者通过某些渠道搞到了《深入浅出程序设计竞赛·基础篇》(以下简称”深入浅出“)的试读版本。趁着期末考试结束过来写篇评测。 ## 总体评价 总的来说,这本书基本上实现了其在书名中所写的**深入浅出**的目标。 每章页首的思维导图清晰地告诉了读者本章的主要内容,并且覆盖了绝大多数入门选手需要掌握的知识。生动有趣的语言也便于读者理解相关内容。 例题的选取也比较合适,对浮点误差,未定义行为等常见错误都有所提及。 当然也有一些美中不足的地方:比如笔误较多(如果提前叫两个人审稿的话这样的错误可能会少不少),有些内容的编排顺序并不太恰当等问题。这些内容都将在下文详细说明。 ## 个人认为还需改进的地方 试读版中出现的多数笔误在 [勘误表](https://www.luogu.com.cn/blog/kkksc03/post-shen-ru-qian-chu-kan-wu) 中已有提及。这里主要说一些内容编排方面还需改进的地方。 考虑到本书面向初学者,对一些内容简略化,模糊化处理是可以理解的,也是比较推荐的一种做法。但这些内容如果在文中多次出现的话,还是应该注意一下表述的连贯性与一致性。 举个栗子,`memset` 函数的用法在 P79,P180,P194,P310 中均有所提及。 在 P310 页中详细叙述了原理,却得出了 `memset` 中间的参数只能是 0 或者 -1 这样不太恰当的结论。而在 P194 中,提到了将 `memset` 中间的参数替换为 127,128 这些其他数字的用法,并详细说明了这样初始化的结果,这两种表述的意思截然不同,可能会引发初学者的疑惑。 另外,在 P62 页中提到了变量重名的问题,但却没有详细叙述变量重名的后果,只是以”两个变量互不干涉“的措辞一笔带过,这个表述与 P116 中的变量作用域也有矛盾。 出现这样表述不一致性的问题还是应该尽量避免,对于当前无法解释清楚的内容,可以通过脚注的方式将原理叙述链接到其他页面,以确保表述的连贯性。 当然,对一些内容简略化处理并不意味着所有概念都一笔带过,有些比较重要或者可能引发误解的内容还是应该尽量叙述清楚。 P121 中提到了移位运算符的优先级低,代码中出现了 `1<<n-1` 这样的语句,却没有具体地解释优先级的关系是怎样的(读者可能会把这个语句理解为 `1<<(n-1)` 或是 `(1<<n)-1`,当然后面那种理解是错误的)。 (优先级的内容其实在 P39 中提到了,但考虑到这两个页面相隔较为遥远,且当时读者可能还不知道移位运算符,可以在 P121 中用脚注指向运算优先级的内容,加深读者理解) 部分章节的顺序也可能需要进行调整,一些比较常用的内容,应该放到比较靠前的位置,从而尽量避免前面的内容要用到后面的知识的尴尬局面。 第十九章”进制与位运算“虽然归属于数学部分,但考虑到 C++ 语言特性等原因,放在语言基础部分可能更加合适。这样也避免了第十章”暴力枚举“中的”子集枚举“内容要参见后面内容的情况。 另外,关于满二叉树的概念,又 踩 雷 了( (如果还没搞清楚那几种二叉树的区别,请参考 [OI-wiki](https://oi-wiki.org/graph/tree-basic/#_4) 的叙述) ## 与同类书籍的对比 与深入浅出对标的书,笔者手头有两本,一本是《信息学奥赛一本通》(以下简称”一本通“,注意不是提高篇,笔者手头拿的是较为古董的第三版),另一本是《算法竞赛入门经典(第 2 版)》(以下简称”紫书“,当然紫书的内容相比基础篇更丰富一些)。 首先一本通仅凭它不等宽的代码字体,糟糕的排版,就已经输在起跑线上了。而且部分内容有抄袭紫书等现有资料之嫌。与之相比,深入浅出无论在排版质量,内容的广度与深度上,都完胜一本通。 而紫书和深入浅出相比,则各有可圈可点之处。紫书的提示和脚注较多,方便读者学习与理解,并在每章末附上了例题和习题表格,方便读者复习已经学习的知识。深入浅出则通过每章开头的思维导图,将该章的所有知识点串连了起来。当然深入浅出现在的小错误比较多,这点稍微影响了对深入浅出的印象分。 ## 总结 目前看来《深入浅出·基础篇》还是一本值得推荐的入门教材。 同时继续催更洛谷赶快把剩下几本书写完(雾) 另外,本文部分内容参考了 [@Planet6174](https://www.zhihu.com/people/223ef39d620174ae117dffb67fe0e9e8) 整理的 [《深入浅出》编排问题合集](https://www.luogu.com.cn/discuss/show/179906),在此表示感谢。