数据结构
在计算机科学中,数据结构(data structure)是计算机中存储、组织数据的方式。而数组和链表是所有的数据结构的底层结构,也就是计算机中的所有的数据结构形式都是有这两种结构构成的,举个例字树这种数据结构一般都是由链表这个数据结构来构成。还有我们编程经常使用的HashMap是由数组与链表这两种结构来进行实现实现的,当然这个链表一般是红黑树,而红黑树的底层是链表。。。。。
树结构示意图
红黑树的结构示意图
数组
数组是最基础并且最常用的数据结构,它的结构特性可以让随机查询或者说访问特定节点的时间复杂度达到恐怖的O(1)。。。。
如果想要是实现树或了解数组可以参考下面这篇文章。。。。
链接: Array(数组)编程实现与结构解析===>数组.
链表
链表也是最基础并且最常用的数据结构,它的结构特性可以让增加、删除这两种执行方式的时间复杂度达到O(1)
常用的数据结构与实现的大纲
- 堆栈(Stack)
- 队列(Queue)
- 数组(Array)
- 链表(Linked List)
- 树(Tree)
- 图(Graph)
- 堆积(Heap)
- 散列表(Hash table)
结构类型 | 数据结构 |
---|---|
抽象类型 | 列表、堆栈、队列、双端队列优先队列、双端优先队列、集合、并查集、线段树。。。 |
数组 | 字符串、位数组、动态数组、哈希表、哈希数树组、稀疏矩阵。。。 |
链 | 关联表、链表、跳跃列表、松散链表、异或链表 |
树 | 线段树、自平衡二叉查找树、B树、二叉树、AA树、AVL树、红黑树、平衡树、伸展树、二叉查找树、堆、二叉堆左偏树、二项堆斐波那契堆、R树、R*树、R+树、Hilbert R树、前缀树、哈希树 |
图 | 有向图、有向无环图、二元决策图、无向图、确定性非循环有限自动机 |
算法
算法(algorithm),在数学和计算机科学之中,指一个被定义好的、计算机可施行其指示的有限步骤或次序。而在计算机中每一种算法基本上都对应了一个或多个数据结构,它们是伴生的关系。。。
比较常见算法的分类
- 排序
- 搜索
- 最短路问题
- 最小生成树
- 最大流、最小割
- 线性规划
- 顺序统计量
- 实用性算法
- 抽象算法
排序
算法分类 | 排序算法 |
---|---|
比较排序 | 冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、堆排序、鸡尾酒排、序梳排序、侏儒排序、图书馆排序、内省排序、奇偶排序 |
线性时间排序 | 鸽巢排序、基数排序、计数排序、桶排序 |
并行排序 | 排序网络Batcher、归并网络 |
图 | 拓扑排序 |
搜索
实现方式 | 搜索算法 |
---|---|
列表 | 线性搜索、二分搜索、插值搜索 |
树、图 | 广度优先搜索、最良优先搜索、A*深度优先搜索、迭代深化深度优先搜索、深度限制搜索、双向搜索分枝限定法 |
字符串 | KMP算法、博耶-穆尔字符串搜索算法、AC自动机算法、拉宾-卡普算法、bitap算法 |
最短路问题
- 戴克斯特拉算法
- 贝尔曼-福特算法
- A*搜索算法
- Floyd-Warshall算法
最小生成树
- 普林姆算法
- 克鲁斯克尔算法
最大流、最小割
- 福特-富尔克森算法
- 埃德蒙兹-卡普算法
- 迪尼茨算法
线性规划
- 单纯形法
- 卡马卡尔算法
顺序统计量
- 选择算法
- 中位数的中位数
实用性算法
实用性算法 | 作用 |
---|---|
随机化算法 | 如何让计算机快速产生随机数(random) |
近似算法 | 这是一种比较符合人类感官的算法,计算机的运行是一定要数值确定的。可实际情况是“差不多得了”,才是人类的基本生活规律。如:绝对值、四舍五入等等。这些都是都是非常简单近似算法,比较难的数学上的近似这里就不列举了。。 |
抽象算法
- 分治法
- 动态规划
- 贪心算法