MIT算法导论公开课之第18课 最短路径算法、Bellman和差分约束系统

Bellman-Ford 算法

图G=(V,E),选取s∈V作为图的原点,此算法可计算最短路径δ(s,v)(v∈V)或报告出图中存在负权值的环路。

Exercise

在路径中存在负权值的环路时,将δ(s,v)设置为-∞。

Bellman-Ford 算法伪码

d[s] ← 0
for each v∈V-{s}
    d[v] ← ∞
for i ← 1 to |V|-1
    for each edge(u,v)∈E
        if d[v] > d[u]+w(u,v)
            d[v] ← d[u]+w(u,v) //松弛步骤
for each edge(u,v)∈E
    if d[v] > d[u]+w(u,v)
        报告图中存在负权值的环路
    else
        δ(s,v)=d[v]

运行时间Time=O(V·E)。
  • Ex:
    Bellman-Ford 算法实例
    注:每次选取边的顺序可以是都不一样的,这里为了简单描述都采取了一样的顺序。

Bellman-Ford 算法正确性

Bellman-Ford 算法正确性

线性规划(Linear Programming)

  • 给定一个m x n阶的矩阵A,一个m阶的向量b和一个n阶的向量c,目标是找到一个n阶的向量x,能够最大化cT·x且满足约束条件Ax<=b,或是说明没有符合要求的x存在。
  • 图解:
    线性规划

线性规划问题解法

单一算法(simplex algorithm):
    最古老的算法,最坏情况下运行时间为指数阶的,但在实际使用中效果还不错。
椭球算法(ellipsoid algorithm):
    理论上是第一个在多项式时间内解决线性规划的算法,但在实际使用中效果差。
内点法(interior point method):
    在多项式时间内解决线性规划,在实际使用中也很实用。
随机抽样(random sampling):
    两位MIT教授发明的算法,理论上效果不错。

线性可行性问题

找到x满足约束条件Ax<=b,而不用最大化cT·x(找到可行解即可)。
此问题的复杂度并不比线性规划问题低。

差分约束系统(System of difference constraints):

一个差分约束系统是一个线性可行性问题,矩阵A的每一行只有一个1,一个-1,其他值都为0。

即每一个描述约束条件的不等式都只包含两个变量和一些数字,xj-xi<=wij。

  • Ex:

    • 问题:
      x1-x2<=3
      x2-x3<=-2
      x1-x3<=2
    • 解:
      x1=3
      x2=0
      x3=2
  • 约束图:
    将xj-xi<=wij转化为:
    约束图
    由此可知转化后的图G=(V,E),|V|=n,|E|=m。
    与xj<=xi+wij类似的形式d[vj]<=d[vi]+wij。

Ex:
这里写图片描述

  • 定理:
    如果约束图存在负权值的环路,那么相应的差分约束系统无解。
    证明:
    假设v1 → v2 → … → Vk → V1是一个负权值的环路。
    则有:
    x2-x1<=w12
    x3-x2<=w23
    .
    .
    .
    x1-xk<=wk1
    左侧相加为0,右侧相加为负数,从而证明了差分约束无解。

  • 定理:
    如果约束图不存在负权值的环路,那么相应的差分约束系统有解。
    证明:
    在约束图G中加入一个新的顶点s,并加入从顶点s到其他所有顶点的边,权值都设为1。
    约束图不存在负权值
    这样就可以在此图上运行Bellman-Ford算法求最短路径。

xi=δ(s,vi)
要满足xj-xi<=wij
即证δ(s,vj)-δ(s,vi)<=w(vi,vj)
    δ(s,vj)<=δ(s,vi)+ w(vi,vj)
由反正法此式可知显然成立,即Bellman-Ford算法求得的键值即为可行解。
  • 差分约束系统时间:
    使用Bellman-Ford算法,运行时间为O(m·n)。

  • Exercise:
    使用Bellman-Ford算法获得的差分约束系统的解,满足xi<=0,xj-xi<=wij,且得到的是Max(x1+x2+…+xn)和Min(max xi – min xi)(尽可能的密集)的解。
    最小化了线性规划范数。

VLSI布局问题

将一堆电路零件放在一起,要求它们之间有个距离限制。
这里写图片描述
一维上的布局可抽象成差分约束问题,进而使用Bellman-Ford算法求得尽可能紧凑的集成电路布局方案。

  • 其他应用:
    例如视频剪辑方案的制定。

猜你喜欢

转载自blog.csdn.net/rye_whiskey/article/details/82190906
今日推荐