数据结构和算法的重要性

如果我们考虑一下现实生活中使用电脑的情况,我们也会使用不同的方式来排列我们的物品和数据,以便在需要时有效地使用它们或方便地找到它们。如果我们随意输入手机通讯录的顺序呢?我们能轻易找到联系人吗?由于联系人没有按特定顺序排列,我们最终可能会搜索通讯录中的每一个联系人。请看下面两张图片:

image 2023 11 06 15 06 44 415

其中一个显示书籍散乱,由于书籍没有整理好,寻找某本书需要花费时间。而另一张图片则显示书籍被整理成了一摞。第二张图片不仅表明我们巧妙地利用了空间,而且查找书籍也变得更加容易。

让我们再看一个例子。我们要去购买一场重要足球比赛的门票。有成千上万的人在等待售票点开门。门票将按照先到先得的原则分发。如果我们考虑以下两张图片,哪一张是处理如此众多的人群的最佳方式?

image 2023 11 06 15 07 50 183

左图清楚地表明,没有适当的顺序,也无法知道谁先拿到票。但是,如果我们知道人们都在有条不紊地排队等候,那么处理人群就会更加容易,我们就会把票交给先到的人。这是一种常见的现象,被称为队列,在编程领域被大量使用。编程术语并非来自外部世界。事实上,大多数数据结构的灵感都来自现实生活,它们在大多数时候都使用相同的术语。无论我们是在准备任务列表、联系人列表、书堆、饮食图表,还是在准备家谱或组织层次结构,我们基本上都在使用不同的排列技术,这些技术在计算机世界中被称为数据结构。

到目前为止,我们已经谈了一些数据结构,但算法呢?难道我们在日常生活中不使用算法吗?当然用。每当我们从旧电话簿中搜索联系人时,我们肯定不会从头开始搜索。如果我们要搜索汤姆,我们不会搜索写着 A、B 或 C 的页面。或者,如果我们需要从电话簿中查找医生,我们肯定不会在食品部分进行搜索。如果我们把电话簿或电话簿视为数据结构,那么我们搜索特定信息的方式就称为算法。数据结构帮助我们有效地使用数据,而算法则帮助我们有效地对这些数据执行不同的操作。

例如,如果我们的电话簿中有 100,000 个条目,从头开始搜索某个条目可能要花费很长时间。但是,如果我们知道医生的名单是从第 200 页到第 220 页,我们就可以只搜索这些页面,通过搜索一小部分而不是整个目录来节省时间:

image 2023 11 06 15 10 02 226

我们还可以考虑另一种搜索医生的方法。虽然上一段采用的是搜索目录中某一特定部分的方法,但我们甚至可以在目录中按字母顺序搜索,就像我们在字典中搜索单词一样。这甚至可以减少我们搜索的时间和条目。寻找问题的解决方案可以有很多种不同的方法,每种方法都可以命名为算法。通过前面的讨论,我们可以说,对于一个特定的问题或任务,可以有多种方法或算法来执行。

那么,我们应该考虑使用哪一种呢?我们很快就会讨论这个问题。在此之前,我们将重点讨论 PHP 数据类型和抽象数据类型(ADT)。为了掌握数据结构的概念,我们必须对 PHP 数据类型和 ADT 有深刻的理解。