国内计算机科学教科书的一些弊病
翻了翻数据结构的教科书,排序 这一章的堆排序看得我非常难受,尤其是其从一个无序数组构造堆的过程。书上的算法是这样的:把这个数组看作一棵完全二叉树,然后从下到上,从右到左地把所有的非叶节点都构造成一个堆。这样往上走的过程中可以保证每个非叶节点的左右孩子都是成型了的堆,直接比较交换即可。这个算法完全没问题,但是我认为出现在数据结构的书上很不合适,尤其是出现在这么靠后的章节。原因无他——舍近求远,舍易求难与计算机思想恰是完全相反的。
其实这个问题哪有这么复杂呢?二叉树的后序遍历就直接解决了:首先递归地把根节点的左右子树构造成一个堆,然后再和根节点比较交换即可。算法干干净净,没有乱七八糟的考虑和计算,这才是计算机该有的感觉。而纵观整本教科书,知识点间的内禀联系几乎没有什么提及,总是每章内容各自为政,也就导致学生在打基础的过程中云里雾里,完全不知道自己在做什么,最终需要绕很远的路才能回到正轨。
我在本科刚学习数据结构时非常讨厌教科书,因为感觉死板,没有 ACM 中那些精妙好玩的算法;后来随着写代码越来越多,感觉这几本教科书都是有水平的,其中提到的知识点一直都是计算机发展几十年来的底层架构;现在再看看教科书,感觉有些地方如果能换个讲法,力求知识体系网络的建设,而不是追求一招一式的酣畅,或许会更好吧。
国内计算机科学教科书的一些弊病