算法和数据结构理解
2019-03-17 本文已影响0人
angeliur
什么是数据结构
- Data Structure
- 存储数据的不同方式
如果有一些数组需要存储起来,我们可以采用不同的方式。比如,把这几个数挨着排在一起,中间没有空隙,每一个存储单元大小都一样,这种数据结构就是数组的形式。另外还有一种,每一个单元除了存储自己的数据之外还存储着下一个单元的指针,指向下一个数据的地址,这种数据结构就是链表。
什么是算法
- 简单讲就是同一个问题的不通解决方式
- 算法往往是针对特定数据结构的
- 插入一条数据在两种数据结构中的不同:
如果我们想在一个链表数据结构的两个数据3和7之间插入一个新的数据1,这时候的算法应该是把3和7之间的指针打断,然后把3的指针指向1,同时把1的指针指向7,构成新的链条,这样就完成了链表的数据插入了。
如果想在一个数组中进行插入操作就比较复杂了,因为数组的数据之间是没有空隙的。我们需要开辟一块新的空间,需要比原来的空间大1。然后从要插入的位置从前后切断分为两部分,首先把前面的放入新的空间,接下来在放入要插入的数据,最后把后面部分放到新的空间,完成数组的插入。 - 查询一条数据在两种数据结构中的不同:
如果我们需要查询第六条数据,那么在链表中我们需要从第一个数开始顺着链条依次查找,直到找到第六个数。而在数组中,我们只要知道第一个数开始的位置和每个单元格的大小,往后根据偏移量跨越就可以得到。
- 总结:
在链表中插入数据效率更高,而查找数据则使用数组更方便。每种数据结构都有自己的优势,选择什么样的数据结构,需要根据特定的问题来确定。
判断算法优劣的两种方式(通常用Big O来表示)
-
时间测算
即时间复杂度。表示随着数据(问题)规模的扩大,时间的变化规律。
访问数组某个位置的值,它的时间复杂度是O(1),因为不管数据变得多大,访问某个位置需要计算的都是一个偏移量。O(1)表示时间复杂度是常数,不会随着数据规模的扩大而发生改变。
访问链表的某个位置的值,它的时间复杂度是O(n),因为当链表的数据变多时,访问某个位置需要的时间都会线性增长。O(n)表示时间复杂度会随着数据规模的增大而线性增长。因为时间复杂度通常计算的是在最坏情况下需要花费的时间。 -
空间测算
即空间复杂度。表示随着数据(问题)规模的扩大,空间的变化规律。