7人加入学习
(0人评价)
CS算法集训班
价格 $99,999美元
该课程属于 2023.7.9 CS课程 请加入后再学习
  • 贪心算法和DP

贪心算法:

定义:选择的贪心策略必须具有无后效应,寄某个状态之前的过程不会影响以后的状态,只与当前状态有关。

需要判断一下当前的最优解是不是最终的最优解。

 

最优子结构:当问题的最优解包含子问题的最优解的时候

 

局限性:

  1. 不能保证最后的结果一定是最佳的。
  2. 不能有来求最大或最小解问题
  3. 只能求满足某些约束条件的可行解的范围

上节课的dikistra,prim,krukal算法都是贪心算法。

上述算法也都有一些限制条件,就是为了约束最后的最优解的

 

大部分例题都能有DP解

例题:455: assign cookies。40min

 小给小,大给大,可以sort后双指针遍历人和饼干,

122:Best time to but and Sell stockII

53:

134:gas

55: jump game。 只是求哪里开始可以完成目的可以贪心,但是求最小步骤不能用贪心算法。

 

总结:贪心算法主要是针对一维问题,不需要独立,DP是前后有关系,需要记录

 

 

  • 动态规划

讲一个问题拆分成几个子问题,分别求解子问题。

步骤:

  1. 划分阶段,有序或者可排序(无后序性)
  2. 选择状态(无后行)
  3. 确定状态转移方程(根据上一阶段状态到处本阶段方程),确定了决策,状态转移方程也就出来了
  4. 写出规划方程,只需要写iterative的,不要写recursive。

 

重点:初始状态,和状态转移方程。

基本要素:

  1. 重叠子问题:用到之前很多数的结果,比如fibncci。
  2. 最优子结构
  3. 无后效性,保证之前的状态都已经更新完了才能拿来用,不能够用完这个数据后这个数据还在更新。 循环的顺序和倒序等等。

 

要学会问题归类:尤其是DP问题。例如二维DP,写两层循环。。

一般是最大利润或者最小误差等

例题:198:house robber。

初始条件:最大财务=0.

状态转移方程:每次到房子的时候利用和前面房子的关系,限制条件:不能连续抢。一般来说最后求最大财务数,每一步也要求最大财务书。

对每个房子状态两个:抢或者不抢,强的话:i-2的财务+当前财务。 不强的话:i-1的财务。

一般不用矩阵,因为只跟前一个或两个有关系。直接用几个变量表示就行。 矩阵的话一般是跟前n个有关。

 

 

  • 卖股票系列:

状态转移,当前状态买,卖,不做。

初始值:一般来说是最大利润,

然后加上边界调节。有可能要加矩阵的维度,eg.cooldown

例题集合:1h24min

121.。。。。。。

 

 

贪心算法和动态规划的关系:

相同点

  1. 都是一种递推算法
  2. 均有局部最优解来推导全局最优解

 

不同点:

  • 贪心算法(了解即可,自己做的时候看懂就好)因为要证明最优解还需要时间而且可能会错

每一步的贪心决策都无法改变,之前的最优解不做保留,每一步的最优解一定包括上一步的最优解

 

  • 动态规划

(只要掌握动态规划就好,)

 

 

  • 区间调度问题

最多区间调度问题,可以通过贪心算法1h48min

最大区间:只能用DP

 

例题:56 merge intervals. 2h07min

435

452

252

715 Hard

 

背包问题(leetcode 一般只有01背包和完全背包问题)。

2h17min,记得V的循环顺序

 

lintcode有很多例题

 

 

[展开全文]

授课教师

课程特色

视频(25)

学员动态

Bianyw 加入学习
shjm 加入学习
YanHuang 加入学习
duoduo99 加入学习
wuhaojia 加入学习