菜单
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

数据结构和算法 (DSA) 简介

数据结构是关于如何以不同结构存储数据。

算法是关于如何解决不同问题,通常是通过搜索和操作数据结构。

关于数据结构和算法 (DSA) 的理论帮助我们有效地利用大量数据来解决问题。

什么是数据结构?

数据结构是存储数据的一种方式。

我们根据拥有什么数据以及想要用它做什么,以不同的方式组织数据。

Family Tree
家谱

首先,让我们考虑一个不考虑计算机的例子,只是为了理解这个概念。

如果我们想存储关于我们亲属的数据,我们会使用家谱作为数据结构。我们选择家谱作为数据结构,因为我们拥有关于我们亲属的信息以及他们如何相互关联,并且我们想要一个概览,以便我们可以轻松找到某个家庭成员,比如好几代前的祖先。

在你面前清晰地展示了这样一个家谱数据结构,很容易就能看出,例如,我母亲的母亲是谁——就是“艾玛”,对吗?但如果没有这个数据结构提供的从子女到父母的链接,就很难确定这些个体是如何关联的。

数据结构使我们能够有效地管理大量数据,用于大型数据库和互联网索引服务等用途。

数据结构是创建快速强大算法的必备要素。它们有助于管理和组织数据,降低复杂性,并提高效率。

在计算机科学中,有两种不同的数据结构。

基本数据结构是编程语言提供的用于表示单个值的基本数据结构,例如整数、浮点数、字符和布尔值。

抽象数据结构是使用基本数据类型构建的更高级的数据结构,并提供更复杂和专业的运算。一些常见的抽象数据结构示例包括数组、链表、栈、队列、树和图。


什么是算法?

算法是用于解决给定问题或实现特定目标的循序渐进的指令集。

Pommes Frites Recipe
薯条食谱

写在纸上的烹饪食谱就是算法的一个例子,目标是制作某种晚餐。制作特定晚餐所需的步骤被精确地描述了。

当我们谈论计算机科学中的算法时,这些循序渐进的指令是用编程语言编写的,并且算法使用的是数据结构,而不是食物配料。

算法是计算机编程的基础,因为它们提供了执行任务的循序渐进的指令。一个高效的算法可以帮助我们找到我们正在寻找的解决方案,并将一个慢速程序转换成一个更快速的程序。

通过学习算法,开发人员可以编写出更好的程序。

算法示例

  • 查找 GPS 导航系统中速度最快的路线
  • 导航飞机或汽车(巡航控制)
  • 查找用户搜索的内容(搜索引擎)
  • 排序,例如按评分对电影进行排序

本教程中我们将要介绍的算法是为了解决特定问题而设计的,并且经常用于处理特定的数据结构。例如,“冒泡排序”算法是为了对值进行排序而设计的,并且用于处理数组。


数据结构与算法结合

数据结构和算法 (DSA) 是相辅相成的。如果不能有效地使用算法来搜索或操作数据结构,那么数据结构就没有多大价值;而本教程中的算法如果没有数据结构来操作,价值也不大。

DSA 是关于寻找高效的方式来存储和检索数据,执行数据操作,并解决特定问题。

通过理解 DSA,你可以

  • 决定哪种数据结构或算法最适合给定情况。
  • 编写运行更快或内存占用更少的程序。
  • 理解如何处理复杂问题并以系统的方式解决它们。

数据结构和算法在哪里需要?

数据结构和算法 (DSA) 几乎被用于所有软件系统,从操作系统到 Web 应用程序。

  • 用于管理大量数据,例如在社交网络或搜索引擎中。
  • 用于调度任务,以决定计算机应该首先执行哪个任务。
  • 用于规划路线,例如在 GPS 系统中查找从 A 到 B 的最短路径。
  • 用于优化流程,例如安排任务以便它们能够尽快完成。
  • 用于解决复杂问题:从找到打包卡车的最佳方法到让计算机从数据中“学习”。

DSA 在软件世界的几乎所有领域都至关重要。

  • 操作系统
  • 数据库系统
  • Web 应用程序
  • 机器学习
  • 视频游戏
  • 加密系统
  • 数据分析
  • 搜索引擎

理论和术语

在本教程的后续内容中,我们将需要新的理论概念和术语(新词),以便更好地理解我们将要处理的数据结构和算法。

这些新词和概念将在需要时得到适当的介绍和解释,但这里有一些关键术语的列表,只是为了概览即将到来的内容。

术语 描述
算法 一组循序渐进的指令,用于解决特定问题。
数据结构 一种组织数据以便高效使用的方法。常见的数据结构包括数组、链表和二叉树。
时间复杂度 衡量算法运行所需时间的度量,取决于算法正在处理的数据量。
空间复杂度 衡量算法所使用的内存量的度量,取决于算法正在处理的数据量。
大 O 符号 一种数学表示法,用于描述当自变量趋近于特定值或无穷大时函数的极限行为。在本教程中用于描述算法的时间复杂度。
递归 一种函数调用自身的编程技术。
分而治之 一种通过将复杂问题分解为更小、更易于管理子问题,然后解决这些子问题并合并解决方案来解决复杂问题的方法。在使用此方法来编写算法时,通常会使用递归。
蛮力 一种简单直接的算法工作方式,通过尝试所有可能的解决方案,然后选择最佳解决方案。

从哪里开始?

在本教程中,你将首先学习一种数据结构及其匹配的算法,然后再学习下一个数据结构。

在本教程的后面,概念会变得更复杂,因此最好从一开始就按步骤进行教程来学习 DSA。

正如在前一页提到的,在学习本教程之前,你应该至少熟悉一种最常见的编程语言,例如 JavaScriptCPython

在下一页,我们将介绍两种不同的算法,它们使用仅有的两个整数变量来打印出前 100 个斐波那契数。一种算法使用循环,另一种算法使用一种称为递归的方法。

点击“下一页”按钮继续。



×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持