非前缀码:避免歧义
非前缀码可以用哈夫曼树表示
平均传输位数:频率*长度

算法分析——第八周 贪心算法
哈夫曼树的构造:for i=1 to n-1 【省略】

算法分析——第八周 贪心算法
证明:很好证明。
B(T)-B(T’)=[f(x)-f(a)][dx-da]+[f(y)-f(b)][d(y)-d(b)]>0

引理二:
x,y是同一父节点的树叶节点,哈夫曼树B(T)。将x,y去掉并使得x,y的父节点z f(z)=f(x)+f(y),则B(T)=B(T’)+f(x)+f(y)
还是很好证明,略算法分析——第八周 贪心算法

证明哈夫曼算法:
命题:Huffman 算法对任意规模为n(n>1)的字符集C都能得到关于C的最优字符集
归纳基础:n=2时,哈夫曼算法显然成立
归纳步骤:假如对规模为n的字符集得到最优前缀码能得到最优字符集,则对n+1的字符集也能得到最优字符集
证明:
设字符集C{x1,x2----xn+1},x1,x2是频率最小的两个字符,根据引理2,
我们假设字符集C’=C-{x1,x2}+{z},用z代替x1,x2,且f(z)=f(x1)+f(x2)
因为字符集C’含有n个字符,根据归纳假设,我们得到最优字符集B(T)
现在将x1,x2连接在字符z作为其

应用:文件归并
运用哈夫曼树进行文件归并,比较次数最小

最小生成树

性质:
1:n个顶点的图有n-1条边
2:新增一条不在生成树的边,则成圈
3:去掉一条圈的边,则得到另一个棵生成树

prim算法

过程略
证明:
假设prim算法从顶点1开始选边
归纳基础:k=1,则存在一棵最小生成树包含边e=(1,i),其中{1,i}是所有关联1的边中权最小的
证明:
算法分析——第八周 贪心算法
归纳步骤:算法进行了k步,由归纳假设得到选择的e1-ek的边都是最小生成树的边。则第k+1挑的边也是最小生成树的边
证明:
第k+1步选择边ek+1{ik+1,-}其中ik+1在已选顶点集T中。
如果ek+1在最小生成树中,则显然成立
如果ek+1不在最小生成树:
算法分析——第八周 贪心算法
时间复杂度O(n^2)

Kruskal算法

过程:利用并查集,设置find数组,首先进行排序
归纳基础:边数n=2时,算法正确,G中只有一条边
归纳步骤:假设算法对于n阶图是正确的,则算法对于n+1图也是正确的

基础:短接操作
算法分析——第八周 贪心算法
证明:算法分析——第八周 贪心算法
算法分析——第八周 贪心算法
时间复杂度:O(nlogn)

应用:数据分组
一组数据(照片,文件,生物标本)要把它们按照相关性进行分类。用相似度函数或者距离描述个体差异
对于很多数据,如果分成五类,如何划分?
使用Kruskal算法
算法分析——第八周 贪心算法

单元最短路问题

Dijkstra算法:
算法分析——第八周 贪心算法

归纳步骤:假设命题对k为真,考虑k+1步算法,选择顶点v,需要证明dist[v]=short[v]
如果存在另一条路径s-x-y-v,证明其长度一定大于s-u-v
算法分析——第八周 贪心算法

相关文章:

  • 2021-06-30
  • 2022-02-12
  • 2022-02-27
  • 2021-09-30
  • 2021-12-22
猜你喜欢
  • 2021-07-04
  • 2022-01-02
  • 2021-05-09
  • 2022-01-09
  • 2021-12-15
  • 2021-06-17
  • 2022-12-23
相关资源
相似解决方案