Bellman-Ford算法的差分约束

时间:2013-04-10 16:31:18

标签: algorithm bellman-ford

假设我们想使用Bellman-Ford来最小化max_i x_i - min_i x_i

通过变量x_1,x_2,... x_n(变量的总数n)

受x形式的m个约束约束 - x_j< = c_ {i,j}

其中c_ {i,j}是指定的常量,可以是负数。

如何证明Bellman-Ford可用于在O(n * m)时间内解决此类问题?

我尝试了以下内容:

为每个变量x_i

创建一个节点i

制作源节点

从s到所有其他节点创建0权重边缘

不确定在此之后该怎么做...请帮助,谢谢。

2 个答案:

答案 0 :(得分:2)

这是我的方法,但我不认为它是O(m * n),但它可能会指导你朝着正确的方向前进。一个好的尝试是绘制图片,假设我们有以下约束:

Set of Constraints

相应的约束图如下所示:

enter image description here

现在请注意,在您的情况下,您有一整套约束,因此约束图将是一个完整的图形。我们现在将从您的问题中考虑图表中的路径。现在考虑一个从x_i开始,到x_j结束的路径。这通过点x_i1,x_i2 ......,x_ik。所以我们的路径是{x_i,x_i1,...,x_ik,x_j}。由于设置不等式的方式,这条路径为我们提供了一个新约束(x_i - x_i1)+(x_i1 - x_i2)+ ... +(x_ik - x_j)= x_i - x_j。

这里发生的事情即使我们有一个约束x_i - x_j< = c [i,j],我们可以通过采用其他约束的线性组合来找到对x_i和x_j的更严格的约束,这些约束由路径表示这个完整的图表。

因此修复任何顶点x_i并找到其最严格的约束,即Bellman ford指向任何其他顶点的最短路径。然后为所有我做这个,并采取最低限度。

答案 1 :(得分:0)

一般情况下,您不能使用bellman-ford算法来解决此问题。 anil的答案提到的一个反例(在此页面上)。在他的答案中提到的图表中,我们有一个负圆圈(doTry()):sum of weights = -1,因此我们不能将Bellman-ford算法用于此类图形和问题。