贪心算法 (Python3)
Posted 蒋春生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贪心算法 (Python3)相关的知识,希望对你有一定的参考价值。
贪心算法 (Python3)
概述
贪心法, 又称贪心算法,贪婪算法,或者贪婪法,是一种在每一步选择中都采取在当前状态下最好或者最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。
贪心法在有最优子结构的问题中尤为有效。最优子结构的意思是局部最优解能决定全局最优解。简单地说,问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最优解。
**简而言之:**在对问题求解时,总是作出在当前看来是最好的选择。也就是说,不从整体上加以考虑,它所作出的仅仅是在某种意义上的局部最优解(是否是全局最优,需要证明)。
例题
1.题目描述
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组[4,-1,2,1] 的和最大,为 6。
2.思路
第当时想到的当然是暴力解决,基本上就是遍历一下,用两个变量,记录最大的和,当前的和。最后我发现可以用贪心算法来解比较简单
暴力破解
li = [-2,1,-3,4,-1,2,1,-5,4]
tp = li[0]
max_tp = tp
for i in range(1,len(li)):
if tp + li[i] > li[i]:
max_tp = max(max_tp,tp + li[i])
tp += li[i]
else:
max_tp = max(max_tp,tp,tp + li[i],li[i])
tp = li[i]
print(max_tp)
贪心算法
li = [-2,1,-3,4,-1,2,1,-5,4]
cur_sum = li[0]
max_sum = cur_sum
for i in range(1, len(li)):
cur_sum = max(cur_sum + li[i], li[i])
max_sum = max(cur_sum, max_sum)
print(max_sum)
总结
贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考虑一个数据,选取应该满足局部优化的条件。若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止。
以上是关于贪心算法 (Python3)的主要内容,如果未能解决你的问题,请参考以下文章