常见的数据结构与算法
数据结构
研究数据结构有什么用?
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
- 栈
- 队列
- 二叉树(满二叉树,完全二叉树,稀疏二叉树)
- 树
- 霍夫曼树、霍夫曼编码
- 图
- 图的存储表示(邻接矩阵,邻接表)
- 图的遍历、连通性(深度优先搜索-对应栈DFS,宽度优先搜索-对应队列BFS)
- 最小生成树
-
1. Kruskal算法(依次往图中加入最小权值且两个邻接点位于不同连通分量即不构成回路的边)
2. Prim算法(从某一顶点出发,选择与其关联的具有最小权值的边,将另一顶点加入到集合U中,以后每步从一个顶点在U中,另一个不在U中的各条边中选择权值最小的边,将其不在U中的顶点加入U中,直至所有顶点都在U中)
- 最短路径问题
-
1. Dijkstra算法 (图中没有负权值边)
2. Bellman-Ford算法(图中没有负权值路径
- 活动网络(AOV(拓扑排序问题),AOE( 关键路径问题))
算法
什么可以称作算法?
算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题
特征:有穷性 确切性 输入 输出 可行
- 常见的排序算法
- 冒泡排序
- 选择排序
- 归并排序
- 快速排序
- 堆排序
- 插入排序
- 希尔排序
排序算法相关博客:http://blog.jobbole.com/11745/
- 常见的查找算法
- 顺序查找
- 二分查找(递归实现、非递归实现)
- 分块查找
- 二叉树查找
一 线性查找
又称顺序查找,是从数组的第一个元素开始查找,直到找到待查找元素的位置,直到查找到结果。
最佳的状况时间是1 ,就是第一个就是待查找的远射,最差的查找状况是O(n),就是最后一个是待查找的元素。
二 折半查找
折半查找是将待查找的数组元素不断的分为两部分,每次淘汰二分之一,但是有个大前提是,元素必须是有序的,如果是无序的则要先进行排序操作,这种查找的方法,类似于找英文字典的Java,我们可以一下子找到字母J开头的,再仔细找。
最佳的状况时间是1,就是第一次分开就查找到了,最差的查找状态是O(n),便是待查找的数据出现在最后一次。
三 插补查找
插补查找是一种类似折半查找的查找方法,插补查找是以比例的概念,求出待查找数据的可能位置,然后进行比较,如果该值比待查找的小,表示待查找的值可能出现在该值之前的范围,就这样一直缩小范围来确定最终的目标。
四 二叉查找树
二叉查找树是先对待查找的数据进行生成树,确保树的左分支的值小于右分支的值,然后在就行和每个节点的父节点比较大小,查找最适合的范围。
这个算法的查找效率很高,但是如果使用这种查找方法要首先创建树。查找算法相关博客:http://www.open-open.com/solution/view/1410494404789
- 常见的