第4章-贪心算法课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第4章-贪心算法课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贪心 算法 课件
- 资源描述:
-
1、1第第4 4章章 贪心算法贪心算法 4.1 4.1 贪心算法的基本要素贪心算法的基本要素 4.2 4.2 活动安排问题活动安排问题 4.3 4.3 最优装载最优装载 4.4 4.4 单源最短路径单源最短路径 4.5 4.5 哈夫曼编码哈夫曼编码 4.6 4.6 多机调度问题多机调度问题2贪心算法贪心算法n顾名思义,贪心算法总是作出在当前看来最好顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的虑,它所作出的选择只是在某种意义上的局部局部最优最优选择。当然,希望贪心算法得到的最终结选择。当然
2、,希望贪心算法得到的最终结果也是整体最优的。果也是整体最优的。n虽然贪心算法不能对所有问题都得到整体最优虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。其最终结果却是最优解的很好近似。3例:用贪心法求解付款问题。例:用贪心法求解付款问题。假设有面值为假设有面值为5元、元、2元、元、1元、元、5角、角、2角、角、1角的角的货币,需要找给
3、顾客货币,需要找给顾客4元元6角现金,为使付出的货角现金,为使付出的货币的数量最少,首先选出币的数量最少,首先选出1张面值不超过张面值不超过4元元6角的角的最大面值的货币,即最大面值的货币,即2元,再选出元,再选出1张面值不超过张面值不超过2元元6角的最大面值的货币,即角的最大面值的货币,即2元,再选出元,再选出1张面值张面值不超过不超过6角的最大面值的货币,即角的最大面值的货币,即5角,再选出角,再选出1张张面值不超过面值不超过1角的最大面值的货币,即角的最大面值的货币,即1角,总共角,总共付出付出4张货币。张货币。4 在付款问题每一步的贪心选择中,在不超在付款问题每一步的贪心选择中,在不超
4、过应付款金额的条件下,只选择面值最大过应付款金额的条件下,只选择面值最大的货币,而不去考虑在后面看来这种选择的货币,而不去考虑在后面看来这种选择是否合理,而且它还不会改变决定:一旦是否合理,而且它还不会改变决定:一旦选出了一张货币,就永远选定。付款问题选出了一张货币,就永远选定。付款问题的贪心选择策略是尽可能使付出的货币最的贪心选择策略是尽可能使付出的货币最快地满足支付要求,其目的是使付出的货快地满足支付要求,其目的是使付出的货币张数最慢地增加,这正体现了贪心法的币张数最慢地增加,这正体现了贪心法的设计思想。设计思想。5贪心算法的设计思路贪心算法的设计思路 贪心算法的设计思路是:总是做出贪心算
5、法的设计思路是:总是做出在当前看来最好的选择,即在当前看来最好的选择,即贪心算贪心算法并不是从整体最优考虑法并不是从整体最优考虑,它所做,它所做的选择只是在某种意义上的的选择只是在某种意义上的局部最局部最优选择优选择。6Greedy(A,n)/A为输入集合为输入集合 solution=;/解空间初始化为空解空间初始化为空 for(i=1;i=n;i+)/对每个输入进行检测对每个输入进行检测 x=select(A);/选择一个输入选择一个输入 if(feasible(solution,x)/如果可行如果可行 solution=union(solution,x);/添至解空间添至解空间 retur
6、n solution;74.1 4.1 贪心算法的基本要素贪心算法的基本要素 利用贪心算法求解最优解的两个前提条件利用贪心算法求解最优解的两个前提条件:贪心选择性质贪心选择性质和和最优子结构性质最优子结构性质。1.1.贪心选择性质贪心选择性质 所谓所谓贪心选择性质贪心选择性质是指所求问题的是指所求问题的整体最优解整体最优解可以通过一系列可以通过一系列局部最优局部最优的选择,即贪心选择的选择,即贪心选择来达到。这是利用贪心算法求解最优解的第一来达到。这是利用贪心算法求解最优解的第一个基本要素,也是贪心算法与动态规划算法的个基本要素,也是贪心算法与动态规划算法的主要区别。主要区别。8 2.2.最优
7、子结构性质最优子结构性质 当一个问题的最优解包含其子问题的最优解时,当一个问题的最优解包含其子问题的最优解时,称此问题具有称此问题具有最优子结构性质最优子结构性质。问题的最优子。问题的最优子结构性质是该问题可用动态规划算法或贪心算结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。法求解的关键特征。9 3.3.贪心算法与动态规划算法的差异贪心算法与动态规划算法的差异 共同点共同点:求解的问题都具有最优子结构性质:求解的问题都具有最优子结构性质差异点差异点:动态规划算法通常以动态规划算法通常以自底向上自底向上的方式的方式解各子问题,而贪心算法则通常以解各子问题,而贪心算法则通常以自顶向下自
8、顶向下的的方式进行,以迭代的方式作出相继的贪心选择,方式进行,以迭代的方式作出相继的贪心选择,每做一次贪心选择就将所求问题简化为规模更每做一次贪心选择就将所求问题简化为规模更小的子问题。小的子问题。10 0-10-1背包问题:背包问题:给定给定n n种物品和一个背包。物品种物品和一个背包。物品i i的重量是的重量是W Wi i,其价值为,其价值为V Vi i,背包最大承载重量为背包最大承载重量为C C。应如何选择装入背包的物品,使。应如何选择装入背包的物品,使得装入背包中物品的总价值最大得装入背包中物品的总价值最大?在选择装入背包的物品时,对每种物品在选择装入背包的物品时,对每种物品i i只有
9、只有2 2种选择,种选择,即装入背包或不装入背包。不能将物品即装入背包或不装入背包。不能将物品i i装入背包多装入背包多次,也不能只装入部分的物品次,也不能只装入部分的物品i i。背包问题背包问题:与与0-10-1背包问题类似,所不同的是在选择物品背包问题类似,所不同的是在选择物品i i装入背装入背包时,包时,可以选择物品可以选择物品i i的一部分的一部分,而不一定要全部装入,而不一定要全部装入背包,背包,1in1in。110-1背包与背包问题都具有最优子结构背包与背包问题都具有最优子结构 已知背包最大承载重量为已知背包最大承载重量为C,共有,共有n个物品,个物品,每个物品的重量分别为每个物品
10、的重量分别为Wi(i=1,2,.,n),价值,价值为为Vi(i=1,2,.n)。证明证明:假设第假设第k个物品是最优解中的一个物品个物品是最优解中的一个物品,则,则 从中拿出从中拿出W Wk k对应的物品后所对应的解一定是对应的物品后所对应的解一定是其余其余n-1n-1个物品,装入背包最大承载重量为个物品,装入背包最大承载重量为C-WC-Wk k的最优解,否则与假设矛盾。的最优解,否则与假设矛盾。12l0-10-1背包问题不具有贪心选择性质背包问题不具有贪心选择性质。原因是无法保证能够将背包装满,原因是无法保证能够将背包装满,而所剩空间将会降低总价值。而所剩空间将会降低总价值。l背包问题具有贪
11、心选择性质背包问题具有贪心选择性质。130-10-1背包问题不具有贪心选择特性背包问题不具有贪心选择特性物品物品1 11010公斤,价值公斤,价值6060元元物品物品2 22020公斤,价值公斤,价值100100元元物品物品3 33030公斤,价值公斤,价值120120元元单位价值单位价值6元元单位价值单位价值5元元单位价值单位价值4元元背包容量:背包容量:5050公斤公斤物品物品1 1物品物品2 2=¥60+10060+100贪心算法贪心算法物品物品2 2物品物品3 3=¥100+120100+120最优解最优解14背包问题具有贪心选择特性背包问题具有贪心选择特性物品物品1 11010公斤,
12、价值公斤,价值6060元元物品物品2 22020公斤,价值公斤,价值100100元元物品物品3 33030公斤,价值公斤,价值120120元元单位价值单位价值6元元单位价值单位价值5元元单位价值单位价值4元元背包容量:背包容量:5050公斤公斤物品物品1 1物品物品2 2物品物品3 3=¥60+100+8060+100+80贪心算法贪心算法1010公斤公斤2020公斤公斤2020公斤公斤15用贪心算法解背包问题的基本步骤:用贪心算法解背包问题的基本步骤:1.1.计算每种物品单位重量的价值计算每种物品单位重量的价值V Vi i/W/Wi i;2.2.按照单位重量的价值从高到低的顺序排序;按照单位
13、重量的价值从高到低的顺序排序;3.3.依据贪心选择策略,按照单位价值从高到低依据贪心选择策略,按照单位价值从高到低的顺序,依次将尽可能多的物品装入背包中。的顺序,依次将尽可能多的物品装入背包中。直到背包装满为止。直到背包装满为止。是否可以将物品装入背包的条件是:是否可以将物品装入背包的条件是:有空间有空间16背包问题的贪心算法背包问题的贪心算法void knapsack(float c,float w,float v,float x,int n)将各种物品依其单位重量的价值从高到低排序将各种物品依其单位重量的价值从高到低排序 初始化初始化 xi=0;for(i=0;in;i+)/贪心选择贪心选
14、择 if(不能放不能放)break;放入背包中放入背包中 if(背包没满背包没满&还有物品还有物品)装满装满;return opt;wiwi重量重量vivi单位价值单位价值xixi结果结果17背包问题的贪心算法背包问题的贪心算法float knapsack(float c,float w,float v,float x,int n)ITEMTYPE dn;for(int i=0;i n;i+)di=(wi,vi,i);mergeSort(d);/按照单价高低排序按照单价高低排序 int i;float opt=0;for(i=0;in;i+)xi=0;for(i=0;ic)break;xdi.
15、i=1;opt+=di.v;c-=di.w;if(c0&in)/零碎空间零碎空间 xdi.i=c/di.w;opt+=xdi.i*di.v;return opt;wvi单价10601620100253012034112/3x算法算法knapsackknapsack的的主要计算时间是主要计算时间是将各种物品依其将各种物品依其单位重量的价值单位重量的价值从大到小排序。从大到小排序。因此,算法的计因此,算法的计算时间上界为算时间上界为O O(nlognnlogn)。)。typedef struct float w,v;int i;ITEMTYPE;D:184.2 4.2 活动安排问题活动安排问题 设
16、有设有n n个活动的集合个活动的集合E=1,2,E=1,2,n,n,其中每个活,其中每个活动都要求使用同一资源,如演讲会场等,而动都要求使用同一资源,如演讲会场等,而在在同一时间内只有一个活动能使用这一资源同一时间内只有一个活动能使用这一资源。每。每个活动个活动i i都有一个要求使用该资源的都有一个要求使用该资源的起始时间起始时间s si i和一个结束时间和一个结束时间f fi i,且且s si i f|Aik|+1+|Akj|=|Aij|与假设矛盾!与假设矛盾!21 令子问题令子问题Sij 且且a1为子问题为子问题Sij中具有最中具有最早完成时间的任务,则早完成时间的任务,则a1一定包含在子
17、一定包含在子问题问题Sij中某个任务相互兼容的最大子集中某个任务相互兼容的最大子集中。中。结论:结论:具有贪心选择特性。具有贪心选择特性。(2)活动安排具有贪心选择特性)活动安排具有贪心选择特性22证明:证明:假设子问题假设子问题Sij的最优解为的最优解为Aij,其中的任,其中的任务按照完成时间由小到大排列;且第一个务按照完成时间由小到大排列;且第一个任务为任务为ak。如果。如果ak=a1,成立。,成立。如果如果ak a1,由于,由于a1完成时间较完成时间较ak早,所早,所以,可以将以,可以将ak去掉,换成去掉,换成a1,仍然相容,仍然相容,所含任务数量一样。所含任务数量一样。23活动安排问题
18、举例活动安排问题举例 假设待安排的假设待安排的1111个活动的开始时间和结束时个活动的开始时间和结束时间按结束时间的非减序排列如下:间按结束时间的非减序排列如下:i1234567891011Si130535688212fi4567891011121314若被检查的活动若被检查的活动i i的开始时间的开始时间S Si i小于最近小于最近选择的活动选择的活动j j的结束时间的结束时间f fi i,则不选择活,则不选择活动动i i,否则选择活动,否则选择活动i i加入集合加入集合A A中中24 图中每行相应于算法图中每行相应于算法的一次迭代。的一次迭代。阴影长阴影长条条表示的活动是已选表示的活动是已
19、选入集合入集合A A的活动,而的活动,而空白长条空白长条表示的活动表示的活动是当前正在检查相容是当前正在检查相容性的活动。性的活动。i1234567891011Si130535688212fi456789101112131425isifi11423530645753865976108811981210213111214012345678910 1112 13 14结果:选中的任务为:结果:选中的任务为:1 1、4 4、8 8、111126解活动安排问题的贪心算法解活动安排问题的贪心算法int greedySelector(int s,int f,boolean a,int n)a1=true;
20、/初始化初始化 int j=1,count=1;for(int i=2;i=fj)ai=true;j=i;count+;else ai=false;return count;各活动的起始时间和各活动的起始时间和结束时间存储于数组结束时间存储于数组s s和和f f中且按结束时间中且按结束时间的非减序排列的非减序排列 27 假设输入的活动以其完成时间的假设输入的活动以其完成时间的非减序非减序排列,排列,则算法则算法greedySelectorgreedySelector总选择总选择最早完成时间最早完成时间的相容活动加入集合的相容活动加入集合A A中。该算法的贪心选择中。该算法的贪心选择的意义是的意
21、义是使剩余的可安排时间段极大化使剩余的可安排时间段极大化,以,以便安排尽可能多的相容活动。便安排尽可能多的相容活动。算法算法greedySelectorgreedySelector的效率极高。当输入的的效率极高。当输入的活动已按结束时间的非减序排列,算法只需活动已按结束时间的非减序排列,算法只需O(n)O(n)的时间安排的时间安排n n个活动,使最多的活动能相个活动,使最多的活动能相容地使用公共资源。如果所给出的活动未按容地使用公共资源。如果所给出的活动未按非减序排列,可以用非减序排列,可以用O(nlogn)O(nlogn)的时间重排。的时间重排。284.3 4.3 最优装载最优装载 有一批集
22、装箱要装上一艘载重量为有一批集装箱要装上一艘载重量为c c的的轮船。其中,集装箱轮船。其中,集装箱i i的重量为的重量为W Wi i。最。最优装载问题要求确定优装载问题要求确定在装载体积不受限在装载体积不受限制的情况下制的情况下,将,将尽可能多尽可能多的集装箱装上的集装箱装上轮船。轮船。29 最优装载问题可用贪心算法求解。采用重最优装载问题可用贪心算法求解。采用重量最轻者先装的贪心选择策略,可产生最量最轻者先装的贪心选择策略,可产生最优装载问题的最优解。优装载问题的最优解。maxniix1niiiw xc1,ixin 0 1 130(1)(1)最优子结构的性质最优子结构的性质 设设 (x(x1
23、 1,x,x2 2,.,x,.,xn n)是最优装载问题满足贪是最优装载问题满足贪心选择的最优解,则可知,心选择的最优解,则可知,x x1 1=1=1,且,且(x(x2 2,.,x,.,xn n)是轮船重量为是轮船重量为c-wc-w1 1,待待装船集装箱为装船集装箱为2,3,.,n2,3,.,n时相应最优装载时相应最优装载问题的最优解。问题的最优解。利用反证法证明。利用反证法证明。31(2)(2)贪心选择性质贪心选择性质 设集装箱依重量从小到大排序,设集装箱依重量从小到大排序,(x(x1 1,x,x2 2,.,x,.,xn n)是最优装载问题的一个最优解。设是最优装载问题的一个最优解。设x:(
24、0 x:(0,0 0,1 1,1 1,1 1,0 0,0 0,0 0)k=3k=3y:(y:(1 1,0 0,0 0,1 1,1 1,0 0,0 0,0 0)nnniikiiiiiiiw ywww xw xc11111|min1inixik32最优装载贪心算法最优装载贪心算法float loading(float c,float w,int x,int n)ITREMTYPE dn;for(int i=0;i n;i+)di=(wi,i);mergeSort(d);/排序排序 O(nlogn)float opt=0;for(int i=0;i n;i+)xi=0;for(int i=0;i n
25、&di.w=c;i+)/贪心选择贪心选择 xdi.i=1;opt+=di.w;c-=di.w;return opt;typedef struct float w;int i;ITEMTYPE;33344.4 4.4 单源最短路径单源最短路径问题提出问题提出:给定带权有向图给定带权有向图G=(V,E)G=(V,E),其中每,其中每条边的权是非负实数。另外,还给定条边的权是非负实数。另外,还给定V V中的一中的一个顶点,称为个顶点,称为源源。现在要计算从源到所有其他。现在要计算从源到所有其他各顶点的各顶点的最短路经长度最短路经长度。这里路径长度是指路。这里路径长度是指路上各边权之和。这个问题通常称
展开阅读全文