贪心算法总结

贪心算法

含义:这个算法可以理解为 忽略了全局最优,每次只取局部最优解。 每一次的解都是以当前最优为主而非全局最优
结构

 从问题的某一初始解出发:
                        while (朝给定总目标前进一步)
                    {
                         利用可行的决策,求出可行解的一个解元素。 
                    }
                         由所有解元素组合成问题的一个可行解;

性质:**1 贪婪选择性质:局部的最优解一定会导致全局最优解。2:最优子结构:全局最优解所包含的子问题的解也是最优的。只有同时满足这两个性质时才能够使用贪婪算法。
缺陷:贪婪算法虽然十分简便,但也有着很大的缺陷。当一个问题过于复杂时,我们很难说明对于局部最优解是否能带来全局最优解。这里需要严格的数学证明。

贪心算法与动态规划

联系:两种算法都包含了 最优子结构性质。都是通过不断推进子问题进而得到全局的解
区别贪心算法得到的解总是基于上一个子问题得到的解。动态规划所得到的子问题解则不一定基于上一个子问题,而是通过存放多个子问题的答案得到当前问题的最优解

题目

盛水最多的容器
题目分析:这个题目的方法也是基于贪心算法的双指针。稍后给出证明,我们让左右指针分别指向数组的两端,此时的盛水面积为Math.min(high[l],high[r])*(r-l)。我们默认此时的面积为最大盛水面积。随后我们判断左右指针的数组的值,让指向数值小的那一个指针移动。
**证明:**既然是贪心算法,那么就需要证明贪心能否带来全局的最优解,其结果是显然的。局部的最大值不断更新,最终一定是全局的最大值。问题在于我们移动指针是否能带来合理的结果。在最初状态,指针分别指向两端。倘若我们移动指向值较大的那一个指针,那么结果必然会小于原值,这是因为容器壁的高度取决于两个值的最小值,该次移动也仅仅是缩短了两个器壁的间距。所以只有我们不断移动指向值小的那一个指针才有可能获得更大的结果。借此不断缩小问题规模。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值