贪心算法
1)最自然的算法(在当前形势下取最优)
2)用一种局部最功利的标准,总是做出在当前看来是最好的选择
3)难点在于证明局部最功利的标准可以得到全局最优解
贪心算法无法得到最优解的例子:
- [ 矩阵往返一次的最大路径和 ]
贪心算法求解的标准过程
1,分析业务
2,根据业务逻辑找到不同的贪心策略
3,对于能举出反例的策略直接跳过,不能举出反例的策略要证明有效性
贪心算法的解题套路
1,实现一个不依靠贪心策略的解法X,可以用最暴力的尝试
2,脑补出贪心策略A、贪心策略B、贪心策略C…
3,用解法X和对数器,用实验的方式得知哪个贪心策略正确
4,不要去纠结贪心策略的证明
例题
会议室能容纳的最多宣讲场次:
一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲。给出了每一个项目开始的时间和结束的时间
你来安排宣讲的日程,要求会议室进行的宣讲的场次最多。
返回最多的宣讲场次。
输入:
正数数组costs、正数数组profits、正数K、正数M
costs[i]表示i号项目的花费
profits[i]表示i号项目在扣除花费之后还能挣到的钱(利润)
K表示你只能串行的最多做k个项目
M表示你初始的资金
说明: 每做完一个项目,马上获得的收益,可以支持你去做下一个项目。不能并行的做项目。
输出:你最后获得的最大钱数。
解题思路:
举例不同的标准来进行贪心。按照最早开始时间安排?按照间隔时间最短的来安排?按照利润最高的来安排?
下集继续~
PS:学习内容:左神算法