从静态代码分配到图收缩及加速 Dijkstra 算法
图收缩与多终端割问题
在解决最优代码分配问题时,它等价于多终端割问题。为了处理这个问题,我们引入了一些关键概念和算法。
首先,定义了几种边界:
- 旧边界(Old Boundary):$O \subseteq E = (v, w) : v \in S_g \setminus I \land w \in I$
- 新边界(New Boundary):$N \subseteq E = (v, w) : v \in I \land w \in S_g \setminus I$
- 公共边界(Common Boundary):$C \subseteq E = (v, w) : v \in S_g \setminus I \land w \in S_g \setminus I$
根据$(S_g, S_g)$的定义,可知$g(O) = c(O)$。又因为$(C’, C’)$和$(S_g, S_g)$都是最小割,所以$w(O) + w(C) = w(N) + w(C)$,进而得出$w(O) = w(N)$。由于$g$是合法流,流入$I$的流量必定等于流出$I$的流量,即$g(O) = g(N)$。这三个等式结合会产生矛盾,因为$N$中的边是饱和的,在$G_g$中从任何$n \in I$都无法到达$t$,这意味着$I = \varnothing$。
接下来证明了松绑启发式算法的最坏执行时间在约简算法的复杂度范围内:
定理 9:如果 unshackle() 的复杂度为$O(nm \log(\frac{n^2}{m}))$,那么图 4 中的松绑算法可以以最坏
超级会员免费看
订阅专栏 解锁全文
13

被折叠的 条评论
为什么被折叠?



