贪心算法|经典例子

注:本学期刘老师上课内容知识点整理。

贪心算法

贪心不一定正确,需要证明

活动安排问题

在这里插入图片描述
算法正确性证明:
在这里插入图片描述
贪心算法的基本要素:
贪心选择性质和最优子结构性质
贪心选择性质
对比: 矩阵连乘, 0-1背包 vs 分数背包,活动安排
贪心算法第一基本要素, 与DP主要区别
==自顶向下计算 ==
OSP: 最优策略的子策略也是最优 //动规, 贪心
== 正确性证明一般过程: ==
贪心选择+OSP+数学归纳法
条件: 子问题与原问题类似, 相对独立 //不类似? 则需要另外方法
子问题的最优解和贪心选择联合得整体最优解

一般设计过程:

  1. 将问题描述为贪心选择和一个待解决子问题的形式
  2. 贪心选择性质: 证明贪心选择是正确的
  3. 最优子结构性质:
    确保若将子问题的最优解和贪心选择结合, 则能得到原问题的最优解.
    活动安排问题
    贪心选择: 最早结束的活动
    子问题: T1 = { 开始时间晚于f1的活动 }

最优编码问题(Huffman编码)

在这里插入图片描述
确定解的结构: 二叉树
在这里插入图片描述
好的编码:
大频率编码短
小频率编码长
正则二叉树
相对平衡

贪心选择性质:
 存在最优解其频率最小两叶节点深度最大
 存在最优解其频率最小两叶节点是兄弟

最优编码问题
贪心选择: 频率最小的两个字母是兄弟. 子问题?
原问题: 6个符号待编码
子问题: 5个符号待编码
在这里插入图片描述

输入C[1:n], f[1:n]  //字母集C和频率f 
1. Q=C          //建优先队列Q,  O(n) 
2. 对 i = 1:n-1   //循环n-1次
3.   分配新节点z 
4.   取Q中f最小x作为z的左孩子//O(log n) 
5.   取Q中f最小y作为z的右孩子//O(log n)
6.   f[z] = f[x] + f[y] 
7.   将z插入Q中                           //O(log n)
8. 取出Q中节点作为树根          //?

最短路问题

在这里插入图片描述

  • 全点对最短路(APSP)

DP:
在这里插入图片描述

1. D[i,j][0] = w[i,j], 不存在的边值取无穷大 
2. 对k=1:n 
3.   对i=1:n, 对j=1:n 
4.     若D[i,k][k-1]
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值