(lecture_06)贪心算法
- 格式:ppt
- 大小:500.50 KB
- 文档页数:44
贪心算法问题解决策略概述贪心算法(Greedy Algorithm)是一种简单而有效的问题解决策略,通过每一步的局部最优选择,最终达到全局最优解。
其基本思想是从问题的某个初始解出发,通过贪心的选择,逐步得到一个更优解,以求解整个问题。
本文将对贪心算法的基本原理以及应用领域进行概述。
一、贪心算法的基本原理贪心算法的核心思想是每一步都做出当前的最优选择,将问题分解为一系列子问题,并进行局部最优解的选择,最终得到全局最优解。
二、适用条件贪心算法适用于具有贪心选择性质的问题,即通过局部最优解可以得到全局最优解。
贪心选择性质是指每一步的选择只依赖于当前状态,不受其他步骤的影响。
三、典型应用1. 最小生成树问题:在一个连通图中,找出一个包含所有顶点的边的子集,使得这个子集形成一个树,且所有边的权值之和最小。
2. 哈夫曼编码问题:在编码问题中,通过给频率较高的字符分配较短的编码,从而使得编码的总长度最短。
3. 区间调度问题:给定一组区间,选择尽量多的互不重叠的区间。
4. 零钱支付问题:给定一定面额的硬币和一个要支付的金额,找出支付方式使得所需硬币的数量最少。
5. 背包问题的一些变体:如01背包问题、完全背包问题等。
四、算法步骤贪心算法的思路是通过局部最优解来构建全局最优解。
其一般步骤如下:1. 建立数学模型来描述问题。
2. 将问题分解为若干个子问题。
3. 对每个子问题求解,得到局部最优解。
4. 对所有子问题的局部最优解进行整合,得到原问题的最优解。
五、优缺点贪心算法的优点在于简单、高效,能够快速地找到一个近似最优解。
但是它也有一些缺点,即不能保证能够得到全局最优解,因为贪心策略是基于局部最优的选择,并不能考虑全局情况。
六、总结贪心算法作为一种简单而有效的问题解决策略,在许多实际问题中发挥着重要作用。
通过每一步的局部最优选择,贪心算法能够快速地找到一个近似最优解。
但需要注意的是,贪心算法并不能保证一定能够得到全局最优解,因此在具体应用中需要谨慎分析问题的特点,判断是否适合采用贪心算法。
贪心算法的基本特征贪心算法(greedy algorithm,又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。
也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。
算法思路贪心算法一般按如下步骤进行:①建立数学模型来描述问题。
②把求解的问题分成若干个子问题。
③对每个子问题求解,得到子问题的局部最优解。
④把子问题的解局部最优解合成原来解问题的一个解。
贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。
贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,省去了为找最优解要穷尽所有可能而必须耗费的大量时间。
贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择,就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解。
虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪心算法不要回溯。
算法特性贪心算法可解决的问题通常大部分都有如下的特性:1、有一个以最优方式来解决的问题。
为了构造问题的解决方案,有一个候选的对象的集合:比如不同面值的硬币。
2、随着算法的进行,将积累起其他两个集合:一个包含已经被考虑过并被选出的候选对象,另一个包含已经被考虑过但被丢弃的候选对象。
3、有一个函数来检查一个候选对象的集合是否提供了问题的解答。
该函数不考虑此时的解决方法是否最优。
4、还有一个函数检查是否一个候选对象的集合是可行的,即是否可能往该集合上添加更多的候选对象以获得一个解。
和上一个函数一样,此时不考虑解决方法的最优性。
5、选择函数可以指出哪一个剩余的候选对象最有希望构成问题的解。
6、最后,目标函数给出解的值。
使用条件利用贪心法求解的问题应具备如下2个特征。
1、贪心选择性质一个问题的整体最优解可通过一系列局部的最优解的选择达到,并且每次的选择可以依赖以前作出的选择,但不依赖于后面要作出的选择。
贪心算法总结什么是贪心算法?贪心算法(Greedy Algorithm)是一种用于求解优化问题的常见算法,其核心思想是在每一步都选择当前最优解,希望最终能够得到全局最优解。
贪心算法在每一步仅考虑局部最优,而不关心全局最优,因此它的计算速度较快。
然而,由于贪心算法没有考虑全局,在某些情况下可能无法得到最优解。
贪心算法并不适用于所有的问题,只适用于一些特殊的问题,例如背包问题、最小生成树问题等。
在实际应用中,需要根据具体问题的特点来判断是否可以使用贪心算法来解决。
贪心算法的基本思路贪心算法的基本思路可以概括为以下几步:1.确定最优解的性质:首先要确定在每一步选择中,能够得到局部最优解。
2.构造贪心选择:根据最优解的性质,每一步都做出一个贪心选择,选择能够获得当前最大或最小收益的方案。
3.确定限制条件:确定问题的限制条件,包括物品的容量、时间限制等。
4.根据限制条件,进行剪枝策略:如果某种选择在限制条件下无法满足要求,则需要进行剪枝,排除该选择。
5.循环执行贪心选择,直到问题得到解决。
贪心算法的优缺点贪心算法具有以下优点:•计算速度快:贪心算法在每一步只考虑局部最优解,不需要对全局进行搜索,因此计算速度较快。
•算法思路简单:贪心算法的思路相对简单,易于理解和实现。
•适用范围广:贪心算法适用于一些特殊问题,如最短路径、最小生成树等。
然而,贪心算法也存在一些缺点:•可能无法得到最优解:由于贪心算法仅考虑局部最优解,而不关心全局最优解,因此可能无法得到最优解。
•需要满足贪心选择性质:贪心算法要求问题具有贪心选择性质,即每一步都能够得到局部最优解。
如果问题不具备这个性质,贪心算法可能不适用。
贪心算法的应用场景贪心算法适用于一些特殊的问题,以下是一些常见的应用场景:1. 最短路径问题最短路径问题是指在一个加权有向图中,找出从一个顶点到另一个顶点的最短路径。
贪心算法可以用来解决一些简单的最短路径问题,如Dijkstra算法。
贪⼼算法(Greedy)
什么是贪⼼算法?
在对问题求解时,总是做出对当前来看是最好的选择。
也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解、从⽽求得整体最优解。
贪⼼算法不有固定的算法框架,算法设计的关键是贪⼼策略的选择。
但贪⼼算法并不是对所有问题都能得到最优解,选择贪⼼策略要具备⽆后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。
基本思想
1. 建⽴数学模型来描述问题;
2. 把求解的问题分成若⼲个⼦问题;
3. 对每⼀个⼦问题求解,得到⼦问题的局部最优解;
4. 把⼦问题的解局部最优解组合成原来解问题的⼀个解;
算法的基本步骤
从问题的某⼀初始解出发;
while(能向总⽬标前进⼀步){
利⽤可⾏的决策,求出可⾏解的⼀个解元素;
}
由所有的解元素组合成问题的⼀个可⾏解;
贪⼼算法的优势
算法不会太复杂
时间复杂度低
空间复杂度低
Leetcode相关。