学习贪心算法

一、贪心算法思想

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解

二、什么时候采用贪心算法

1.最优子结构性质

当一个问题的最优解一定包含其子问题的最优解时,称此问题具有最优子结构性质。如何理解?换句话说:最优解一定是子问题的最优解组合而成的。没有这条性质,求出的最优解一定不是最优解,所以这才是重中之重。这也是动态规划问题的基石。

2.贪心选择性质

贪心选择性质时指所求问题的整体最优解可以通过一系列局部最优的选择获得,即通过一系列的逐步局部最优选择使得问题最终的选择方案是全局最优的。

三、利用贪心法求解问题的过程通常包含三个步骤

1.分解

将原问题分解为若干个相互独立的阶段。 

2.解决

对于每个阶段依据贪心策略进行贪心选择,求出局部的最优解。

3.合并

将各个阶段的解,合并为原问题的一个可行解。

四、贪心策略的选择

1.盛水最多的容器

盛最多水的容器——LeetCode_AllenC6的博客-CSDN博客盛最多水的容器、贪心算法、LeetCodehttps://blog.csdn.net/m0_37707561/article/details/125504342这个题目就是用的贪心算法:

学习贪心算法_第1张图片

贪心策略:

首先明确一点,这个容器的高以两个边中更小的那个边为准(木桶原理)

从两边开始,每次都选两条边更小的那个,往中间移动一位,因为更小的这个后面有可能有比它更大的,这样就可能出现比当前更大的容器。

最后你会发现,贪心策略筛选出的最大容器,正好是这些所有组合中最大的,这就叫整体最优解可以通过一系列局部最优的选择

 2.钱币找零

假设1元、2元、5元、10元、20元、50元、100元的纸币分别有c0, c1, c2, c3, c4, c5, c6张。现在要用这些钱来支付K元,至少要用多少张纸币?

贪心策略: 用贪心算法的思想,很显然,每一步尽可能用面值大的纸币即可.

你可能感兴趣的:(数据结构和算法,算法)