贪心算法 (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)的主要内容,如果未能解决你的问题,请参考以下文章

763. 划分字母区间-贪心算法

贪心算法----区间覆盖问题(POJ2376)

Contig|scaffold|N50|L50|NG50|贪心算法|de bruiji graph|

学习笔记:python3,代码片段(2017)

scrapy主动退出爬虫的代码片段(python3)

scrapy按顺序启动多个爬虫代码片段(python3)