第4章贪心算法解读

合集下载

贪心算法的基本原理

贪心算法的基本原理

贪心算法的基本原理贪心算法(Greedy Algorithm)是一种常用的算法思想,它在求解最优化问题时通常能够得到较好的近似解。

贪心算法的基本原理是:每一步都选择当前状态下的最优解,从而希望最终能够得到全局最优解。

在实际应用中,贪心算法常常用于解决一些最优化问题,如最小生成树、最短路径、任务调度等。

一、贪心算法的特点贪心算法具有以下特点:1. 简单:贪心算法通常比较简单,易于实现和理解。

2. 高效:贪心算法的时间复杂度通常较低,能够在较短的时间内得到结果。

3. 局部最优:每一步都选择当前状态下的最优解,但不能保证最终能够得到全局最优解。

4. 适用范围:贪心算法适用于一些特定类型的问题,如无后效性、最优子结构等。

二、贪心算法的基本原理贪心算法的基本原理可以概括为以下几个步骤:1. 初始状态:确定问题的初始状态,定义问题的输入和输出。

2. 状态转移:根据当前状态,选择局部最优解,并更新状态。

3. 筛选解:判断当前状态下是否满足问题的约束条件,若满足则保留该解,否则舍弃。

4. 终止条件:重复以上步骤,直至满足终止条件,得到最终解。

三、贪心算法的应用举例1. 找零钱:假设有 25、10、5、1 四种面额的硬币,需要找零 41 元,如何使得找零的硬币数量最少?贪心算法可以先选择面额最大的硬币,然后逐步选择面额较小的硬币,直至找零完毕。

2. 区间调度:给定一组区间,如何选择最多的互不重叠的区间?贪心算法可以先按照区间的结束时间排序,然后依次选择结束时间最早的区间,直至所有区间都被覆盖。

3. 最小生成树:在一个连通的带权无向图中,如何选择边使得生成树的权值最小?贪心算法可以按照边的权值从小到大排序,然后依次选择权值最小且不构成环的边,直至所有顶点都被连接。

四、贪心算法的优缺点1. 优点:贪心算法简单高效,适用于一些特定类型的问题,能够在较短的时间内得到近似最优解。

2. 缺点:贪心算法不能保证一定能够得到全局最优解,可能会出现局部最优解不是全局最优解的情况。

贪心算法在优化问题中的运用

贪心算法在优化问题中的运用

贪心算法在优化问题中的运用贪心算法(Greedy Algorithm)是一种常用的算法思想,它在解决一些优化问题时具有很高的效率和实用性。

贪心算法的核心思想是每一步都选择当前状态下最优的解决方案,以期望最终能够得到全局最优解。

在实际应用中,贪心算法常常被用来解决一些最优化问题,如最短路径问题、背包问题、任务调度等。

本文将介绍贪心算法在优化问题中的运用,并通过具体案例来说明其应用场景和解决方法。

一、贪心算法的基本原理贪心算法是一种在每一步选择当前状态下最优解决方案的算法思想。

它与动态规划不同,贪心算法并不会保存之前的计算结果,而是根据当前状态做出最优选择。

贪心算法的优势在于简单、高效,适用于一些特定类型的问题。

贪心算法的基本原理可以总结为以下几点:1. 每一步都选择当前状态下的最优解决方案;2. 不考虑未来的结果,只关注当前状态的最优选择;3. 最终期望通过每一步的最优选择达到全局最优解。

二、贪心算法在优化问题中的应用1. 最短路径问题最短路径问题是图论中的经典问题,贪心算法可以用来解决一些简单的最短路径问题。

例如,在无权图中,从起点到终点的最短路径可以通过贪心算法来求解,每次选择距离最近的节点作为下一步的目标节点,直到到达终点为止。

2. 背包问题背包问题是一个经典的优化问题,贪心算法可以用来解决一些特定类型的背包问题。

例如,在分数背包问题中,每种物品可以取任意比例,贪心算法可以按照单位价值最高的顺序选择物品放入背包,直到背包装满为止。

3. 任务调度问题任务调度问题是一个常见的优化问题,贪心算法可以用来解决一些简单的任务调度问题。

例如,在单处理器任务调度中,每个任务有一个开始时间和结束时间,贪心算法可以按照结束时间的先后顺序对任务进行调度,以最大化处理器的利用率。

三、案例分析:活动选择问题活动选择问题是一个经典的优化问题,通过贪心算法可以高效地解决。

问题描述如下:假设有n个活动,每个活动都有一个开始时间和结束时间,活动之间不能交叉进行,问如何安排活动才能使参加的活动数量最多。

贪心算法(陈鹏)

贪心算法(陈鹏)

— 20 —
江苏省青少年信息学奥林匹克竞赛委员会 | 版权所有
© Copyright JSOI 2010
JSOI2010江苏省青少年信息学奥林匹克集训队(夏令营)
2、贪心算法的特点
[贪心算法解题的一般步骤] 1、设计数据找规律 2、进行贪心猜想 3、正确性证明(严格证明和一般证明) ·严格证明:数学归纳和反证法 ·一般证明:列举反例 4、程序实现
— 12 —
江苏省青少年信息学奥林匹克竞赛委员会 | 版权所有
© Copyright JSOI 2010
JSOI201——纪念品分组(NOIP2007普及组)
[输入输出样例] 输入: 输出: 100 6 9 90 20 20 30 50 60 70 80 90
若无法证明, 此步骤可缺省
— 21 —
江苏省青少年信息学奥林匹克竞赛委员会 | 版权所有
© Copyright JSOI 2010
JSOI2010江苏省青少年信息学奥林匹克集训队(夏令营)
2、贪心算法的特点
[典型的贪心算法简介] 贪心策略在树和图论中有着极其重要的应用,Prim、 Kruskal、Huffman等体现“贪心”思想的算法更是广泛地 应用于树与图的处理。 下面介绍一种利用“贪心”思想的算法——哈夫曼 (Huffman)树。
—7—
江苏省青少年信息学奥林匹克竞赛委员会 | 版权所有
© Copyright JSOI 2010
JSOI2010江苏省青少年信息学奥林匹克集训队(夏令营)
1、贪心概念
[求解这类问题的方法] 1、搜索 最原始的方法是搜索(穷举)法。当然,为了尽快搜 索出解,我们往往会利用限制条件进行可行性判断剪枝, 或利用目标函数的上界(或下界)进行分枝定界。 2、动态规划 第二种解决此类问题的方法是动态规划。当然,使用 动态规划必须要满足一些条件,如无后效性和最优子结构 等等。

4-贪心法

4-贪心法

应用实例
活动安排问题—算法设计与分析
template<class Type> 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; } }
贪心法的正确性问题
针对具体问题不同,贪心策略的选择可能有多种 ,如何选择合适的贪心策略并证明该策略的正确 性是贪心算法设计中的一个关键问题。 一般可以通过对算法步数的归纳或通过对问题规 模的归纳来证明贪心法的正确性。
应用实例
活动安排问题
有n个活动申请使用同一个礼堂,每项活动有一个开始时间和一 个截止时间,如果任何两个活动不能同时举行,问如何选择这 些活动,从而使得被安排的活动数量达到最多? 设S={1, 2, …, n}为活动的集合,si和fi分别为活动i的开始和截止 时间,i=1, 2, …, n。定义 活动i与j相容:si ≥ fj或sj ≥fi, i≠j 求S最大的两两相容的活动子集。 蛮力法 动态规划方法
若硬币的面值改为一角一分、五分和一分,要找给顾客的 是一角五分,情况如何?
贪心算法的基本思想
顾名思义,贪心算法总是作出在当前看来最好的 选择。也就是说贪心算法并不从整体最优考虑, 它所作出的选择只是在某种意义上的局部最优选 择。 贪心算法不能对所有问题都得到整体最优解,但 对许多问题它能产生整体最优解。 在一些情况下,即使贪心算法不能得到整体最优 解,其最终结果却是最优解的很好近似。
4—贪心法 Greedy Approach

贪心算法的概念和适用条件

贪心算法的概念和适用条件

贪心算法的概念和适用条件什么是贪心算法?贪心算法(Greedy Algorithm)是一种以局部最优解为导向的算法思想,通过每一步选择当前状态下的最佳操作来达到整体最优解的目标。

贪心算法的核心思想是每次都做出当前看来最优的选择,以期望能够达到整体的最优解。

贪心算法通常用于一些问题中,即每一步的选择只依赖于当前状态,而不考虑将来可能出现的情况。

贪心算法的适用条件:1. 贪心选择性质:贪心算法每一步都选择一个当前的最优解,此处的“最优”指的是局部最优。

这种最优选择可以确保问题能够被拆解,并且进行下一步求解。

2. 最优子结构性质:当问题的整体最优解能够通过局部最优解得到时,可以采用贪心算法求解。

这种情况下,问题的最优解可以由子问题的最优解推导出来。

3. 无后效性:贪心算法选择某一步操作时,只考虑当前状态,不会改变以前的操作,并且不关心未来的操作。

这种无后效性使得贪心算法在实际应用中操作简单、效率高。

贪心算法的基本步骤:1. 确定问题的局部最优解:贪心算法的核心是每一步都选择在当前情况下的最优解。

因此,需要确定问题如何拆解以及如何进行局部最优选择。

2. 定义问题的子问题:根据问题的最优子结构性质,将问题拆解为较小规模的子问题。

子问题应该是原问题的一个更小、更简单的实例。

3. 定义贪心选择策略:根据问题的特性,确定当前步骤下的最优选择策略。

这个选择应该是局部最优的,可以在不考虑子问题和整体未来状态的情况下得出。

4. 重复执行步骤2和3,直至求解出全局最优解。

贪心算法的优缺点:贪心算法具有简单易懂、快速高效的特点,适用于许多实际问题。

它可以避免穷举所有可能性,节省了计算时间。

此外,贪心算法常常能够找到近似最优解,尽管不一定能够保证全局最优解。

在实际问题中,近似最优解也往往可以满足实际需求。

然而,贪心算法并非适用于所有问题。

由于贪心算法只考虑当前状态的最优选择,而不考虑未来的影响,因此可能会导致局部最优解与全局最优解不一致。

算法设计与分析第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-2贪心-贪心选择性质

4-2贪心-贪心选择性质

贪心选择性质。

贪心算法的基本要素是:指所求问题的整体最优解可以通过一系列局部最优解的选择,即贪心选择来达到。

贪心选择性质每次选取当前最优解,因此它依赖以往的选择,而不依赖于将来的选择。

贪心选择通常以自顶向下的方式进行,每次贪心选择就将原问题转化为规模更小的子问题。

贪心算法1、首先证明存在问题的一个整体最优解必定包含了第一个贪心选择。

2、然后证明在做了贪心选择后,原问题简化为规模较小的类似子问题,即可继续使用贪心选择。

3、于是用数学归纳法可证明,经过一系列贪心选择可以得到整体最优解。

证明贪心选择将导致整体的最优解142653687916181411121234设G = (V , E)是一个无向连通带权图,即一个网络。

E 的每条边(v, w)的权c[v][w]。

如果G 的一个子图G ,是一棵包含G 的所有顶点的树,则称G’为G 的生成树。

生成树的各边的权的总和称为该生成树的耗费。

在G 的所有生成树中,耗费最小的生成树称为G 的最小(优)生成树。

1234设G = (V , E)是一个无向连通带权图,即一个网络。

E 的每条边(v, w)的权c[v][w]。

如果G 的一个子图G ,是一棵包含G 的所有顶点的树,则称G’为G 的生成树。

生成树的各边的权的总和称为该生成树的耗费。

在G 的所有生成树中,耗费最小的生成树称为G 的最小(优)生成树。

令G 中权最小的边为e 1。

首先必定有图G 的一棵最小生成树包含了e 1。

若G 的任何最小生成树都不包含e 1。

设T为G 的最小生成树,e 1 T 。

于是T+e 1是一个有回路的图且该回路中包含e 1。

该回路中必有条不是e 的边e i 。

令T’={T+e 1}–e i 。

T’也是G 的生成树。

又c(T’) = c(T) + c(e 1)–c(e 1),c(e 1) ≤ c(e i ),从而c(T’)≤c(T),T’是G 的最小生成树且含有边e 1。

矛盾。

故必定有图G 的最小生成树包含了e 1。

计算机算法设计与分析 王晓东第 版

计算机算法设计与分析 王晓东第 版

School of Computer and Communication Engineer
19

Fun Time
考虑如下活动集合 S:
i 1 2 3 4 5 6 7 8 9 10 11 si 1 3 0 5 3 5 6 8 8 2 12 fi 4 5 6 7 9 9 10 11 12 14 16
• 子集 {a3, a9, a11} 为一相容活动集合 • 计算最大相容活动集合?
最优解.
School of Computer and Communication Engineer
14
0/1 背包问题动态规划求解
• 贪心选择无法保证最终能将背包装满, 部分闲置的背 包空间使物品单位重量的价值发生变化
• 应比较选择该物品和不选择该物品所导致的最终方 案, 然后再作出最好选择(重叠子问题)
为了选择最多的相容活动, 每次选择 fi 最小的相容活 动, 即, 使以后可选更多的活动—“贪心(Greedy)”.
School of Computer and Communication Engineer
26
活动选择问题贪心算法
考虑如下活动集合 S: i 1 2 3 4 5 6 7 8 9 10 11 si 1 3 0 5 3 5 6 8 8 2 12 fi 4 5 6 7 9 9 10 11 12 14 16
• 贪心算法: 每一步做出一个选择, 该选择不依赖于子 问题的解
* 一个问题是否具有贪心选择性需要证明
School of Computer and Communication Engineer
7
最优子结构
定义 2. 若一个优化问题的最优解包括它的子问题的最 优解, 则称其具有最优子结构. • 动态规划: 最优子结构, 子问题重叠性 • 贪心算法: 最优子结构, 贪心选择性
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2
找硬币
假设有四种硬币,面值分别为
二角五分
一角
五分
一分
现在要找给某顾客六角三分钱,哪种找钱方法拿出 的硬币个数最少呢?
首先选出一个面值不超过六角三分的最大硬 币二,角五即分二二角角五五分分;一然角后从六一分角三分一中分 减去一二分角五 分,剩下三角八分;再选出一个面值不超过三角 八分的最大硬币,即又一个二角五分,如此一直 做下去。这种方法实际上就是贪心算法。
2020/11/17
计算机算法设计与分析
3
再找硬币
若硬币的面值改为一分、五分和一角一分3 种,而要找给顾客的是一角五分钱。
还用贪心算法,将找个顾客1个一角一分的 硬币和4个一分的硬币。
然而,3个五分的硬币显然才是最好的找法。
2020/11/17
计算机算法设计与分析
4
贪心算法的适用情形
设待求解问题有N个输入,根据必须满 足的条件和目标函数,希望从问题的所 有允许解中求出最优值。
D 60
A 300
50 E 90
2020年11月17日
B 70
A 300
C 50 80
D
E
B 70 C
D
13
最小生成树的贪心选择性质
令G中权最小的边为e1。首先必定有图G的一棵 最小生成树包含了e1。
若选G定的第任一何条最边小e1生以成后树,都该不如包何含选e择1。第设二T条为边G的呢? 最P依r小i据m生算各成法条树的边,做的e法权1:重T在。,保于依证是次连T选+通出e1是的权一前重个提较有下轻回依的路次n –的选1
2020/11/17
计算机算法设计与分析
7
煤气管道的铺设
某新建小区着手铺设煤气管道,已知每一 幢楼的接入位置和距离,请求出最短的铺 设方案。
2020年11月17日
8
最优布线问题
学校有n台计算机,为了方便数据传输, 现要将它们用数据线连接起来。两台计算 机被连接是指它们之间有数据线连接。由 于计算机所处的位置不同,因此不同的两 台计算机的连接费用往往是不同的。
2020/11/17
计算机算法设计与分析15PFra bibliotekim算法的示例
给定一个连通带权图如下:
1
6
5
2
1 55
4
3
36 4 2
56 6
初始时S={1},T= Φ; 第一二三四五次选择:
∵(13625, 3642)权最小 ∴ S={1, 3}, 6}, ,4}, ,2}, ,5},
T= {(1, 3)}, (;3, 6)}, (;6, 4)}, ; (3(2, 2, )3)(}2,;5)} ;
这种局部最优选择并不总能获得整体最优解, 但通常能获得近似最优解。
2020/11/17
计算机算法设计与分析
6
贪心算法的一般框架
GreedyAlgorithm(parameters){ 初始化; 重复执行以下的操作: 选择当前可以选择的(相容)最优解; 将所选择的当前解加入到问题的解中; 直至满足问题求解的结束条件。 }
如果G的一个子图G’是一棵包含G的所有顶点 的树,则称G’为G的生成树。
生成树的各边的权的总和称为该生成树的耗费。 在G的所有生成树中,耗费最小的生成树称为
G的最小(优)生成树。
2020/11/17
计算机算法设计与分析
11
树的基本性质
连通无回路的图G称为树。 树是点比边多一的连通图,G连通且q=p–1 。 树是点比边多一的无回路图:G无回路且q=p–1 树若添条边就有回路:G无回路,但对任意的u,
2020/11/17
计算机算法设计与分析
5
贪心算法的特点
贪心算法总是作出在当前来看是最好的选择。
就是说,贪心算法并不从整体最优上来考虑, 所作出的选择只是某种意义上的局部最优选择。
贪心法在解决问题的策略上目光短浅,只根据 当前已有的信息就做出选择,而且一旦做出了 选择,不管将来有什么结果,这个选择都不会 改变。
2020/11/17
计算机算法设计与分析
14
Prim算法
基本思想:在保证连通的前提下依次选出权重 较小的n – 1条边。
G=(V, E)为无向连通带权图,令V={1, 2, …, n}。 设置一个集合S ,初始化S = {1},T = Φ。 贪心策略:如果V–S中的顶点j与S中的某个点i
连接且(i, j) 的权重最小,于是就选择j(将j加入 S),并将(i, j) 加入T中 。 重复执行贪心策略,直至V–S为空。
第四章
贪心算法
2020/11/17
计算机算法设计与分析
1
学习要点
• 理解贪心算法的概念。 • 掌握贪心算法的基本要素 :
(1)最优子结构性质(2)贪心选择性质 • 理解贪心算法的一般理论 • 通过应用范例学习贪心设计策略。
(1)最小生成树; (2)单源最短路径; (3)旅行商问题; (4)活动安排问题; (5)最优装载问题;
2020年11月17日
9
最优通信网
若要在n个城市之间建设通信网络,只需 要架设n-1条线路即可。如何以最低的经 济代价建设这个通信网,是一个网的最 小生成树问题。
2020年11月17日
10
最小生成树
设G = (V, E)是一个无向连通带权图,即一个网 络。E的每条边(v, w)的权为c[v][w]。
v∈V(G),若uvE(G),则G+uv中恰有一条回路 树若减条边就不连通:G连通,但对e∈E(G),
G–e不连通。 n个顶点的连通图的生成树含有n – 1条边。
2020/11/17
计算机算法设计与分析
12
实例
A 300
50 80 200
E 90
B 70
A
75
C 50 80
D 60
E
B 70 C
图出条且权边该重。回较这路小n –中的1包n条–含边1e条必1。边定该(包回在括路实了中现G必的中有n体个条现顶不为点是n。个e1这 的顶样边点就e的得i。选到令择了T)G’=的{。T一+e棵1}最–e小i。生T’成也树是。G的生成树。
又c矛K次不 要 是这(Trc盾选行 保 连u’样()sT。≤k择! 证 通’做ca)故(l权因 这 的=算T是)必c重为 或n,法(否T–定较不者T的)1’可有+小能是条是做c图以的保无边G(法e的G1n证回构呢:)的–最–这路成在?1最c小条的n(树保e小生–i边。,证),生1成。必条无c成树(须边回e树1且使)构路包≤含这成的c含有(n树前e了i边–)?提,e1e1条下从1。。边依而
相关文档
最新文档