算法分析与设计(第四章 贪心法(局部最优))

1、基本思想:贪心法通过分步决策的方法求解问题。贪心法每一步用作决策依据的选择准则称为最优量度标准(局部最优解)。在根据最优量度标准选择分量的过程中,还需要使用一个可行解判定函数(约束条件)。

2、贪心法一般具有2个重要的性质:

贪心选择性质、最优子结构性质

贪心选择性质:是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别(贪心法有贪心选择性质)。

最优子结构性质:一个问题的最优解包含其子问题的最优解。问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。

3、两类背包问题:

0/1背包问题:如果每一件物品不能分割,只能作为整体或者装入背包,或者不装入

一般背包问题:简称背包问题,如果物品是可以分割的,也就是允许将其中的一部分装入背包。(贪心法)

贪心法不能解决0/1背包问题。

贪心选择指把那些单位价值(pi/wi)最高的物体先放入背包。

4、贪心法算法特点:

(1)一步一步进行,根据某个最优度量标准,每一步都要保证获得局部最优解。

(2)每一步只考虑一个输入,它的选取应满足局部优化条件。

(3)若下一个输入与部分最优解连在一起不再是可行的解时,就不把该输入加到部分解中。

(4)直到把所有输入枚举完或者不能再加入为止。

5、活动安排问题

各活动的起始时间和结束时间存储于一维数组s[ ]和f[ ]中,且按结束时间的非减序排列。算法greedySelector每次总是选择具有最早完成时间的相容活动加入集合A中。该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。

时间复杂度

当输入的活动已按结束时间的非减序排列,算法只需O(n)的时间即可安排n个活动,使最多的活动能相容地使用公共资源;如果所给出的活动未按非减序排列,可以用O(nlogn)的时间重排。

6、最佳合并模式

两路合并最佳模式的最优量度标准为带权外路径长度最小。

带权外路径长度是针对扩充二叉树而言的。

扩充二叉树中除叶子结点外,其余结点都必须有两个孩子。扩充二叉树的带权外路径长度定义为:

7、最小代价生成树

最优量度标准:选择使得迄今为止已入选S中边的代价之和增量最小的边。

普里姆算法的贪心准则是:在保证S所代表的子图是一棵树的前提下,选择一条最小代价的边e=(u,v)。普里姆算法的时间复杂度是O( )。

克鲁斯卡尔算法的贪心准则是:按边代价的非减次序考察E中的边,从中选择一条代价最小的边e=(u,v)。克鲁斯卡尔算法的时间复杂度是O(nlogn)

8、哈夫曼编码

用于数据文件压缩的十分有效的编码方法。假定待压缩的数据为字符序列和字符在序列中出现的频率。

哈夫曼贪心算法:利用每个字符出现的频率建立一棵表示各字符的最优二叉树,然后用0和1两个元素构成的串表示各字符的最优表示方式。

前缀码:只用0/1对字符进行编码,并限定任一字符的编码都不是另一个字符编码的前缀,则称这样的编码为前缀码。

哈夫曼编码构造:哈夫曼提出的构造最优前缀码的贪心算法,以及由此产生的编码方案称为哈夫曼编码。哈夫曼算法以自底向上的方式构造表示最优前缀码的二叉树T。算法以|C|个叶结点开始,执行|C|-1次的“合并”运算后产生最终所要求的树T。

9、多机调度问题

这个问题是NP完全问题,到目前为止还没有有效的解法。对于这一类问题,用贪心选择策略有时可以设计出较好的近似算法。

采用最长处理时间作业优先的贪心选择策略可以设计出解多机调度问题的较好的近似算法。按此策略:

当n≤m时,只要将机器i的[0, ti]时间区间分配给作业i即可,算法只需要O(1)时间(作业可同时进行)。

当n>m时,首先将n个作业依其所需的处理时间从大到小排序。然后依此顺序将作业分配给空闲的处理机。算法所需的计算时间为O(nlogn)。(作业个数比服务器多)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值