计算机算法设计与分析
Session 1
- 先观察问题的结构、解的形式,再设计算法;
- 能分解成子问题,是非常有效的信息;
- 优化问题时,下界很重要。
Session 2
- 给一个问题,从最简单的case入手;
- 观察INPUT的关键结构,看能否分、能否combine;
- 观察OUTPUT,不要坚持追求optimal,追求sub-optimal。
Session 3
Sample.
Session 4
- 手动执行最基本的算法,发现冗余;
- merge时,考虑引入结构;
- 离散化。
Session 5
- 省内存:分问题的另一种思路
- 省时间:Banded DP
- Optimal→Sub-optimal
- ???
Session 6
- 子问题的描述方式:
- 背包-子集:指数多-{1,2,3,…}前i个:多项式。
- 最短路径-子图:指数多-引入新变量表示解:k步。
- 递归中有at most如何表示?加一个递归项
- DP需要空间太多→用NN表示函数
Session 6
- 每一个Greedy的背后都有一个more cumbersome DP
- weight加强后,有可能不用枚举
- 先做一个笨方法,再发现冗余
Session 7
- loose the structure but don’t loost it too much
- 分析时:一个操作慢,但随后操作快,均摊
- 求和:每一项转乘phi的差,相约
Session 8
- 要允许剪枝,但不要剪太多→不要偏离完美的树太远
- 抽象,就能推广
Session 10
- 写LP时,先写自然语言,再转成不等式约束
- 不要只用不等式约束,再加上目标函数约束、
Session 1221
Lagrange乘子就是对偶变量
Session 1228
- 千方百计构造一个对手出来
- 构造对手:
3. y 直接构造 x
4. 找一个隐含变量B,同时构造x和y
Session 0104
目标:
x_i \sigma_i = 0
Relaxed!
x_i \sigma_i = \mu
Session 0106
- Optimal → Sub-Optimal
- Scaling
- 分析一个event的发生次数:找一个量\Phi,考察连续两次event中间发生了什么
- 花了很多时间,把opt的所有油水全榨干