Lec 17 动态规划, Part 3: ASPS, Parens, Piano
总览
- Bellman-Ford SSSP
- Flayd-Wallshall APSP
- 算术括号问题
- 钢琴指法问题
单源最短路径:Bellman-Ford 算法
SRTBOT分析:
Subproblems
- 扩展子问题,使其无环
- $\delta_k(s, v) = $ 从 s 到 v 的最短路径权重, 最多使用 k 条边
- for
&
Relate
guessing "lost edge(u, v) on shortest s->v path"
观察到,𝛿_k(s, v) = 𝛿_{k-1}(s, u) + w(u, v),这个递归不存在循环。如果随着k增长,都是满足上述等式,
- Topological order: increasing k
Topo order of G
Base case: 𝛿_{0}(s, s) = 0 , 𝛿_{0}(s, v) = ∞ for v ≠ s
Original: 𝛿_{|v| -1}(s, v) for v ∊ V: 𝛿_{|v|}(s,v) for neg-weight cycle detection
Time:
- 子问题数目:
- 每个子问题的工作量
- 总的时间:
- 子问题数目:
全源最短路径: Floyd-Warshall 算法
弗洛伊德演算法。
顶点标上序号1, 2, ... |V|
subprobs: d(u, v, k) = u->v最短路径的权重,其中仅用到在集合{u, v} ∪ {1, 2, ...,k}的顶点 for u, v ∊ V & 0 <= k <= |V|, θ(|V|^3)
Relate: d(u, v, k) =
- u --(1,...,k-1)---> v (第一种情况,不需要使用k).即 k ∉SP
- u --(k-1)--->k, k ---(k-1)--->v, 即 k ∊SP
topo: increasing k, for k = 0, 1, ... |v| for u ∉ V for v ∊V
Base: S(u, v, 0) =
- 0 if u = v ;
- w(u,v) if (u, v) ∊ E
- ∞ otherwise
并且假设没有负权重环
Orignialfeas
钢琴指法问题
问题描述:
给定序列
- 如果$1 \lt f \lt f' $ 且
,则是不舒适的 - 连续(平滑)演奏要求
(否则罚分是无限大) - 弱指规则,尽量避免使用
是令人烦恼的
目标: 为音符分配手指,以最小化总难度
第一次尝试SRTBOT分析:
Subproblem
- x(i) = 最小化的演奏难度分,弹奏音符为
- x(i) = 最小化的演奏难度分,弹奏音符为
Relate
- 猜测第一个手指, 给
分配 f 手指 - 没有足够的信息来填写 ?
- 问题
- 需要知道在开始
时使用哪个手指 - 不同的起始手指可能会影响
和 的结果
- 需要知道在开始
- 解决方案
- 需要一个表来映射起始手指到
的最优解 - 也就是说,需要通过起始条件来扩展子问题
- 需要一个表来映射起始手指到
- 猜测第一个手指, 给
最终解决方案SRTBOT分析:
Subproblem
最小化的演奏难度分,弹奏音符为 ,并且手指f在字符 - For
且
Relate
- 猜测下个手指: 将 f' 分配给
- 猜测下个手指: 将 f' 分配给
拓扑顺序
- 逐步减小 i (任何 f 顺序)
Base
没有转换
Original
Time
- Θ(n · F) subproblems
- Θ(F) work per subproblem