我正在解决一个问题,它有一个加权的完全二分图(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)
有没有更好的方法来实现这一点。任何帮助表示赞赏。这是我在期中考试中遇到的一个问题,但我选择了这个问题。
答案 0 :(得分:0)
让w(x, y)
成为x
中节点X
和y
中Y
之间的边权重,让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 <= j
。 M(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) )