> 技术文档 > 贪心算法简介

贪心算法简介

目录

一、什么是谈心算法

二、例题

 证明找零问题:

三、贪心算法的特点


一、什么是谈心算法

         其实是贪心策略,是解决问题的策略,局部最优->全局最优
 解释:
 1、将解决问题的过程分为若干步
 2、解决每一步的时候,都选择当前看起来最优的解法
 3、希望得到全局最优解


二、例题

 
 例一:找零问题
        用了50块钱买了4块钱的东西,只有20、10、5、1的面额的纸币,要求找的张数最少
 这里第一个考虑20块钱,当前最优情况是两张20,还剩6块;再考虑5块钱,当前最优解是一张;
 最后是一块钱,当前最优解是一张一块的,完成
 
 例二:最小路径和
        九宫格,从左上格子走到右下格子,只能向下或者向右走,每个格子路程为格子里的数
 往下走到底,然后只能往右走到头

1 3 1 1 5 1 6 1 1

 
 例三:背包问题
        体积为V,W代表价值,最大容量固定,每个物品有无限多个,怎样装价值背包最大
 (体积小的,价值也低

总体积:8 A B C V 5 4 1 W 10 7 1

 只考虑体积的话,会只装体积小的物品,一直装到不能装;或者考虑价格,先装最贵的,
 再装其他装的下的且价值最高的;或者两者以及考虑,用价值/体积作为判断标准(单位体积)
 
 但实际以上找的方法除了例一都是错的
 核心就是贪,而且鼠目寸光,只希望当前拥有最优解

 证明找零问题:

 先证明一个性质——
 10元的分为三种情况大于2、等于2、小于2
 一定是小于2,因为其他的都可以用数量更少的20代替
 因此B <= 1
 同理可证的C <= 1,D <= 4
 
 贪心解法:【a, b, c, d】
 最优解法:【A, B, C, D】
 
 因为是贪心解法,所以a >= A,但又因为一旦A < a,那么这二十块钱就要有后面更小的面额去补
 不复合最优解,因此A = a;
 同理可证B = b,C = c
 自然而然,d = D
 证毕。


三、贪心算法的特点

 1、贪心策略的提出
        (1)贪心策略的提出是没有标准以及模版的(检验、要求、瞎蒙)
        (2)可能每一道题的策略都是不同的
 2、贪心策略的正确性
        因为有可能贪心策略是一个错误的方法
        正确的谈心策略是需要证明的,而证伪只要举反例就可以
        常用的证明方法:数学中见过的所有的证明方法
 3、学习方向
        (1)心理上:遇到不会的贪心题很正常,把心态放平
        (2)前期学习的时候,重点放在贪心的策略上,把这个策略当成经验吸收
        (3)如何去证明——题目解析、算法原理、写代码