第9章:贪婪技术——《算法笔记

每一步选择满足条件

可行

局部最优

不可取消

局部最优产生全局最优

证明:

1.数学归纳法,

2.每步不比其他步差

3.到达问题最优上界

 

或得到近似解

 

特性问题:找一个数

问题的特征提供更多信息?

全局问题:多次查找

问题的共同特性,特性的最大子集?

 

拟阵:抽象组合结构

 

最小生成树

连通图

权重最低

是树!

属性:点=边+1,无圈

 

Prim算法:单个节点开始,选择离已有图最近的点加入

保持集合:优先队列:未加入的点:离已有树的距离

 

归纳法:每步构成的树是某棵最小生成树的子图

i-1步符合属性,i步符合

反证:两棵树,已知树,未知树,连接,选最小边

 

Kruskal:

V-1条边的无环子图

边权重递减,选择最短边,判断是否构成环

判断连通性:并查集:

求并(合并树):两个节点在不同集合

查找(是否连通):两个节点在同一集合(以后可不再考虑该边)

遍历边,分两种情况:连接,成环

 

并查集操作:

makeset:生成单元素集合

find:所属子集

union:合并集合

 

集合中元素来索引集合

 

实现:

链表:元素

元素:所属集合标记

 

并:短链表加入长链表末尾,修改元素集合标记(维护链表长度)

证明nlogn

 

根:子集代表

节点:元素

 

集合元素到树中节点的映射:指针数组

 

并:合并根

find:子——父——根指针链

 

小树——附加到大树

大小衡量:节点个数,高度

路径压缩:节点直接指向根

 

Dijkstra

单起点最短路径

不含负权重

 

维护:已构成树,与剩余节点的距离

选距离最近的点

更新树与点集的距离

斐波那契堆?理论上的改进

 

哈弗曼树与编码

变长编码

字符出现频率

 

单节点树:根:树的权重:频率和

选两个最小频率,合并,新根:频率和

 

压缩率

 

动态哈夫曼编码

 

n个正数分配给叶节点

每步:最小加权长度all(hxw),合并

 

最小加权树

 

猜数字游戏,每次奖金减半

 

习题:

1.

 

posted on 2018-06-04 10:37  秦梦超  阅读(219)  评论(0编辑  收藏  举报

导航