介绍 数据结构与算法
数据结构 是关于如何以不同的结构存储数据。
算法 是关于如何解决不同的问题,通常是通过搜索和操作数据结构来实现。
有关数据结构和算法 (DSA) 的理论有助于我们使用大量数据来有效地解决问题。
什么是数据结构?
数据结构是一种存储数据的方式。
我们根据所拥有的数据以及要对数据执行的操作,以不同的方式构建数据结构。
首先,让我们考虑一个没有计算机的例子,只是为了理解这个概念。
如果我们想要存储与我们相关的人员信息,我们可以使用家谱作为数据结构。我们选择家谱作为数据结构,因为我们拥有与我们相关的人员信息以及他们之间的关系,并且我们希望获得概述,以便我们可以轻松地找到特定家庭成员,例如跨越几个世代。
有了这样的家谱数据结构,我们可以直观地看到,例如,我的母亲的母亲是谁——她是“Emma”,对吧?但是,如果没有这个数据结构提供的从子女到父母的链接,就很难确定个人之间的关系。
数据结构使我们能够高效地管理大量数据,用于大型数据库和互联网索引服务等用途。
数据结构是创建快速高效算法的必要成分。它们有助于管理和组织数据,减少复杂性并提高效率。
在计算机科学中,有两种不同类型的数据结构。
基本数据结构 是由编程语言提供的基本数据结构,用于表示单个值,例如整数、浮点数、字符和布尔值。
抽象数据结构 是使用基本数据类型构建的更高级的数据结构,提供了更复杂和专门的操作。一些常见的抽象数据结构示例包括数组、链表、栈、队列、树和图。
什么是算法?
算法是一组逐步指令,用于解决给定问题或实现特定目标。
写在纸上的烹饪食谱是一个算法的例子,目标是制作特定的晚餐。制作特定晚餐所需的步骤被准确地描述了。
当我们在计算机科学中谈论算法时,逐步指令是用编程语言编写的,并且算法使用数据结构,而不是食物成分。
算法是计算机编程的基础,因为它们提供了执行任务的逐步指令。高效的算法可以帮助我们找到我们正在寻找的解决方案,并将缓慢的程序转变为更快的程序。
通过学习算法,开发人员可以编写更好的程序。
算法示例
- 在 GPS 导航系统中查找最快的路线
- 导航飞机或汽车(巡航控制)
- 查找用户搜索的内容(搜索引擎)
- 排序,例如按评分对电影进行排序
我们将在本教程中查看的算法旨在解决特定问题,并且通常被设计为在特定数据结构上运行。例如,“冒泡排序”算法旨在对值进行排序,并且被设计为在数组上运行。
数据结构与算法
数据结构和算法 (DSA) 密不可分。数据结构本身并没有什么用,除非您可以使用算法高效地搜索或操作它,而本教程中的算法如果没有数据结构来处理,也就不那么有用。
DSA 是关于找到高效的方式来存储和检索数据、执行数据操作以及解决特定问题。
通过理解 DSA,您可以
- 决定在给定情况下哪种数据结构或算法最合适。
- 制作运行速度更快或使用更少内存的程序。
- 理解如何处理复杂问题并以系统的方式解决问题。
数据结构和算法在哪些地方需要?
数据结构和算法 (DSA) 几乎用于每个软件系统,从操作系统到 Web 应用程序
- 用于管理大量数据,例如社交网络或搜索引擎。
- 用于安排任务,以决定计算机应该首先执行哪个任务。
- 用于规划路线,例如在 GPS 系统中找到从 A 到 B 的最短路径。
- 用于优化流程,例如安排任务以便它们能够尽快完成。
- 用于解决复杂问题:从找到装载卡车的最佳方式到让计算机从数据中“学习”。
DSA 几乎是软件世界中各个部分的基础
- 操作系统
- 数据库系统
- Web 应用程序
- 机器学习
- 电子游戏
- 加密系统
- 数据分析
- 搜索引擎
理论和术语
在本教程中,我们将需要新的理论概念和术语(新词),以便我们更好地理解我们将要处理的数据结构和算法。
这些新词和概念将在需要时进行介绍和解释,但这里列出了一些关键术语,只是为了概述即将到来的内容
术语 | 描述 |
---|---|
算法 | 一组逐步指令,用于解决特定问题。 |
数据结构 | 一种组织数据的方式,以便可以有效地使用它。常见的数据结构包括数组、链表和二叉树。 |
时间复杂度 | 衡量算法运行所需时间的指标,具体取决于算法处理的数据量。 |
空间复杂度 | 衡量算法使用内存量的指标,具体取决于算法处理的数据量。 |
大 O 符号 | 一种数学符号,用于描述函数在参数趋于特定值或无穷大时的极限行为。在本教程中,它用于描述算法的时间复杂度。 |
递归 | 一种编程技术,其中一个函数调用自身。 |
分治 | 一种通过将复杂问题分解成更小、更易于管理的子问题、解决子问题并将解决方案组合起来来解决复杂问题的方法。递归通常在算法中使用这种方法时使用。 |
暴力破解 | 算法可以通过简单地尝试所有可能的解决方案,然后选择最佳解决方案来工作的一种简单直接的方法。 |
从哪里开始?
在本教程中,您将首先了解具有匹配算法的数据结构,然后再继续学习下一个数据结构。
在本教程中,概念会变得更加复杂,因此建议从头开始一步一步地学习 DSA。
如前一页所述,在进行本教程之前,您应该至少熟悉一种最常用的编程语言,例如 JavaScript、C 或 Python。
在下一页中,我们将了解两种不同的算法,它们仅使用基本数据结构(两个整数变量)打印出前 100 个斐波那契数。一种算法使用循环,另一种算法使用称为递归的方法。
单击“下一页”按钮继续。