二分图和动态规划

时间:2014-03-06 05:38:18

标签: dynamic-programming bipartite

我正在解决一个问题,它有一个加权的完全二分图(X,Y,XxY),其中X有n个节点,Y有m个节点,n小于m。我希望有一个完美的交叉自由匹配图,这样没有两个边交叉而匹配集X来设置Y并且X中的所有节点都在最后。所得图的权重之和应该是最小的,我需要设计动态编程算法。这就是我想到的:

X和Y中的节点排列为x0,xi可以具有到Y0,Yi等的水平边缘,但是Y具有比X更多的节点。 对于X(i)中的每个节点,我考虑两个选项:水平邻居,即集合Y中的j,或对角邻居(i,j-1),(i,j + 1),并选择最小化成本的边缘。我跟踪已经采用的X和Y中的节点。时间复杂度O(nm)

有没有更好的方法来实现这一点。任何帮助表示赞赏。这是我在期中考试中遇到的一个问题,但我选择了这个问题。

1 个答案:

答案 0 :(得分:0)

w(x, y)成为x中节点XyY之间的边权重,让M(i, j)成为解决方案(最小交叉)自由匹配图表)用于顶点{x_0, x_1, ..., x_i} subset X{y_0, y_1, ..., y_j} subset Y,其中i < |X|j < |Y|

E.g。 M(0, j) = min( w(x_0, y_a) ) for 0 <= a <= jM(i, i-1) = infinity因为'right'设置较小时没有匹配。

对于i, j,有两种可能性:x_i是否与y_j相关联。因为递归持有:

M(i, j) = min( w(i,j) + M(i-1, j-1), M(i, j-1) )