时间复杂性 | T(n) | 所有执行时间之和 |
---|---|---|
时间渐进复杂性(数量级) | O(n) | 最高时间次数数量级 |
空间渐进复杂性 | S(n) |
一对一的模式
顺序存储:数组
链式存储:链表
(环状表)
栈:先进后出
队列:先进先出
(环状)
串:字符类型
广义表:表中表(套娃)
二叉树:一个根结点,与两个子节点(可空集)
满二叉树:节点个数为 2的i(深度)次方 减1 (可空集)
完全二叉树: 满二叉树的最后一层叶节点从左到右必须连续,右边可缺失 (可空集)
线索二叉树:左右子树为空时,指向前倾和后继。
最优二叉树:哈夫曼树
哈夫曼算法口诀:1、构造森林全是根;2、选用两小造新树;3、删除两小添新人;4、重复2、3剩单根。
哈夫曼编码:前缀编码
有向图:
无向图:
带权:
强连通、极强连通、极小连通
顺序存储:邻接矩阵
链式存储:十字链表、邻接表、邻接多重表
DFS(深度优先搜索):堆(递归)需要visited[n]数组通过置1表示已被检索过
BFS(广度优先搜索):队列
图的应用:最小生成树、最短路径、拓扑排序、关键路径
生成树:不存在回路得图
深度优先生成树、广度优先生成树
最小生成树(MST 无向网络):权值相加最小(n点间)
算法:prim算法(选择点)、kruskal算法(选择边)
最短路径:寻找一条各边权值之和最小的路径(两点间)
算法:单源最短路径(dijkstra算法)、所有顶点间的最短路径(floyd算法)
拓扑排序(AOV网):排课先后问题(前置学习)
1.在有向图中选择一个没有前驱的定点
2.从图中删除该定点和所有以它为尾的弧
3.重复有1、2
关键路径(AOE网):工程计划问题(路径长度最长的路径)
ASL(平均查找长度)
设置监视哨的顺序查找;
时间效率O(n);
空间复杂度O(1);(哨兵)
如何提高查找效率:进行查找频度排序
性能分析——判定树(查找次数所表示的树)
ASL(成功时):log2(n+1)-1
优点:查找效率比顺序高
缺点:只适用于有序表,且限于顺序存储结构(对线性链表无效)。
分块有序:先确定所在块(顺序或二分查找),再在块内查找(顺序查找)
查找效率:ASL:Lb+Lw(对索引表与块内查找)
优点:插入和删除方便,无需进行大量移动
缺点:要增加一个索引表的存储空间并对初始索引表进行排序运算。
适用情况:如果线性表既要快速查找又经常动态变化,则可采用分块查找。
二叉排序树、平衡二叉树、红黑树、B-树、B+树、键树
左孩子比根小,右孩子比根大;
查找分析:最好为二分查找效率,最差为顺序查找效率,与树的形态有关
又叫AVL树
平衡因子:左子树高度减右子树高度
平衡调整的四种类型:LL型、LR型、RL型、RR型(老二提上来)
散列存储:Loc(i)= H(keyi)
散列函数:H(key)= k
冲突:H(key1)=H(key2)
构造方法:
1.直接定址法
Hash(key)=a*key+b (a、b为常数)
2.数字分析法
3.平方取中法
4.折叠法
5.除留余数法
Hash(key)=key mod p (p是一个整数(最好是小于等于表长的质数))
6.随机数法
处理冲突的方法
1.开放定址法(开地址)
线性探测法:一旦冲突,就找下一个地址,直到找到空地址存入,增量序列为1,2,3,4…
二次探测法:一旦冲突,就找下一个地址,直到找到空地址存入,增量序列为12,-12,22,-22…,q2
伪随机探测法:一旦冲突,就找下一个地址,直到找到空地址存入,增量序列为伪随机数
2.链地址法(拉链法)
相同散列地址的记录链成一个单链表
3.再散列法(双散列函数法)
4.建立一个公共溢出区
散列表的查找效率分析
1.散列函数
2.处理冲突的方法
3.散列表的装填因子a=表中填入的记录数/哈希表的长度
顺序法定位插入位置——直接插入排序
二分法定位插入位置——二分插入排序
缩小增量多遍插入排序——希尔排序
采用顺序查找法查找插入位置
查找插入位置时采用折半查找法
减少了比较次数
Hibbard增量序列
Dk=2k-1相邻元素互质
Sedgewick增量序列
{1,5,19,41,109,…}——94i-92i+1或4i-3*2i+1
每趟不断将记录两两比较,并按“前小后大”规则交换。
两个相邻元素比较,移动元素。
任取一个元素(如:第一个)为中心
所有比它小的元素一律前放,比它大的元素一律后放,形成左右两个子表;
对各子表重新选择中心并依此规则调整
直到每个子表的元素只剩一个
再待排序的数据中选出最大(小)的元素放在其最终的位置。
若再输出堆顶的最小值(最大值)后,使得剩余n-1个元素的序列重又建成一个堆,则得到n个元素的次小值(次大值)……如此反复,便能得到一个有序序列,这个过程称之为堆排序。
将两个或两个以上的有序子序“归并”为一个有序序列。
需要额外辅助空间。
分配+收集
设置若干个箱子,将关键字为k的记录放入第k个箱子,然后再按序号将非空的连接