从远古的汇编语言到现代编程语言,计算机编程已经变得更加强大、高效和先进。然而,计算机编程中的数据结构和算法的核心概念和使用并没有改变。从一开始,DSA就一直是计算机编程的核心。

备注: 下文统一使用DSA表示数据结构和算法。

你可能听说过DSA主要在计算机科学领域使用。然而,DSA的使用并不限于计算机领域。我们可以发现DSA的概念在日常生活中也被使用。在本文,我们将讨论日常生活中使用的DSA常见场景。但在此之前,让我们先了解一下数据结构和算法的基本知识。

什么是数据结构和算法(DSA)?

数据结构和算法是计算机科学的一个分支,涉及到机器的效率和优化计算机程序。术语数据结构指的是数据的存储和组织,而算法指的是解决问题的步骤。通过结合 "数据结构"和 “算法”,我们在软件工程中优化代码的占用空间及执行效率。

软件开发中的DSA

数据结构和算法(DSA)被应用于软件开发的所有学科。DSA是软件开发过程的组成部分。它并不局限于单一的编程语言。尽管编程语言随着时间的推移而发展或沉寂,但DSA被纳入所有这些语言中。

软件开发的效率取决于选择一个合适的数据结构和算法。

可能会有这样的情况,即为你提供了最有效的数据结构来与一个强大的算法合作。但是,如果两者不能相互兼容,代码就不会产生预期的结果。因此,为一个算法选择一个合适的数据结构是软件开发的一个重要部分。

软件开发中使用DSA的另一个关键方面是时间和空间限制。这些约束条件检查算法的时间和空间的可用性。一个优化的算法根据资源的可用性来解决这两个约束。如果内存对硬件来说不是一个问题,那么DSA更注重优化算法的运行时间。同样地,如果硬件有这两个约束,那么DSA必须解决这两个约束。你可以在渐近分析上了解更多关于这些复杂性的表述。

DSA与日常生活如何联系?

让我们深入了解一些使用DSA的例子。

数据结构

堆栈数据结构反转字符串

一个栈是一个线性数据结构,"线性"意味着元素是一个接一个地放置。一个元素只有在访问了前面的元素之后才能被访问。

我们可以把想象成一堆放在彼此上面的盘子。在最上面的盘子下面的每个盘子都不能直接访问,直到上面的盘子被移除。盘子只能从顶部添加和移除。

每个盘子都是一个元素,堆在一起组成一个栈。在编程方面,盘子是一个变量,而栈是一个数据结构。

为什么需要一个栈?

你可能会想,为什么一个程序员需要学习如何把盘子放在一个栈上,并把盘子从栈里拿出来。让我们来找出答案。假设你需要将一个字符串反转顺序,你会怎么做呢?

开始从字符串中选择一个字符,然后一个一个地复制到新的位置,过程如下:




现在,让我们把这些字符从顶部复制到原来的位置:




很好,我们已经成功地使用栈(新内存)的属性反转了一个字符串。插入和删除只允许从顶部开始。这就是栈在编程中的使用方法。

登车时的队列数据结构

队列也是一种线性数据结构,其中的元素是根据先进先出(FIFO)规则来排列的。它就像站在队列中的乘客要登上一辆公共汽车。第一个进入队列的人就是第一个上车的人。新乘客可以从后面加入队列,而乘客则从前面上车。

为什么需要一个队列表?

你可能会问,计算机上的队列是在哪里使用的?假设你在办公室里,有一个由五台计算机组成的网络。你将所有这些计算机连接到一台打印机上。假设一个员工想打印他的文件,并通过他的电脑向打印机发送了一个命令。打印机收到命令并开始打印文件。同时,另一个员工也向打印机发送了命令。打印机将第二条命令放到队列中。第二条命令只有在第一条命令执行后才会被执行。这遵循了先进先出的规则。

社交和地图中的图数据结构

图是一个由相互连接的顶点组成的网络。每个顶点被称为一个节点,它们之间的连接被称为边。

你可能使用社交媒体,如微博、朋友圈、快手等。社交媒体是使用图的一个很好的例子。社交媒体使用图来存储每个用户的信息。在这里,每个用户都是一个节点,就像在图中一样。而且,如果一个用户,我们叫他小王,与另一个用户小红成为朋友,那么小王和小红之间就存在一条边(连接)。同样,我们与人的联系越多,图的节点和边就会不断增加。

同样地,地图是另一个使用图数据结构的例子。在谷歌地图中,每个地点都被视为节点,而地点之间的道路被视为边。而且,当一个人要从一个地方移动到另一个地方时,谷歌地图使用各种基于图的算法来寻找最短路径。我们将在本文后面讨论这个问题。

算法

排列书架上书籍的排序算法

简单地说,排序是一个系统地安排类似物品的过程。例如,假设你正在根据书的高度安排书架上的书。在这种情况下,我们可以把较高的书放在左边,然后是较矮的书,或者反过来也可以这样做。

这个概念也是在排序算法中实现的。在DSA中存在不同的排序算法。尽管每一种算法的目的都是一样的,但每一种算法都根据不同的标准以不同的方式工作。

在上面的例子中,如果我们想尽可能快地对书籍进行排序,那么有几点需要考虑。

  • 书籍是否可以在书架上轻松交换?如果书很重,我们可能会花更多时间。同样,也可能有其他限制。( 可访问性 )
  • 书的数量是多少?( 数据大小 )
  • 我们能以多快的速度访问它们?(硬件的能力)

算法的建立要考虑到所有这些限制,以产生一个最佳的解决方案。根据不同的排序特点,有以下常见的排序算法:

  • 泡沫排序
  • 选择排序
  • 合并排序
  • 快速排序

书架上找书的搜索算法

搜索,顾名思义,寻找一个项目。

假设你想在书架上搜索一本特定的书。自身的书没有以特定的方式排列。如果你需要在最短的时间内找到这本书,你会怎么做?DSA提供了这方面的解决方案。

你可能会想:“我将从头开始寻找这本书并将其定位”。在这种情况下,你将从书架的起点到终点逐一搜索书籍。这个概念在线性搜索中也有实现。

但是,如果这本书在书架的另一端呢?上述过程可能需要很长的时间,而且不会提供一个可行的解决方案。

现在,让我们尝试另一个程序。首先,按字母升序对书籍进行排序,然后搜索中间的书。我们正在搜索一本以J开头的书。

因为我们总是在看中间位置,所以A和Z之间的中间位置是M,而不是J。

现在,将J与M进行比较,我们知道J位于M之前。因此,我们开始在A和M的中间位置寻找J。

由于J位于G和M之间,让我们找到它们之间的中间元素。是的,我们已经找到了J,恭喜你!!!。

什么是数据结构和算法相关推荐

  1. Python3-Cookbook总结 - 第一章:数据结构和算法

    第一章:数据结构和算法 Python 提供了大量的内置数据结构,包括列表,集合以及字典.大多数情况下使用这些数据结构是很简单的. 但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题. ...

  2. 推荐一个关于.NET平台数据结构和算法的好项目

    http://www.codeplex.com/NGenerics 这是一个类库,它提供了标准的.NET框架没有实现的通用的数据结构和算法.值得大家研究. 转载于:https://www.cnblog ...

  3. 数据结构和算法:(3)3.1线性表的顺序存储结构

    -----------------------1.线性表基础操作------------------------ 线性表:(List)由零个或多个数据元素组成的有限序列. 首先他是一个序列,元素之间是 ...

  4. weiss数据结构和算法书的使用说明

    <数据结构与算法分析 C语言描述>Mark Allen Weiss著,冯舜玺译,机械工业出版社.Weiss教授的经典教材三部曲之一,其中的C语言描述版本,也就是本书,被称为20世纪最重要的 ...

  5. 数据结构和算法 -- 学习导图

    数据结构和算法 是作为程序员写出高效代码的基础,为了今后的两年在高效代码之路上持续精进,将按照此学习导图进行 算法和数据结构的刻意练习,同时也希望为同样有高效代码追求的伙伴们提供一条学习路径,共同进步 ...

  6. Java数据结构与算法(第四章栈和队列)

    2019独角兽企业重金招聘Python工程师标准>>> 本章涉及的三种数据存储类型:栈.队列和优先级队列. 不同类型的结构 程序员的工具 数组是已经介绍过的数据存储结构,和其他结构( ...

  7. python数据结构与算法总结

    python常用的数据结构与算法就分享到此处,本月涉及数据结构与算法的内容有如下文章: <数据结构和算法对python意味着什么?> <顺序表数据结构在python中的应用> ...

  8. 学习JavaScript数据结构与算法(一):栈与队列

    本系列的第一篇文章: 学习JavaScript数据结构与算法(一),栈与队列 第二篇文章:学习JavaScript数据结构与算法(二):链表 第三篇文章:学习JavaScript数据结构与算法(三): ...

  9. MySQL索引背后的数据结构及算法原理【转】

    http://blog.codinglabs.org/articles/theory-of-mysql-index.html MySQL索引背后的数据结构及算法原理[转] 摘要 本文以MySQL数据库 ...

  10. 数据结构与算法:22 精选练习50

    精选练习50 马上就要期末考试或者考研了.为了大家复习的方便,我精选了有关数据结构与算法的50道选择题,大家可以抽空练习一下.公众号后台回复"答案"可以获取该50道题目的答案. 0 ...

最新文章

  1. 揭秘华尔街人工智能真实水平:距离40%的金融民工被取代或只剩8年
  2. 监督学习:KNN(K-近邻)算法实现手写数字识别的三种方法
  3. 关于Consul的几个问题
  4. mysql主从同步读写分离
  5. 求01矩阵中的最大的正方形面积
  6. 如何保持交互的可见性
  7. 10个linux awk文本处理经典案例,Linux awk命令常用案例
  8. Excel2007快捷键大全
  9. win 10计算机服务,win10 怎么打开服务_win10打开系统服务的3种方法
  10. 如何删除下一页分节符_怎么去掉分节符下一页
  11. 幻想世界正在连接服务器,旅行物语桌面版连接不上怎么办 pc电脑版无法连接服务器怎么办...
  12. 逻辑与计算机设计基础实验报告,学位论文_逻辑与计算机设计基础课实验报告.doc...
  13. CANopen协议基础知识
  14. [PHP问题]Cannot redeclare xxxxxx() (previously declared in C:\WWW\xxx.xxx:xxx)
  15. To prevent a momery leak
  16. android串口通信——android-serialport-api
  17. 权限管理系统(包括审批流程)数据库设计图
  18. [Python]如何快速知道要使用哪些python模块和有哪些功能
  19. Log4C的基本用法
  20. 工地人员定位系统解决方案

热门文章

  1. html 地址选择控件,原生js实现移动端省市区地址选择器插件
  2. 小马哥---高仿苹果6sp 主板型号W9200 V3.0新版机型刷机拆机图
  3. Javascript获取元素的方式
  4. 一键进入教室、一键查找答案,教育App自动跳转、匹配实现方法
  5. 各种游戏个性情侣名称大集合
  6. Gmedian(几何中位数或者中位数中心)
  7. 转载 天涯[经济杂谈]一位创业者的商海感悟(语录版,连载中,持续更新)【力荐】
  8. 嵌入式开发环境配置一-arm-gcc安装配置
  9. PHP代码去快手视频水印实现提取快手水印视频播放地址
  10. novnc的安装和设置开机自启