假设我们想使用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权重边缘
不确定在此之后该怎么做...请帮助,谢谢。
答案 0 :(得分:2)
这是我的方法,但我不认为它是O(m * n),但它可能会指导你朝着正确的方向前进。一个好的尝试是绘制图片,假设我们有以下约束:
相应的约束图如下所示:
现在请注意,在您的情况下,您有一整套约束,因此约束图将是一个完整的图形。我们现在将从您的问题中考虑图表中的路径。现在考虑一个从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算法用于此类图形和问题。