什么是数据结构?
数据对象在计算机中的 存储和组织方式,但是它存在有两种概念,一种是关于数据对象的逻辑结构,另一种则是数据的物理存储结构
其中,逻辑结构是指对数据的组织方式,例如线性结构,这种结构是连续性的,像1,2,3...;而物理存储结构则是对逻辑结构在计算机中的具体存储方式,是使用数组,还是链表。
数据对象必定与一系列加载其上的操作相关联,完成这些操作所用的方法就是算法
简单的说,就是对数据执行的操作,例如是插入,还是修改或者删除,而完成这些操作的方法就是算法
抽象数据类型
可以通过抽象来描述数据对象及其相关的操作,其中有两个关键词,一个是抽象,一个是数据类型。 什么意思呢?数据类型包含两个东西,一个是数据对象集,也就是具体数据,另一个呢,则是对数据对象相关联的操作集,包含对数据的操作方式。
而抽象的意思则是描述数据类型的方法不依赖于具体实现。也就是描述对数据可以有什么操作,但是不涉及具体如何实现。这样的好处是对程序建立宏观思维,从而可以对程序有更详细的了解。 抽象与存放数据的物理结构、机器、实现操作的算法和编程语言都无关,只是描述数据对象集和相关的操作是什么。
什么是算法?
算法是一个有限指令集,在有限的步骤之后会终止执行,可以接受输入(有些情况不需要接受输入),但是最终至少会产生一个输出。
描述算法的每一条指令必须有充分的目标,目标在计算机能处理的范围之内,并且描述是抽象的,不依赖任何一种计算语言和具体实现手段
两者的关系
简单的说,数据结构与算法相辅相成,数据结构是为了算法服务,算法要作用在特定的数据结构上,因此无法孤立彼此
总结一下:
- 解决问题方法的效率,是跟数据的组织方式直接相关的
- 解决问题方法的效率,跟空间的利用效率有关
- 解决问题的方法的效率,跟算法的巧妙程度有关
为什么要学数据结构和算法?
数据结构和算法是基础的知识,可能在实际工作中用不到
但是,万丈高楼平地起,所有软件都是从基础搭建起来。例如现在的各种开源框架,比较主流的 Laravel,这些框架之所以会成为主流,那是因为揉合了很多的基础数据结构和算法的设计思想,而它的性能往往不用我们去考虑,我们只需要基于它来编写我们的业务即可。
学习任何知识都是为了“用”,是为了解决实际工作问题
所以学习数据结构和算法,除了可以提高技术水平,还有利于提升大脑的逻辑思维,以及评估代码的性能和资源消耗,还能增加解决问题的手段。
掌握数据结构和算法,不管对于阅读框架源代码,还是理解背后的设计思想,都是非常有用的
所以总的来说,有几点:
- 建立时间/空间复杂度的意识,写高性能的代码
- 训练逻辑思维
- 提高代码质量,能够设计基础结构
- 提高编程水平
- 获得更好的工作回报
掌握了数据结构和算法,看待问题看本质,解决问题的角度 360 度无死角,选择更合适的方案
如何学习?
通过上面文字简单的介绍了数据结构和算法是什么,有什么用,可以从中得知数据结构和算法如何更高效存储和处理数据的问题,这是具体的解决方法。因此,还需要一种可以考量效率和资源消耗的方法,那就是:复杂度分析。
学习数据结构和算法的前提条件就是掌握复杂度分析,代码好不好,分析一下就知道,怎么优化,分析一下用什么算法
所以可以归类为:
- 掌握复杂度分析
- 掌握基础的数据机构和算法,再学习复杂
- 基础的数据结构:
数组
、链表
、栈
、队列
、散列表
、二叉树
、堆
、跳表
、图
、Trie 树
- 基础的算法:
递归
、排序
、二分查找
、搜索
、哈希算法
、贪心算法
、分治算法
、回溯算法
、动态规划
、字符串匹配算法
- 基础的数据结构:
- 多辩证,多思考,多问问为什么
不死记硬背,不为学习而学习,要学习它的“来历” “自身特点” “适合解决的问题” 及 “实际的应用场景”
学习技巧
- 边学边练,适度刷题
- 每周花 “1~2”小时
- 可以“适度”刷题,但一定不要浪费太多时间在刷题上
- 学习的目的还是掌握,然后应用
- 多问、多思考、多互动
- 打怪升级法
- 给自己设立一个切实可行的目标
- 沉淀知识,停下来梳理下知识
- 适当停下脚步,整理下学习内容,梳理清晰,才进入下一步
步入正文
在掌握了复杂度分析这个重要手段之后,就可以进入数据结构和算法的正文中了
诺,有这么多内容:
开始我们的算法之路吧
相关工具
Q.E.D.
Comments | 0 条评论