Skip to content

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 vV & 0<=k<=|V|
  • Relate

    • 𝛿_k(s,v)=min{𝛿_k1(s,u)+w(u,v)|uAdj(v)}𝛿k1(s,u)

    • 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:

    • 子问题数目:|V|×(|V|+1)
    • 每个子问题的工作量δk(s,v):O(degin(v))
    • 总的时间:k=0|V|vVO(|degin(v)|)=k=0|V|O(|E|)=O(|V|·|E|)

全源最短路径: 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) = min{d(u,v,k1),d(u,k,k1)+d(k,v,k1)}

    • 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) =

    1. 0 if u = v ;
    2. w(u,v) if (u, v) ∊ E
    3. ∞ otherwise

    并且假设没有负权重环

  • Orignialfeas

钢琴指法问题

问题描述:

给定序列t0,t1,...tn1 单音符,用右手弹奏,右手手指分别是1,2,...,f,给定过渡从音符t及其手指f,到音符t'及其手指f'的难度度量d(t,f,t,f)

  • 如果$1 \lt f \lt f' $ 且 t>t,则是不舒适的
  • 连续(平滑)演奏要求 t=t (否则罚分是无限大)
  • 弱指规则,尽量避免使用 f{4,5}
  • {f,f}={3,4} 是令人烦恼的

目标: 为音符分配手指,以最小化总难度

第一次尝试SRTBOT分析:

  • Subproblem

    • x(i) = 最小化的演奏难度分,弹奏音符为ti,ti+1,...,tn1
  • Relate

    • 猜测第一个手指, 给ti 分配 f 手指
    • x(i)=min{x(i+1)+d(ti,f,ti+1,?)|1fF}
    • 没有足够的信息来填写 ?
    • 问题
      • 需要知道在开始x(i+1)时使用哪个手指
      • 不同的起始手指可能会影响 x(i+1)d(ti,f,ti+1,?)​ 的结果
    • 解决方案
      • 需要一个表来映射起始手指到x(i+1)的最优解
      • 也就是说,需要通过起始条件来扩展子问题

最终解决方案SRTBOT分析

  • Subproblem

    • x(i,f) 最小化的演奏难度分,弹奏音符为ti,ti+1,...,tn1,并且手指f在字符ti
    • For 0i<n1fF
  • Relate

    • 猜测下个手指: 将 f' 分配给 ti+1
    • x(i,f)=min{x(i+1,f)+d(ti,f,ti+1,f)|1fF}
  • 拓扑顺序

    • 逐步减小 i (任何 f 顺序)
  • Base

    • x(n1,f)=0 没有转换
  • Original

    • min{x(0,f)|1fF}
  • Time

    • Θ(n · F) subproblems
    • Θ(F) work per subproblem
    • Θ(n·F2)