贪心算法——哈夫曼编码与Dijkstra算法

哈夫曼树是一个典型的贪心算法问题,在构造哈夫曼树的时候我们要使得WPL最小,将频率记作权值,那么频率越高,路长越小,WPL越小,所以最后构造的哈夫曼树中频率高的往往在上层,频率低的会放在下层。其核心思想是,每次选取两个最小频率结点作为孩子组成一个二叉树,其父节点频率=孩子节点频率之和,然后把这个父结点构成的树入队,重复上述操作n-1次直至只剩一个结点,即为我们所求的哈夫曼树。(不唯一)

(为了防止解码时对编码的误判,权值只会放在叶子结点。)

 

 

 


 迪杰斯特拉算法是一个贪心算法求单源最短路径的经典问题,核心思想是在原有向图中,V1V2之间的权值可以记作c[1][2],若两点连通则c[1][2]中保存其路径长,否则c[1][2]=+∞。

 

 

 比如从点V1出发,我们需要经过多轮迭代计算,每轮需要算出当前路径到其他结点的最小路长,如果计算的新路长更大就保留原路长,更小就替换原路长。

比如第一轮,我们发现初始dist中dist[2]最小,说明点1到点2最短,因此我们第一轮选择路径为V1V2,集合{1,2}那么保持dist[2]不变(排除已选节点的dist),V2的前一个结点prev[2]=1。第二轮我们求出V2到其他可达节点的总路长并修改dist,并且这一轮中dist[4]最小,因此我们路径为V1V4,集合为{1,2,4},V4的前一个结点prev[4]=1。以此类推,直到最后经历了n-1伦集合中包含了全部的节点,最后的节点是5,prev[5]=3,prev[3]=4,prev[4]=1。所以最终的最短路径是V1435。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值