《数据结构与算法 PHP 语言描述》是一本由展小白编写,旨在通过 PHP 语言来描述、学习数据结构与算法的自由图书。如果你没有接受过正规的计算机科学教育,想要学习数据结构与算法,那这本书就是为你准备的。

本博客后续将以连载的方式为读者呈现这本书。

谈到对数据结构与算法的描述,大多数程序员能够想到的往往是 C/C++/Java 等强类型语言对其进行的描述。但随着行业的不断发展,PHP 等弱类型语言对包括数据结构(如链表、栈、队列、图等),排序和查找算法也有着强烈的需求。本书讨论在使用 PHP 进行服务器端编程时,如何实现这些数据结构与算法。

为什么要学习数据结构与算法

如果你是科班出身,接受过正规的计算机科学教育,你应该清楚数据结构与算法的重要性。如果你不是,那么请耐心读完本节。

计算机博士 Nicklaus Wirth 提出过一个著名的公式,“算法 + 数据结构 = 程序”。这个公式概述了计算机编程的精要,任何一个有些规模的程序都需要某种类型的数据结构来保存程序中用到的数据,还需要一个或多个算法将数据从输入转换为输出。

对于非科班出身的程序员,最熟悉的数据结构应该就是数组。在处理一些问题时,数组是很好的选择。但对于更加复杂的问题,数组可能就显得力不从心了。对于大多数有经验的程序员来说,如果想出了一个合适的数据结构,那么再去设计解决问题的算法就变得简单起来。

二叉查找树(BST)就是一个这样的例子。设计二叉查找树的目的是为了方便查找一组数据中的最小值和最大值。由这个数据结构也就引申出了一个查找算法,该算法比目前很多查找算法效率都高。如果你是一个不熟悉二叉查找树的程序员,可能会使用一个更简单的数据结构,但效率上就会打折扣。

解决同一个问题,往往有多种算法可以使用。对于经验丰富、高效的程序员来说,能够清楚的知道哪种算法更高效。比如,现在至少有六七种排序算法,如果知道快速排序比选择排序效率更高,那么就会让排序过程变得高效。又比如,实现一个线性查找的算法很简单,但是如果知道有时二分查找可能比线性查找快两倍以上,那你就会写出一个更好的程序。

学习数据结构和算法,不光可以知道哪种数据结构和算法更高效,还会知道如何选择最适合解决手头问题的数据结构和算法。写程序时,往往需要权衡,知道了本书涵盖的数据结构和算法的优缺点,在解决具体的编程问题时就更能做出正确的选择。

献词

本书献给 创造互联网的开拓者们。得益于这些先驱们对互联网上这一分享知识的土壤与环境的设想,本书才得以存在,并对他们深表感谢。

本书需要来自它的读者的帮助,例如由你来指出书中任何部分还不够好,难以理解或整个就是错的。请写信给作者