算法快学笔记(十五):贪婪算法与NP完全问题

1. 贪婪算法

1.1 算法思路

贪婪算法的思想很简单:每步都采取最优的做法,以教室调度为例进行说明该算法步骤。

假设有以下课表,希望将尽可能多的课程安排在同一个教室:

在这里插入图片描述

由于不同课的开始与结束时间存在冲突,所以不可能把所有课放在一个教室上。使用贪心算法的解决思路如下:

  1. 选出结束最早的课,它是上的第一堂课。 此时选择美术课
  2. 接下来选择第一堂课结束后才开始的课。同样,你选择结束最早的课,这将是要第二堂课。此时选择数学课。
  3. 重复步骤二,此步得到音乐课

于是使用贪婪算法得到的结果就是:美术-》数学-》音乐。

1.2 例外情况

贪婪算法并不适合所有的场景,例如背包问题。背包问题描述如下:

  1. 假设一个背包可以放35磅重的东西,你试图通过该背包尽可能装入总价值最高的商品
  2. 商品的列表如下:
  • 音响:3000美元,30磅
  • 电脑:2000美元,20磅
  • 吉他:1500美元,15磅

按照贪婪算法,每步都选择最优方案的话,则第一步将会选择音响,此时总价值为3000美元,背包还剩5磅的空间,然后其他的物品超过了5磅,所以也不能再进行选择。

如果选择电脑+音响的话,总价值为3500美元

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值