什么是数据结构和算法
从远古的汇编语言到现代编程语言,计算机编程已经变得更加强大、高效和先进。然而,计算机编程中的数据结构和算法的核心概念和使用并没有改变。从一开始,
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,恭喜你!!!。
什么是数据结构和算法相关推荐
- Python3-Cookbook总结 - 第一章:数据结构和算法
第一章:数据结构和算法 Python 提供了大量的内置数据结构,包括列表,集合以及字典.大多数情况下使用这些数据结构是很简单的. 但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题. ...
- 推荐一个关于.NET平台数据结构和算法的好项目
http://www.codeplex.com/NGenerics 这是一个类库,它提供了标准的.NET框架没有实现的通用的数据结构和算法.值得大家研究. 转载于:https://www.cnblog ...
- 数据结构和算法:(3)3.1线性表的顺序存储结构
-----------------------1.线性表基础操作------------------------ 线性表:(List)由零个或多个数据元素组成的有限序列. 首先他是一个序列,元素之间是 ...
- weiss数据结构和算法书的使用说明
<数据结构与算法分析 C语言描述>Mark Allen Weiss著,冯舜玺译,机械工业出版社.Weiss教授的经典教材三部曲之一,其中的C语言描述版本,也就是本书,被称为20世纪最重要的 ...
- 数据结构和算法 -- 学习导图
数据结构和算法 是作为程序员写出高效代码的基础,为了今后的两年在高效代码之路上持续精进,将按照此学习导图进行 算法和数据结构的刻意练习,同时也希望为同样有高效代码追求的伙伴们提供一条学习路径,共同进步 ...
- Java数据结构与算法(第四章栈和队列)
2019独角兽企业重金招聘Python工程师标准>>> 本章涉及的三种数据存储类型:栈.队列和优先级队列. 不同类型的结构 程序员的工具 数组是已经介绍过的数据存储结构,和其他结构( ...
- python数据结构与算法总结
python常用的数据结构与算法就分享到此处,本月涉及数据结构与算法的内容有如下文章: <数据结构和算法对python意味着什么?> <顺序表数据结构在python中的应用> ...
- 学习JavaScript数据结构与算法(一):栈与队列
本系列的第一篇文章: 学习JavaScript数据结构与算法(一),栈与队列 第二篇文章:学习JavaScript数据结构与算法(二):链表 第三篇文章:学习JavaScript数据结构与算法(三): ...
- MySQL索引背后的数据结构及算法原理【转】
http://blog.codinglabs.org/articles/theory-of-mysql-index.html MySQL索引背后的数据结构及算法原理[转] 摘要 本文以MySQL数据库 ...
- 数据结构与算法:22 精选练习50
精选练习50 马上就要期末考试或者考研了.为了大家复习的方便,我精选了有关数据结构与算法的50道选择题,大家可以抽空练习一下.公众号后台回复"答案"可以获取该50道题目的答案. 0 ...
最新文章
- 揭秘华尔街人工智能真实水平:距离40%的金融民工被取代或只剩8年
- 监督学习:KNN(K-近邻)算法实现手写数字识别的三种方法
- 关于Consul的几个问题
- mysql主从同步读写分离
- 求01矩阵中的最大的正方形面积
- 如何保持交互的可见性
- 10个linux awk文本处理经典案例,Linux awk命令常用案例
- Excel2007快捷键大全
- win 10计算机服务,win10 怎么打开服务_win10打开系统服务的3种方法
- 如何删除下一页分节符_怎么去掉分节符下一页
- 幻想世界正在连接服务器,旅行物语桌面版连接不上怎么办 pc电脑版无法连接服务器怎么办...
- 逻辑与计算机设计基础实验报告,学位论文_逻辑与计算机设计基础课实验报告.doc...
- CANopen协议基础知识
- [PHP问题]Cannot redeclare xxxxxx() (previously declared in C:\WWW\xxx.xxx:xxx)
- To prevent a momery leak
- android串口通信——android-serialport-api
- 权限管理系统(包括审批流程)数据库设计图
- [Python]如何快速知道要使用哪些python模块和有哪些功能
- Log4C的基本用法
- 工地人员定位系统解决方案