精通 C 语言算法

作者:John Kacur
  • 作者:Kyle Loudon

  • 出版社:O'Reilly & Associates

  • 电子邮件:info@ora.com

  • 价格:34.95 美元

  • ISBN:1-56592-453-3

  • 评论员:John Kacur

虽然您可能在阅读本书后没有“精通”算法,但这仍然是一本写得很好的书,我毫无保留地推荐它。 在前言中,作者解释了为什么他的“方法与通常在数据结构和算法书籍中想到的方法不同。”他正确地解释说,许多关于数据结构和算法的书籍具有“学术气息,而诸如实现和应用程序之类的真实细节则留给其他地方解决。” 确实,这本书的优势在于,我们看到的不是代码片段,而是作为有用实现的完整程序。

本书分为三个部分。 第一部分,预备知识,是最短的。 作者并没有尝试教读者 C 语言,而是对一些棘手的主题进行了有用的回顾,例如指针的使用(通用指针,函数指针强制类型转换等)。 他轻轻地触及了递归,并提醒我们什么是尾递归以及为什么它是有效的。 此外,还概述了用于分析算法的 O 表示法。 有些人可能会抱怨这本书在这里没有进行足够的深入探讨,但是如果您将其视为大学课程中更理论书籍的配套教材,那么这就是您继续进行实现所需的恰到好处的信息量。

第二部分,数据结构,是这本书开始发光的地方。 有关于链表,堆栈和队列,集合,哈希表,树,堆和优先级队列以及图的章节。 每个章节都进一步分解。 例如,关于链表的章节讨论了单链表,双链表和循环链表。 链表的实现是我们第一次看到 Loudon 良好软件工程实践的价值的地方。 公共接口记录在单独的头文件中,私有函数是静态的,因此它们保留在文件范围内。

由于编程风格往往是个人的,因此一些读者可能会对 Loudon 的编码约定提出异议。 但是,由于他选择了一种风格并始终如一地应用它,因此他的代码非常干净且易于阅读。 例如,所有结构都具有 typedef 和名称,其中结构的名称是 typedef 中的名称,后跟下划线。 没有走捷径,因此与许多通过使用 int 数据类型来演示链表原理的书籍不同,Loudon 使用指向 void 的指针进行通用实现,该实现可以使用任何数据类型。

第三部分称为算法。 这里的章节包括排序和搜索,数值方法,数据压缩,数据加密,图算法和几何算法。 虽然这些章节不一定是全面的(一本单卷本书怎么可能全面呢?),但 Loudon 提出了一些有趣的主题,这些主题没有传统上在算法书籍中介绍过,例如数据压缩和数据加密。 鉴于最近与 GIF 图形有关的版权争议,阅读有关 Lempel-Ziv 压缩的内容特别有趣。

结论

如果您是初级程序员,则应首先阅读诸如 Kernighan 和 Ritchie 的 C 编程语言之类的书籍。 如果您是数据结构和算法的新手,这是一本很棒的书,其中包含要研究的实际实现。 我会推荐它作为通常在大学课程中分配的更传统的学术书籍的配套读物。 如果您是中级到专家级程序员,您可能仍然会喜欢这本书,因为它是一本实用的参考书,不会让您陷入理论细节,但可以让您快速启动并运行程序。

John Kacur (jkacur@acm.org) 拥有美术学士学位和计算机科学学士学位。 他最近搬到加拿大多伦多,在 IBM 接受了一份工作。

加载 Disqus 评论