算法基础:贪婪算法(基于Python)

本文介绍了贪婪算法的概念,通过两个实例展示了贪婪算法的应用,包括课程安排和小偷背包问题,探讨了其优点和局限性。同时,给出了广播节目覆盖全美50州的最小广播台集合问题,说明了在解决复杂问题时贪婪算法的优势。最后,提供了贪婪算法的Python代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博客所有内容均整理自《算法图解》,欢迎讨论交流~

相信大家都或多或少地听说或者接触过贪婪算法,当我们遇到一个没有办法解决的问题时,贪婪算法总是一个现成的好思路。

对于贪婪算法的定义,百度百科是这样说的:

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

其实说白了,就是在当前状态下找到局部最优解,然后在此基础上再去寻找局部最优解,通过多次寻找局部最优解直至收敛的过程来代替寻找全局最优解。

但是,这种思路有可能最终获得的并不是全局最优解


1、贪婪算法的两个例子

首先,我们通过两个例子来看看贪婪算法的具体操作步骤和效果。

第一个例子:

假设有如下课程表,你希望将尽可能多的课程安排在某一间教室内。很明显,你无法将所有课都安排在这一间教室内,因为这些课程的时间有所冲突,那么最优的安排策略是怎样的呢?

 

我们希望在同一间教室上尽可能多的课,但是现在课程时间错综复杂,彼此交叉。

要想解决这个问题,我们就可以启用贪婪算法。具体步骤如下:

  1. 选出结束最早的课,它就是要在这间教室上的第一堂课。
  2. 接下来,必须选择第一堂课结束后才开始的课。此时,我们同样选择结束最早的课,这将是在这间教室上的第二堂课。
  3. 依此类推地重复,直到没有其他课可以安排了。

根据以上的贪婪算法,我们很快就可以选出要在这间教室内上的课程,如下图所示:

 

具体时间安排如下所示:

 

这样就获得了最优的课程安排选择!所以贪婪算法只要用对了地方,就显得非常直观和简单!

对于上面的例子,我们使用贪婪算法的总体思路其实很简单,就是每一次都选择满足条件的局部最优解,即每次都选择在上一节课结束之后开始的结束最早的课。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值