文章目录
7 均摊分析
重点:通过表扩张掌握势能方法
通过求一个操作序列中所执行的所有操作的平均时间,来评价操作的代价
但是摊销分析不涉及概率,只是对最坏情况下的平均,关注不同操作间的差异
7.1 聚集方法
为每个操作赋予相同的摊销代价,即使序列中存在不同类型操作,聚集方法中每个操作的摊销代价即为平均代价
7.2 记账方法
不同的操作有不同的摊销代价
7.3 势能方法
定义一个势函数Φ,只要Φ(Dn)>=Φ(D0)
摊销代价依赖于所选择的势函数,不同的势函数可能产生不同的摊销代价,但他们都是实际代价的上界
对于栈操作:
7.4 表扩张操作
8 随机算法
重点掌握随机算法的设计应用
- 确定性算法:算法的步骤、结果、时间复杂度是确定的
- 随机算法:算法在同一实例上的计算复杂度是随机变量
- 随机投点法
求π值,求定积分面积 - 平均值法
无意识统计学家法则https://blog.csdn.net/i_dovelemon/article/details/76286192
- 素数测试问题
素数必满足费马小定理,不满足费马小定理的一定不是素数,满足费马小定理不一定是素数 - 最小割问题
随机选择一条边将其收缩成一个新顶点,生成最小割的概率是2/n2 - N皇后问题
随机放,相互攻击的话就return false - 随机选择算法:线性时间元素选择问题,输出第k小的元素
抽选n3/4个元素
对于拉斯维加斯算法,获得正确解的概率为p,则称该算法为p正确的拉斯维加斯算法
- 随机排序算法
快速排序中随机选择一个点作为划分依据
9 近似算法
了解近似算法的近似比分析方法,重点分析简单近似算法的近似比
- 近似比:ε ρ
- 近似模式:多项式时间近似模式、完全多项式时间近似模式
- 顶点覆盖问题:
**NP完全问题:**用尽量少的顶点覆盖所有边
时间复杂度是O(|V|+|E|)
每次任取一个边 - 装箱问题
已有的箱子装不下的话就另开一个箱子
时间复杂度是O(n2) - 最短并行调度问题
新任务给完成时间快的机器 - 旅行商问题(符合三角不等式)
最小生成树+前序遍历+三角不等式 - 子集和问题:动态规划也行完全多现实性时间近似模式
只选取y>last(1+delta)的元素 - 集合覆盖问题
选择能覆盖的尽量多的未被覆盖的元素 - 不相交路径问题
每次从图中删去路径最短的结点对
证明不做要求 - 最大割问题**(NP完全问题)**
定义cost函数,每次交换cost>0的点
10 树搜索策略(不考)
10.1 典型树搜索策略
10.2 人员分配问题
10.3 旅行商问题
- 爬山法+分支限定法
- 采用特定的剪枝策略,
10.4 A*算法
定义结点代价f(n)=g(n)+h(n), g(n)是根节点到当前结点的代价,h(n)是到未来目标节点的估计值
h(n)=0时,A*算法退化成dijsktra算法
h(n)比g(n)大很多时,只有h(n)起作用,演变成贪婪最佳优先搜索算法(greedy best-first search)
11 NP问题(概念)
- 连续统假设:不存在一个基数绝对大于可列集而绝对小于实数集的集合
- P类问题:确定性多项式时间可解
- NP问题:非确定性多项式时间可解
- NP难:如果NP里的每一个问题Q都能用多项式时间规约到问题S,那么S是NP难
- NP完全:NPC问题是NP里最困难的问题,如果任意一个NPC是多项式时间可解的,那么P=NP
NPC问题:布尔公式的可满足性问题、整数线性规划问题、图着色问题、哈密顿环、旅行商、作业调度问题
12 优化算法
12.1 模拟退火算法
- 状态产生函数
- 状态接受函数
- 温度更新函数
- 初温设定、内循环终止、外循环终止
模拟退火算法求解旅行商问题:随机选择两个结点,交换路径中这两个结点的位置
12.2 遗传算法
- 编码:二进制编码
- 得到初始种群
- 遗传:轮盘赌
- 变异:单点交叉/多点交叉(对于旅行商问题可以部分匹配交叉、顺序交叉、循环交叉)
12.3 粒子群算法
13 线性时间排序算法(不考)
13.1 比较排序的时间下界
决策树模型
比较排序算法的执行就是从决策树根到某个叶子所经过的路径
13.2 计数排序
假设输入是介于0-k之间的整数,开一个长度为k的数组
时间复杂度是O(n+k),空间复杂度是O(n+k),是稳定排序
13.3 基数排序
每一位数分别排序