「码趣分享」贪心算法Greedy Algorithm
Posted 码趣青少儿编程教育
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「码趣分享」贪心算法Greedy Algorithm相关的知识,希望对你有一定的参考价值。
今天的码趣小课堂给大家带来的分享是
贪心算法
Greedy Algorithm
贪心算法:一种渐进式的解决问题的算法,永远选取局部最优的解决方法。
此算法专门用来解决优化问题。
而能通过贪心算法解决的优化问题必须拥有以下特点:通过局部最优的选择方式,我们确保可以得到整体最优的解决方案(某些问题通过贪心算法无法保证其可行性)。
对于所有可以用贪心算法解决的问题而言,使用贪心算法来解决这个问题就是最优、最高效的选择。
1
我们先来看一些贪心算法的例子
克鲁斯卡尔算法
普里姆算法
迪杰斯特拉最短路径
哈夫曼编码
贪心算法有时用来求得一些急需优化的困难问题的近似值。以旅行商问题为例:贪心算法会在每一次选择下一个城市时,选择与当前城市最近的城市作为目标来作为解决方案。这样的解决方式并不一定是最优的解决方式,但可以作为最优方案的近似值。
了解了贪心算法
那么,现在让我们学习一下
2
贪心算法如何解决简单的活动选择问题
假设:你得到了n个活动的开始与结束时间,并且你将为某个人安排尽可能多的活动(假设同一时间只能参与一个活动)。
例 1 : 假设有3个活动以结束时间排序
start[] = {10, 12, 20};
finish[] = {20, 25, 30};
那么这个人最多可以参加2个活动,而这两个活动的序号为{0, 2}
例 2 : 假设有6个活动以结束时间排序
start[] = {1, 3, 0, 5, 8, 5};
finish[] = {2, 4, 6, 7, 9, 9};
那么这个人最多可以参加4个活动,而这两个活动的序号为{0, 1, 3, 4}
总结
将活动以结束时间来排序
从排列中选择第一个活动并打印它
下一个选择的活动的开始时间,大于或等于上一个活动的结束时间则打印它
以同样的方式处理余下的活动
3
那么如何通过Python来实现排序呢?
定义
n --> 活动数量
s[]--> 开始时间序列
f[] --> 结束时间序列
序列已经按结束时间排序
def printMaxActivities(s , f ):
n = len(f)
print "The following activities are selected"
# The first activity is always selected
i = 0
print i,
# Consider rest of the activities
for j in range(n):
# If this activity has start time greater than
# or equal to the finish time of previously
# selected activity, then select it
if s[j] >= f[i]:
print j,
i = j
# Driver program to test above function
s = [1 , 3 , 0 , 5 , 8 , 5]
f = [2 , 4 , 6 , 7 , 9 , 9]
printMaxActivities(s , f)
最后输出是
The following activities are selected
0 1 3 4
贪心算法是不是很实用?
如果你学会了,
也可以用这个算法对身边疑难问题进行解答,
说不定可以解决困扰你许久的难题呦!
贪心算法只是计算机思维中
会运用到的一个通用技能
学习算法
不仅可以锻炼逻辑思维能力
还能帮你快速解决生活中遇到的困难
秋季课程火热上线
码趣学院秋季课程针对不同年龄
不同需求的学员们开设了:
码趣小小发明家:7~13岁
码趣创造家:12~18岁
码趣艺术家:10~16岁
码趣精英企业家:14~18岁
(8月31日前报名,可获得800元码趣课程)
(携带好友一起上课,可每人赠送1000元课程)
活动名额有限
预约免费试听课,或了解更多信息
【码趣学院】科普:
CodingMarch 码趣学院
以上是关于「码趣分享」贪心算法Greedy Algorithm的主要内容,如果未能解决你的问题,请参考以下文章
零基础学启发式算法-贪心算法(Greedy Algorithm)