define:贪心算法是指在对问题求解的时候,总是做出当前来看是最好的选择。也就是从局部最优解到全局最优解。
tips:
1.那么很明显贪心算法需要具备无后效性(即某个状态以前的过程不会影响以后的状态,只与当前状态有关)
2.
贪心选择
贪心选择是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。贪心选择是采用从顶向下、以迭代的方法做出相继选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题。对于一个具体问题,要确定它是否具有贪心选择的性质,我们必须证明每一步所作的贪心选择最终能得到问题的最优解。通常可以首先证明问题的一个整体最优解,是从贪心选择开始的,而且作了贪心选择后,原问题简化为一个规模更小的类似子问题。然后,用数学归纳法证明,通过每一步贪心选择,最终可得到问题的一个整体最优解。
最优子结构
当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。运用贪心策略在每一次转化时都取得了最优解。问题的最优子结构性质是该问题可用贪心算法或动态规划算法求解的关键特征。贪心算法的每一次操作都对结果产生直接影响,而动态规划则不是。贪心算法对每个子问题的解决方案都做出选择,不能回退;动态规划则会根据以前的选择结果对当前进行选择,有回退功能。动态规划主要运用于二维或三维问题,而贪心一般是一维问题。
说人话:个人理解dp和贪心一个是通过记录所有的子结构,通过计算得出最优的子结构(状态转移方程)
贪心就是你已经知道自己走的每一步一定是最优的子结构,直接通过递归或者遍历得出最后的答案。

computational procedure:
1.建立数学模型来描述问题;
2.把求解的问题分成若干个子问题;
3.对每一子问题求解,得到子问题的局部最优解;
4.把子问题的解局部最优解合成原来解问题的一个解。
while (能朝给定总目标前进一步)
{
利用可行的决策,求出可行解的一个解元素;
}
由所有解元素组合成问题的一个可行解;
入门级别题目
link:如下

https://blog.csdn.net/qq_32400847/article/details/51336300

下面就是我对入门级别题目的个人分类和理解

https://leetcode-cn.com/problems/lemonade-change/

这道题就是很明显的贪心类问题的第一种,就是符合正常人思维类的题目PS:没有不能从局部最优到达全局最优的情况。说人话
如果顾客支付了 5 美元钞票,那么我们就得到 5 美元的钞票。
如果顾客支付了 10 美元钞票,我们必须找回一张 5 美元钞票。如果我们没有 5 美元的钞票,答案就是 false,因为我们无法正确找零。
如果顾客支付了 20 美元钞票,我们必须找回 15 美元。
如果我们有一张 10 美元和一张 5 美元,那么我们总会更愿意这样找零,这比用三张 5 美元进行找零更有利。
否则,如果我们有三张 5 美元的钞票,那么我们将这样找零。
否则,我们将无法给出总面值为 15 美元的零钱,答案是 false。
作者:LeetCode
链接:https://leetcode-cn.com/problems/lemonade-change/solution/ning-meng-shui-zhao-ling- by-leetcode/
来源:力扣(LeetCode)
这其实就是1.可用穷举出所有状态2.子状态可以符合这些状态3.从局部最优可到达全局最优

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
下面的内容我会根据如下进行讲解:
知识点 典型题

  • 哈夫曼树 Hdu2527
  • 模拟退火算法 hdu3007 (结合概率)
  • prim算法 hdu1102
  • kruskal算法 hdu1863
  • Dijkstra算法 hdu2066

reference:
https://baike.baidu.com/item/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95/5411800?fr=aladdin(百度百科)