第4章 贪心算法ppt课件

合集下载

第4章 贪心算法 计算机算法设计与分析(第3版)教学PPT课件

第4章 贪心算法 计算机算法设计与分析(第3版)教学PPT课件
11
4.2 贪心算法的基本要素 --贪心选择性质
贪心选择性质:指所求问题的整体最优解可以通过 一系列局部最优的选择,即贪心选择来达到。
与动态规划算法的区别: (1)是否依赖子问题 的解;(2)求解过程(自下向上还是自上向下)
判断问题是否所具此性质:对于一个具体问题, 要确定它是否具有贪心选择性质,必须证明每一步所作 的贪心选择最终导致问题的整体最优解。
12
4.2 贪心算法的基本要素 --最优子结构性质
当一个问题的最优解包含其子问题 的最优解时,称此问题具有最优子结构 性质。
13
4.2 贪心算法的基本要素
贪心算法与动态规划算法的差异
相同点:最优子结构性质 不同点:通过组合优化问题实例说明二者
差别。
14
4.2 贪心算法的基本要素
0-1背包问题:
第4章 贪心算法
1
• 学习要点 • 理解贪心算法的概念。 • 掌握贪心算法的基本要素 • (1)最优子结构性质 • (2)贪心选择性质 • 理解贪心算法与动态规划算法的差异 • 通过应用范例学习贪心设计策略。 • (1)活动安排问题; • (2)最优装载问题; • (3)单源最短路径; • (4)多机调度问题。
问题:要在所给的活动集合中选出最大的相容活动 子集合。
5
4.1 活动安排问题
下面给出解活动安排问题的贪心算法:
template<class Type>
void GreedySelector(int n, Type s[], Type f[], bool A[])
{ A[1]=true;
各活动的起始时间和结 束时间存储于数组s和f
问题描述
给定n种物品和一个背包。物品i的重量是Wi,其价值 为Vi,背包的容量为C。应如何选择装入背包的物品,使 得装入背包中物品的总价值最大?

人工智能算法Python语言版PPT第4章贪心法

人工智能算法Python语言版PPT第4章贪心法
- 任一字符的代码(0,1序列)都不是其他字符代码的前缀——完全二叉树T
- 满足前缀约束,则编码无二义性
- 平均码长: B (T ) f (c )dT (c )
cC
字符c出现的频率为f(c),
在T中的深度为dT(c)
哈夫曼编码 (2)
哈夫曼编码( Huffman encoding )算法为贪心法
应用背景和动机 (1)
背景:主播带货已成为了一种新的产品推销
手段。为响应国家脱贫攻坚和乡村振兴战略,
边远山区的地方政府也采取主播带货的方式
推广农产品。
例如:假设一批农产品要被想被大众熟知,则其影响因子需要达到1.3,
现有3类主播,其中A类主播可帮助农产品提高0.4的影响因子,B类主
播可帮助农产品提高0.3的影响因子,C类主播可帮助农产品提高0.1的
E=11
F=1011
哈夫曼编码 (3)
哈夫曼编码算法
输入——C:n个元素及其权值的集合
输出——:哈夫曼树
步骤:

//对集合C按照元素权值初始化最小堆优先队列
. ℎ ← 0,. ← ∅, . ℎ ← ∅ //初始化哈夫曼树

For = 1 To − 1 Do
不仅要找到答案,且要找到最佳答案
贪心算法(Greedy algorithm)
有时对优化问题能有较好的解决方案
贪心算法分阶段执行,每一个阶段:
-
当考虑做何种选择时,只考虑对当前问题最佳的选择,而不考虑其
子问题的结果
-
希望通过每一个步骤的局部最优(Local optimum)而得到全局最优
(Global optimum)
贪心算法的基本思想

简单的贪心算法pptPPT课件

简单的贪心算法pptPPT课件

问题的整体最优解 中包含着它子问题 的最优解
【常见应用】背包问题,最小生成树,最短路径,作业调度等等 【算法优点】求解速度快,时间复杂性有较低的阶. 【算法缺点】需证明是最优解.
02.08.2021
编辑版pppt
9
‫ﻻ‬常见应用
1、活动安排问题
【问题陈述】设有n个活动E={1,2,…,n}要使用同一资源,同一时间内 只允许一个活动使用该资源. 设活动i的起止时间区间[si, fi) ,如果选
02.08.2021
编辑版pppt
10
‫ﻻ‬常见应用
活动安排问题贪心算法: void GreedySelector(int n, Type s[], Type f[], bool A[]) {
A[1]=true; int j=1; for (int i=2;i<=n;i++) {
if (s[i]>=f[j]) { A[i]=true; j=i; }
else A[i]=false; } }
02.08.2021
编辑版pppt
11
‫ﻻ‬常见应用
2、多机调度问题
多机调度问题要求给出一种作业调度方案,使所给的n 个作业在尽可能短的时间内由m台机器加工处理完成。
约定,每个作业均可在任何一台机器上加工处理,但未完 工前不允许中断处理。作业不能拆分成更小的子作业。
体上考虑并不一定是最优解;
(2)贪心算法只能用来求某些最大或最小解的 问题;
(3)贪心算法只能确定某些问题的可行性范围

因此,贪心算法具有局限性,并不是总能得到最优
解。 02.08.2021
编辑版pppt
16
谢谢观 看!!!
02.08.2021

中科院陈玉福算法课件ch4ppt

中科院陈玉福算法课件ch4ppt
第四章 贪心算法
算法基本思想 调度问题 最小生成树问题 单点源最小路径问题 Huffman编码
贪心算法的基本思想
找零钱:给孩子找回87分硬币,现有硬币规格50分、10分、 5分、2分、1分。 50+3*10+5+2=87 一般方法:尽量找面值大的硬币。 装箱问题:有物品n件,重量分别是 w1,…,wn ; 有箱子m个: B1,…,Bm,每个的容量都是C(C≥wi)。设计装箱方法,使得 所用箱子最少。 1. NF(Next Fit)方法:前面的箱子不能再装了,才开始装下一 个箱子。 2. FF(First Fit)方法:每个物品都选择装进第一个可装的箱子 贪心算法的基本思想: 在每一步决策中总是作出在当前看来是最好的选择 贪心准则,局部最优。
=1≤iΒιβλιοθήκη ≤n∑ pyi i
贪心算法抽象控制流程
proc Greedy(A, n) // A[1:n]代表输入 solution={}; //解初始化为空集 for i to n do x:=Select(A); if Feasible(solution, x) then solution:=Union(solution, x); end{if} end{for} return(solution); end{Greedy} Select(A)是按照贪心 准则选取A中的输入 项; Feasible(solution, x)是 判断已知的解的部分 solution与新选取的x 的结合是否是可行 解。 Union(solution, x)x与 已经选到的部分 solution结合成解的更 大部分
GreedyJob获得最优解
假设贪心算法所选择的作业集J不是最优解,则一定有相容作 业集I,其产生更大的效益值。假定I是具有最大效益值的相容作 业集中使得|I∩J|最大者,往证 I=J。 反证法:若I=J 不成立,则这两个作业集合之间没有包含关 系。这是因为算法GreedyJob的特性和假定I 产生的效益值比J的 效益值更大。假设a是J\I中具有最大效益的作业,即J中比a具有 更大效益的作业(如果有的话)都应该在 I 中。如果作业 b∈I\J 且 pb>pa,那么由算法中对J中作业的选取办法(相容性要求),J中 至少有 fb个效益值≥pb的作业,其期限值≤ fb。这些作业一定在 I 中,因而 I 中至少有个fb+1作业,其期限值≤ fb ,这与 I 的相容性 矛盾。所以,I\J中事件的效益值均不超过pa。 称区间[k-1,k]为时间片k,相容作业集 I 的一个调度表就是指定 I 中各个作业的加工时间片。如果 I 有一个调度表 S 将时刻 fa前 的时间片均安排给I∩J中的作业,且I\J中最早被安排的是作业b, 在时间片k上,则k>fa。

算法设计与分析第04章 贪心算法PPT课件

算法设计与分析第04章 贪心算法PPT课件
9
4.1 活动安排问题
若被检查的活动i的开始时间Si小于最近选择的活动j 的结束时间fi,则不选择活动i,否则选择活动i加入集 合A中。
贪心算法并不总能求得问题的整体最优解。但对 于活动安排问题,贪心算法greedySelector却总能求 得的整体最优解,即它最终所确定的相容活动集合A的 规模最大。这个结论可以用数学归纳法证明。
•}
6
4.1 活动安排问题
由于输入的活动以其完成时间的非减序排列,所 以算法greedySelector每次总是选择具有最早完成 时间的相容活动加入集合A中。直观上,按这种方法 选择相容活动为未安排活动留下尽可能多的时间。也 就是说,该算法的贪心选择的意义是使剩余的可安排 时间段极大化,以便安排尽可能多的相容活动。
算法greedySelector的效率极高。当输入的活 动已按结束时间的非减序排列,算法只需O(n)的时间 安排n个活动,使最多的活动能相容地使用公共资源。 如果所给出的活动未按非减序排列,可以用O(nlogn) 的时间重排。
7
4.1 活动安排问题
例:设待安排的11个活动的开始时间和结束时间按结 束时间的非减序排列如下:
13
4.2 贪心算法的基本要素
3.贪心算法与动态规划算法的差异
贪心算法和动态规划算法都要求问题具有最优子结构 性质,这是2类算法的一个共同点。但是,对于具有最 优子结构的问题应该选用贪心算法还是动态规划算法 求解?是否能用动态规划算法求解的问题也能用贪心算 法求解?下面研究2个经典的组合优化问题,并以此说 明贪心算法与动态规划算法的主要差别。
11
4.2 贪心算法的基本要素
1.贪心选择性质
所谓贪心选择性质是指所求问题的整体最优解可以通 过一系列局部最优的选择,即贪心选择来达到。这是 贪心算法可行的第一个基本要素,也是贪心算法与动 态规划算法的主要区别。

第4章-贪心法讲解

第4章-贪心法讲解
8
算法正确性证明(续)
归纳步骤:假设命题对 k 为真, 证明对 k+1 也为真. 算法执行到第 k 步, 选择了活动 i1=1, i2, …, ik, 根据归纳假设 存在最优解 A 包含 i1= 1, i2, … , ik , A中剩下的活动选自集合 S’={ i | iS, si fk}, 且
定了算法的成败. (4)贪心法必须进行正确性证明 贪心法的优势: 算法简单,时间和空间复杂性低
10
4.2 贪心法的正确性证明
数学归纳法
1. 叙述一个描述算法正确性的命题P(n),n为算法步数或者
问题规模
2. 归纳基础:P(1) 或 P(n0)为真, n0为某个自然数
3. 归纳步骤:P(k) P(k+1)
第一数学归纳法
k(k<n)P(k) P(n) 第二数学归纳法
交换论证 1. 分析算法的解的结构特征 2. 从一个最优解逐步进行结构变换(替换成分、交换次序等)
得到一个新的解(结构上与贪心算法的解更接近) 3. 证明:上述变换最终得到算法的解,且变换在有限步结
束,每步变换都保持解的最优性不降低.
3
4.1贪心法的设计思想
活动选择问题
输入:S ={1, 2, … , n}为n 项活动的集合,si, fi 分别为活动 i 的开始和结束时间,活动 i 与 j 相容 si fj 或 sj fi . 求:最大的两两相容的活动集 A
实例
i 1 2 3 4 5 6 7 8 9 10 si 1 3 2 5 4 5 6 8 8 2 fi 4 5 6 7 9 9 10 11 12 13
4. for i2 to n do
5. if si fj //判断相容性 6. then A A{i}

贪心算法讲义

贪心算法讲义

float p[1..n], w[1..n], x[1..n], M, rc;
integer i, n; x:= 0; // 将解向量初始化为零
//w[1..n],它们元素的排列 //顺序满p[i]/w[i]≥p[i+1]/w[i+1] //M是背包容量,x[1..n]是解向量
rc:= M; // 背包的剩余容量初始化为M
作业调度问题
单机作业调度问题的贪心算法
将上述算法找到的作业集按作业期限升序排列,就产生一 个作业调度。
算法的复杂度分析
J {i}的相容性判断最坏|J|次,|J|最大i-1。所以 T(n)=1+2+…+n-1=O(n2)
例子: 设n=7,
(p1, p2,… ,pn)=(35,30,25,20,15,10,5), (d1, d2,… ,dn)=(4,2,4,3,4,8,3) 算法GreedyJob的执行过程 : 作业 1 ;2, 1; 2, 1, 3; 2, 4, 1, 3; 2, 4, 1, 3 , 6; 期限 4; 2, 4; 2,4, 4; 2, 3, 4, 4; 2, 3, 4, 4, 8;
带期限的单机作业安排问题
已知n项作业 E={1, 2, … ,n}要求使用同台机器完成, 而且每项作业需要的时间都是1。第k项作业要求在时 刻2, d…k之, n前。完成, 而且完成这项作业将获得效益pk,k=1,
作业集E的子集称为相容的如果其中的作业可以被安 排由一台机器完成。
带限期单机作业安排问题就是要在所给的作业集合中 选出总效益值最大的相容子集。
许多NP难组合优化问题,目前仍未找到有效的算法, 贪心策略常用于设计这些问题的近似算法。
贪心算法的基本思想

贪心算法PPT课件

贪心算法PPT课件
且有||B’-{k}||>||B-{1}||,这与假设2°矛盾。 ▌
安排方案
f1
B
安排方案
fk
B’
…… 共j个活动
可能 相同 不存在
……
可能
如果 B’包 含这 个活, 则B 一定 包含
9
(2) 时间复杂度分析: 因为排序过程可以在O(nlogn)时间内完成,而求最优活动子 集的过程只需O(n)次比较,因此这个算法的时间复杂度为 O(nlogn)。 (3) 贪心策略设计算法的一般特点
·选Si最小的,这样可以增大场地的利用率; ·选fi最小的,使得下一个活动可以更早开始。
由于活动的占用时间长度没有限制,因此后一选择更合理。
6
为了在每一次选择时取当前可以安排的活动中最早结束的活动,应首先把 n项活动按结束时间的先后进行升序排序。即,使f1≤f2≤…≤fn,然后在Si值 不小于当前时刻的活动中取fi值最小者。 算法:
·算法的设计比较简单; ·算法一般比较快速; ·算法的正确性一般不明显,需要论证;如果正确性不能保 证,那么它往往可以得到近似最优解。
10
5.2 背包(Knapsack)问题
1. 问题描述
已知:n个(应为n种)物体{1,2,…,n}与一个背包。物体i的重量 (或体积)为Wi>0,价值为Pi>0(i=1,2,…,n),背包容量为 M>0。
计算机算法 ——设计与分析导论
刘璟
1
Chapter 5. 贪心(Greedy)技术
❖ 5.1 贪心策略的思想 ❖ 5.2 背包(Knapsack)问题 ❖ 5.3 Huffman编码 ❖ 5.4 多机调度问题的近似解法 ❖ 5.5 单源最短路径的Dijkstra算法

第4章贪心方法

第4章贪心方法
其次考虑物品2和3。就Δ M=2而言有,只能选择物品2或3的一部分装入背包。 物品2: 若 x2=2/15, 则 p2 x2=16/5=3.1 物品3: 若 x3=2/10, 则 p3 x3=3 为使背包的效益有最大的增量,应选择物品2的2/15装包,即
x2=2/15 最后,背包装满, Δ M=0,故物品3将不能装入背包,x3=0 。
位,还剩余空间Δ M=5。同时,背包获得p2=24的效益增量。 其次考虑物品1和3。此时,应选择物品3,且就Δ M=5而言有,也 只能放入物品3的一部分到背包中 。即
x3=5/10=1/2 最后,背包装满Δ M=0,故物品1将不能装入背包,x1=0 。
背包最终可以获得效益值= x1 p1 +x2 p2+x3 p3 = 31.5 (最优解)
即,新的标准是:以容量作为度量标准 该度量标准下的处理规则: ● 按物品重量的非降次序将物品装入到背包; ● 如果正在考虑的物品放不进去,则只取其一部分装 满背包;
2019/12/4
实例分析(例4.1)
(pபைடு நூலகம்,p2,p3) = (25,24,15), (w1,w2,w3) = (18,15,10)
② 设j是使xi≠1的最小下标。由算法可知,

xi=1 1≤i<j,

0≤xj <1

xi=0 j<i≤n
若X不是问题的最优解,则必定存在一个可行解 Y=(y1, y2, …,
yn),使得:
piyi pixi
且应有:
wiyi M
2019/12/4
设k是使得yk≠ xk的最小下标,则有yk< xk:
分析: ① 装入背包的总重量不能超过M
② 如果所有物品的总重量不超过M,即wixi ≤M,则把所有的物

贪心算法 PPT课件

贪心算法 PPT课件
第4章 贪心算法
1


学习要点
理解贪心算法的概念。 掌握贪心算法的基本要素 (1)最优子结构性质
(2)贪心选择性质
理解贪心算法与动态规划算法的差异 理解贪心算法的一般理论 通过应用范例学习贪心设计策略。 (1)活动安排问题; (2)最优装载问题; (3)哈夫曼编码; (4)单源最短路径; (5)最小生成树; (6)多机调度问题。
15
4.2 贪心算法的基本要素
1、贪心选择性质
所谓贪心选择性质是指所求问题的整体最优解可以 通过一系列局部最优的选择,即贪心选择来达到。这是 贪心算法可行的第一个基本要素,也是贪心算法与动态 规划算法的主要区别。 动态规划算法通常以自底向上的方式解各子问题, 而贪心算法则通常以自顶向下的方式进行,以迭代的方 式作出相继的贪心选择,每作一次贪心选择就将所求问 题简化为规模更小的子问题。
7
4.1 活动安排问题
活动安排问题就是要在所给的活动集合 中选出最大的相容活动子集合,是可以用 贪心算法有效求解的很好例子。该问题要求 高效地安排一系列争用某一公共资源的活动。 贪心算法提供了一个简单、漂亮的方法使得 尽可能多的活动能兼容地使用公共资源。
8
4.1 活动安排问题
设有n个活动的集合E={1,2,…,n},其中每个活 动都要求使用同一资源,而在同一时间内只有一个活 动能使用这一资源。每个活动i都有一个要求使用该 资源的起始时间si和一个结束时间fi,且si <fi 。如 果选择了活动i,则它在半开时间区间[si, fi)内占 用资源。
{ A[1]=true; int j=1; for (int i=2;i<=n;i++) {

算法-第4章贪心法-PPT课件

算法-第4章贪心法-PPT课件
f i A
i , j A , i j , f ( i ) t f ( j ) or f ( j ) t f ( i ) i j
12
实例
A={1, 2, 3, 4, 5}, T=<5, 8, 4, 10, 3>, D=<10, 12, 15, 11, 20> 调度1: f1(1)=0, f1(2)=5, f1(3)=13, f1(4)=17, f1(5)=27 各任务延迟:0, 1, 2, 16, 10; 最大延迟:16 5 1 2 13 3 17 4 27 5 30
18
i j
f2(j)=s f2(i)=s+tj
delay(f’,i)=s+tj+ti- di <delya(f,j)r delay(f, j)=s+ti+tj-dj
4.3 得不到最优解的处理方法
讨论对于哪些输入贪心法能得到最优解:输入条件 讨论贪心法的解最坏情况下与最优解的误差(见第8章)
例4.4 找零钱问题 设有 n 种零钱, 重量分别为w1, w2, ... , wn, 价值分别为 v1=1, v2, ... , vn. 需要付的总钱数是 Y .不妨设币值和钱数都为 正整数. 问:如何付钱使得所付钱的总重最轻?
设计思想:按完成时间从早到晚安排任务,没有空闲
15
交换论证:正确性证明
算法的解的性质: (1) 没有空闲时间, 没有逆序. (2) 逆序 (i, j): f(i) < f(j) 且 di > dj 引理4.1 所有没有逆序、没有空闲时间的调度具有相同的 最大延迟. 证: 设 f 没有逆序,在 f 中具有相同完成时间的客户i1, i2, … , ik 必被连续安排. 在这k个客户中最大延迟是最后一个客 户,被延迟的时间是 k
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if (不能放) break;
放入背包中
} 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];
假设第k个物品是最优解中的一个物品,则 从中拿出Wk对应的物品后所对应的解一定 是其余n-1个物品,装入背包最大承载重量 为C-Wk的最优解,否则与假设矛盾。
精品ppt
11
0-1背包问题不具有贪心选择性质。 原因是无法保证能够将背包装满, 而所剩空间将会降低总价值。
背包问题具有贪心选择性质。
精品ppt
背包问题:
与0-1背包问题类似,所不同的是在选择物品i装入背 包时,可以选择物品i的一部分,而不一定要全部装入 背包,1≤i≤n。
精品ppt
10
0-1背包与背包问题都具有最优子结构
已知背包最大承载重量为C,共有n个物品, 每个物品的重量分别为Wi(i=1,2,...,n),价值 为Vi(i=1,2,...n)。 证明:
精品ppt
7
2.最优子结构性质
当一个问题的最优解包含其子问题的最优解时, 称此问题具有最优子结构性质。问题的最优子 结构性质是该问题可用动态规划算法或贪心算 法求解的关键特征。
精品ppt
8
3.贪心算法与动态规划算法的差异
共同点:求解的问题都具有最优子结构性质 差异点:动态规划算法通常以自底向上的方式 解各子问题,而贪心算法则通常以自顶向下的 方式进行,以迭代的方式作出相继的贪心选择, 每做一次贪心选择就将所求问题简化为规模更 小的子问题。
单位价值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
9
0-1背包问题:
给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi, 背包最大承载重量为C。应如何选择装入背包的物品,使 得装入背包中物品的总价值最大?
在选择装入背包的物品时,对每种物品i只有2种选择, 即装入背包或不装入背包。不能将物品i装入背包多次, 也不能只装入部分的物品i。
精品ppt
3
在付款问题每一步的贪心选择中,在不超 过应付款金额的条件下,只选择面值最大 的货币,而不去考虑在后面看来这种选择 是否合理,而且它还不会改变决定:一旦 选出了一张货币,就永远选定。付款问题 的贪心选择策略是尽可能使付出的货币最 快地满足支付要求,其目的是使付出的货 币张数最慢地增加,这正体现了贪心法的 设计思想。
虽然贪心算法不能对所有问题都得到整体最优 解,但对许多问题它能产生整体最优解。如单 源最短路经问题,最小生成树问题等。在一些 情况下,即使贪心算法不能得到整体最优解, 其最终结果却是最优解的很好近似。
精品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张货币。
第4章 贪心算法
4.1 贪心算法的基本要素 4.2 活动安排问题 4.3 最优装载 4.4 单源最短路径 4.5 哈夫曼编码 4.6 多机调度问题
精品ppt
1
贪心算法
顾名思义,贪心算法总是作出在当前看来最好 的选择。也就是说贪心算法并不从整体最优考 虑,它所作出的选择只是在某种意义上的局部 最优选择。当然,希望贪心算法得到的最终结 果也是整体最优的。
Hale Waihona Puke 120-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.贪心选择性质
所谓贪心选择性质是指所求问题的整体最优解 可以通过一系列局部最优的选择,即贪心选择 来达到。这是利用贪心算法求解最优解的第一 个基本要素,也是贪心算法与动态规划算法的 主要区别。
直到背包装满为止。 是否可以将物品装入背包的条件是: 有空间
精品ppt
15
背包问题的贪心算法
void knapsack(float c,float w[], float v[],float x[],int n) { 将各种物品依其单位重量的价值从高到低排序 初始化 x[i]=0;
for (i=0;i<n;i++) { //贪心选择
精品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;
相关文档
最新文档