第4章 贪心算法ppt课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

背包问题:
与0-1背包问题类似,所不同的是在选择物品i装入背 包时,可以选择物品i的一部分,而不一定要全部装入 背包,1≤i≤n。
精品ppt
10
0-1背包与背包问题都具有最优子结构
已知背包最大承载重量为C,共有n个物品, 每个物品的重量分别为Wi(i=1,2,...,n),价值 为Vi(i=1,2,...n)。 证明:
假设第k个物品是最优解中的一个物品,则 从中拿出Wk对应的物品后所对应的解一定 是其余n-1个物品,装入背包最大承载重量 为C-Wk的最优解,否则与假设矛盾。
精品ppt
11
0-1背包问题不具有贪心选择性质。 原因是无法保证能够将背包装满, 而所剩空间将会降低总价值。
背包问题具有贪心选择性质。
精品ppt
直到背包装满为止。 是否可以将物品装入背包的条件是: 有空间
精品ppt
15
背包问题的贪心算法
void knapsack(float c,float w[], float v[],float x[],int n) { 将各种物品依其单位重量的价值从高到低排序 初始化 x[i]=0;
for (i=0;i<n;i++) { //贪心选择
虽然贪心算法不能对所有问题都得到整体最优 解,但对许多问题它能产生整体最优解。如单 源最短路经问题,最小生成树问题等。在一些 情况下,即使贪心算法不能得到整体最优解, 其最终结果却是最优解的很好近似。
精品ppt
2
例:用贪心法求解付款问题。 假设有面值为5元、2元、1元、5角、2角、1角的 货币,需要找给顾客4元6角现金,为使付出的货 币的数量最少,首先选出1张面值不超过4元6角的 最大面值的货币,即2元,再选出1张面值不超过2 元6角的最大面值的货币,即2元,再选出1张面值 不超过6角的最大面值的货币,即5角,再选出1张 面值不超过1角的最大面值的货币,即1角,总共 付出4张货币。
单位价值6元
物品2 20公斤,价值100元
单位价值5元
物品3 30公斤,价值120元
单位价值4元
贪心算法
物品3 20公斤 物品2 20公斤 物品1 10公斤
=¥60+100+80
背包容量:50公斤
精品ppt
14
用贪心算法解背包问题的基本步骤:
1.计算每种物品单位重量的价值Vi/Wi; 2.按照单位重量的价值从高到低的顺序排序; 3.依据贪心选择策略,按照单位价值从高到低 的顺序,依次将尽可能多的物品装入背包中。
精品ppt
3
在付款问题每一步的贪心选择中,在不超 过应付款金额的条件下,只选择面值最大 的货币,而不去考虑在后面看来这种选择 是否合理,而且它还不会改变决定:一旦 选出了一张货币,就永远选定。付款问题 的贪心选择策略是尽可能使付出的货币最 快地满足支付要求,其目的是使付出的货 币张数最慢地增加,这正体现了贪心法的 设计思想。
精品ppt
4
贪心算法的设计思路
贪心算法的设计思路是:总是做出 在当前看来最好的选择,即贪心算 法并不是从整体最优考虑,它所做 的选择只是在某种意义上的局部最 优选择。
精品ppt
5
贪心算法框架
Greedy(A,n) { //A为输入集合 solution = Ø; // 解空间初始化为空 for (i = 1; i <=n; i++) { //对每个输入进行检测 x = select(A); // 选择一个输入 if (feasible(solution,x)) // 如果可行 solution = union(solution,x); // 添至解空间 } return solution;
精品ppt
9
0-1背包问题:
给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi, 背包最大承载重量为C。应如何选择装入背包的物品,使 得装入背包中物品的总价值最大?
在选择装入背包的物品时,对每种物品i只有2种选择, 即装入背包或不装入背包。不能将物品i装入背包多次, 也不能只装入部分的物品i。
第4章 贪心算法
4.1 贪心算法的基本要素 4.2 活动安排问题 4.3 最优装载 4.4 单源最短路径 4.5 哈夫曼编码 4.6 多机调度问题
精品ppt
1
贪心算法
顾名思义,贪心算法总是作出在当前看来最好 的选择。也就是说贪心算法并不从整体最优考 虑,它所作出的选择只是在某种意义上的局部 最优选择。当然,希望贪心算法得到的最终结 果也是整体最优的。
精品ppt
7
2.最优子结构性质
当一个问题的最优解包含其子问题的最优解时, 称此问题具有最优子结构性质。问题的最优子 结构性质是该问题可用动态规划算法或贪心算 法求解的关键特征。
精品ppt
8
3.贪心算法与动态规划算法的差异
共同点:求解的问题都具有最优子结构性质 差异点:动态规划算法通常以自底向上的方式 解各子问题,而贪心算法则通常以自顶向下的 方式进行,以迭代的方式作出相继的贪心选择, 每做一次贪心选择就将所求问题简化为规模更 小的子问题。
12
0-1背包问题不具有贪心选择特性
物品1 10公斤,价值60元
单位价值6元
物品2 20公斤,价值100元
单位价值5元
物品3 30公斤,价值120元
单位价值4元
贪心算法
最优解
物品2 物品1
=¥60+100
物品3 物品2
=¥100+120
背包容量:50公斤
精品ppt
13
背包问题具有贪心选择特性
物品1 10公斤,价值60元
}
精品ppt
6
4.1 贪心算法的基本要素
利用贪心算法求解最优解的两个前提条件: 贪心选择性质和最优子结构性质。
1.贪心选择性质
所谓贪心选择性质是指所求问题的整体最优解 可以通过一系列局部最优的选择,即贪心选择 来达到。这是利用贪心算法求解最优解的第一 个基本要素,也是贪心算法与动态规划算法的 主要区别。
if (不能放) breBiblioteka Baiduk;
放入背包中
} if (背包没满&&还有物品) {
装满; }
w[i]重量 v[i]单位价值 x[i]结果
return opt;
}
精品ppt
16
背包问题的贪心算法
typedef struct { float w,v;
float knapsack(float c,float w[], float v[],float x[],int n) { ITEMTYPE d[n];
相关文档
最新文档