贪心算法中,通常会让证明贪心选择性,请问,证明贪心选择性的实质是啥?怎样说明一个问题具有贪心选择呢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贪心算法中,通常会让证明贪心选择性,请问,证明贪心选择性的实质是啥?怎样说明一个问题具有贪心选择呢相关的知识,希望对你有一定的参考价值。
参考技术A 一般都是要最省事的比如设有n中不同面值的硬币,个硬币的面值春雨数组T[1:n]中,现在要用这些面值的硬币来找钱。可以使用的各种面值的硬币个数存于数组Coins[1:n]中。
对任意签署0<=m<=20001,设计一个用最少硬币找钱m的方法。
用贪心算法,先用最大面值的,直到超出之前再改用更小面值的,超出之前再用更更小面值的。。直到正好。这样最少
程序实例
#include<stdio.h>
void main()
int m;
int i;
printf("please input m:");
scanf("%d",&m);
int T[6] =100,50,20,10,5,1;
int coins[6] = 0;
for(i = 0; i < 6; )
if(m < T[i])
i++;
continue;
while(m >= T[i])
m -= T[i];
coins[i]++;
i++;
for(i = 0; i < 6; i++)
if(coins==0)
printf("%-4d有 %-2d张\n",T[i],coins[i]);
printf("\n");
参考技术B 贪心选择性质:所求问题的整体最优解可以通过一系列局部最优的选择来得到。
就是说,你需要证明当前问题可以通过选择最好的那个元素(比如01背包,总能够通过选择当前重量最小的物品来得到最优解)来解决问题
证明:(每一步所做的贪心选择最终导致问题的整体最优解)
//基本思路:考察一个问题的最优解,证明可修改该最优解,使得其从贪心选择开始,然后用数学归纳法证明每一步都可以通过贪心选择得到最优解
1,假定首选元素不是贪心选择所要的元素,证明将首元素替换成贪心选择所需元素,依然得到最优解;
2,数学归纳法证明每一步均可通过贪心选择得到最优解本回答被提问者采纳
贪心算法及其理论依据——拟阵
贪心算法主要采用局部最优的解决问题的策略,但是在很多时候都不能达到全局最优的效果,那么什么时候使用贪心算法能够得到全局最优呢?就此引出拟阵的概念。
贪心算法的一般步骤
- 确定待解问题的最优子结构
- 设计递归求解方式
- 证明在递归的任一阶段,最优选择之一总是贪心的(那么贪心选择是最适合的)
- 证明通过做贪心选择,所有的子问题都为空(除一个以外)
- 设计实现贪心策略的递归算法
- 将设计好的递归算法转换成迭代算法
贪心选择
贪心算法中,我们所做的总是当前看似最佳的选择,然后在解决经过贪心选择之后所出现的子问题。其作出的当前的选择可能要依赖于已经做出的所有选择,但不依赖于未做出的选择或子问题的解。贪心算法采取的贪婪策略往往是自顶向下的。核心所在就是要证明每一步所做的贪心选择最终能产生一个全局最优解。
最优子结构
对于一个问题,如果它的一个最优解包含了其子问题的最优解,则称该问题具有最优子结构(最优子结构的证明采用部分替换法)。
设计贪心算法的一般步骤
- 将优化问题转化为:先做出选择,再解决剩下的一个子问题
- 证明原问题总是有一个最优解是做贪心选择而得到的,从而证明贪心选择的安全性与鲁棒性
- 说明做出贪心选择之后,剩余的子问题具有一个性质:如果将子问题的最优解和所做的贪心选择联合,可以得到原问题的一个最优解
拟阵
拟阵理论是组合优化的一个分支。拟阵理论并不是因为贪心算法而引入,但是却是贪心算法的强力辅助。拟阵理论不能完全覆盖所有的贪心算法(如赫夫曼编码问题),但它可以覆盖大多数具有实际意义的情况。
在问题模型满足拟阵结构的情况下,贪心策略总是能够得到最优解。
拟阵的概念
定义1:子集系统的优化问题
定义2:拟阵
贪心算法
定义4:拟阵的权函数
定义5:拟阵的最大权独立集问题
拟阵的性质
定义3:独立子集
定理1
定理2
定理3
贪心算法
以上是关于贪心算法中,通常会让证明贪心选择性,请问,证明贪心选择性的实质是啥?怎样说明一个问题具有贪心选择呢的主要内容,如果未能解决你的问题,请参考以下文章