数据结构与算法
什么是数据结构?
- 官方定义:数据结构是计算机存储、组织数据的方式。
- 直观理解:数据结构的缩影其实在生活中处处可见,货物、图书馆的书籍、快递的摆放(存放)方式其实就是数据结构的一种体现,这一个过程我们需要关注的是不同的方式他们对于存和取的效率是有影响的。如果物品可以随便一放那么自然存的效率就高,但是没有规则的存放,必然导致取(查找)的效率低下。这样一来我们需要根据对数据的读写的需求来选择数据得到存储和组织的方式,以至于提高我们的效率。
例如:
如果生活中的快递存放是这样的杂乱无章的,对于存放的效率自然是高效的,但对于查询的角度来考虑自然是困难的,效率低下的。
常见的数据结构
常见的数据结构有很多
- 数组
- 堆
- 栈
- 队列
- 链表
- 图
- 散列表
…
不同的数据结构的不同操作性能是不同的,有的查询性能很快,有的插入速度很快,有的插入头部很快,有的插入尾部很快。有允许元素重复,有的不允许元素重复等等特性。数据结构跟编程语言无关。常见的编程都有直接或间接的使用了 上述常见的数据结构。
将这些快递进行分类按照手机尾号或姓名之类的规则进行排序,显然存放的时候会比上者的效率慢一点,但是对于查询的角度考虑,效率会有明显的提升。
再来,如下这种存储模式其实分了三层的结构进行存放,首先是货架号,其次是货架号上层号,最后是快递的编号。通过增加了分层(分类)我们缩小了查询的范围,很快的找到编排好的货架,然后很快找到货架上的层号,如此一来我们很容易找到我们的快递。这就是生活中的数据结构的体现,合适的数据结构能够提高我们的效率。
什么是算法?
- 官方定义:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
- 有限指令集,每条指令的描述不依赖于语言。
- 接受一些输入(有些情况下不需要输入)。
- 产生输出。
- 一定是在有限步骤之后终止。
- 直观理解:数据结构与算法是密切相关的,上述所探讨的数据结构其实就是数据的存储和组织的方式,算法其实就是我们解决问题的方案,是解决问题的一系列步骤,例如:我们的问题是在一堆快递里面查找到我们的快递,而查找快递方式(算法)会受到快递存储方式的影响,如果一堆快递是随意摆放的,要找到我们的快递可以通过 逐一遍历的方式进行查找。如果快递是按照货架-货架层级-快递号进行存储的找到快递的方式(算法)就是先找到货架,再找到所在货架层进而再找到快递。通过上述的描述,或许你对数据结构和算法以及他们之间的关系会有一个比较直观上的认识。
常见的算法
比如说排序算法:
- 冒泡排序
- 选择排序
- 快速排序
- 希尔排序
…
虽然实现了相同的目的,但是不同的排序算法,他的执行效率是不一样,在解决问题当中,影响效率不仅仅是数据的存储和组织的方式(数据结构),而且算法的优劣也会影响解决问题的效率。
…到此为止,已经对数据结构和算法有了一定的直观认识,后续将围绕着数据结构和算法进行展开讨论。