「码趣分享」贪心算法Greedy Algorithm

Posted 码趣青少儿编程教育

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「码趣分享」贪心算法Greedy Algorithm相关的知识,希望对你有一定的参考价值。


今天的码趣小课堂给大家带来的分享是 

贪心算法


「码趣分享」贪心算法Greedy Algorithm



Greedy Algorithm

贪心算法:一种渐进式的解决问题的算法,永远选取局部最优的解决方法。

此算法专门用来解决优化问题。

而能通过贪心算法解决的优化问题必须拥有以下特点:通过局部最优的选择方式,我们确保可以得到整体最优的解决方案(某些问题通过贪心算法无法保证其可行性)。


对于所有可以用贪心算法解决的问题而言,使用贪心算法来解决这个问题就是最优、最高效的选择。

「码趣分享」贪心算法Greedy Algorithm


1

我们先来看一些贪心算法的例子




「码趣分享」贪心算法Greedy Algorithm

克鲁斯卡尔算法

「码趣分享」贪心算法Greedy Algorithm

普里姆算法

「码趣分享」贪心算法Greedy Algorithm

迪杰斯特拉最短路径

「码趣分享」贪心算法Greedy Algorithm

哈夫曼编码


贪心算法有时用来求得一些急需优化的困难问题的近似值。以旅行商问题为例:贪心算法会在每一次选择下一个城市时,选择与当前城市最近的城市作为目标来作为解决方案。这样的解决方式并不一定是最优的解决方式,但可以作为最优方案的近似值。


了解了贪心算法

那么,现在让我们学习一下

「码趣分享」贪心算法Greedy Algorithm


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}



总结

  1. 将活动以结束时间来排序

  2. 从排列中选择第一个活动并打印它

  3. 下一个选择的活动的开始时间,大于或等于上一个活动的结束时间则打印它

  4. 以同样的方式处理余下的活动

「码趣分享」贪心算法Greedy Algorithm


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


「码趣分享」贪心算法Greedy Algorithm


贪心算法是不是很实用?

如果你学会了,

也可以用这个算法对身边疑难问题进行解答,

说不定可以解决困扰你许久的难题呦!


贪心算法只是计算机思维中

会运用到的一个通用技能

学习算法

不仅可以锻炼逻辑思维能力

还能帮你快速解决生活中遇到的困难


秋季课程火热上线


「码趣分享」贪心算法Greedy Algorithm


码趣学院秋季课程针对不同年龄

不同需求的学员们开设了:

码趣小小发明家:7~13岁

码趣创造家:12~18岁

码趣艺术家:10~16岁

码趣精英企业家:14~18岁


8月31日前报名,可获得800元码趣课程)

(携带好友一起上课,可每人赠送1000元课程)

活动名额有限

预约免费试听课,或了解更多信息

「码趣分享」贪心算法Greedy Algorithm

【码趣学院】科普:



CodingMarch 码趣学院

以上是关于「码趣分享」贪心算法Greedy Algorithm的主要内容,如果未能解决你的问题,请参考以下文章

贪心算法(Greedy)——算法三十六计之四

零基础学启发式算法-贪心算法(Greedy Algorithm)

LeetCode贪心 greedy(共38题)

LeetCode贪心 greedy(共38题)

集束搜索beam search和贪心搜索greedy search

Greedy Algorithm and Huffman