我有一个匹配的问题,我不知道如何解决它:
Given a complete bipartite graph (A, B).
Each node a_i in A, has two states: s(a_i)=0 or s(a_i)=1
Weighted edges are declared as: w(a_i, b_j, s(a_i))
修复状态配置,问题变为最大匹配。
目标是找到最小匹配的配置。
示例:
|A|=|B|=1
w(a_0, b_0, 0) = 5;
w(a_0, b_0, 1) = 9;
最大匹配数是5和9,所以答案是5。 (所以配置是s(a_0)= 0)
答案 0 :(得分:2)
我怀疑这是作业,因为提问者正在使用他的真名。
不幸的是,找到一个近似比率优于2的状态分配(假设为Unique Games;否则为1.3606) NP-hard 。设G是最小顶点覆盖的实例。集合A在G中具有每个边的顶点。集合B在G中具有用于每个顶点的顶点。设w(a j ,b k ,0)是如果对应于 j 的边的较小端点对应于b k ,则为1,否则为0。相对于更大的端点,类似地定义w(a j ,b k ,1)。此实例的最小最大匹配的基数等于G的最小顶点覆盖,后一个问题很难近似。
在算法方面,我们可以通过线性编程双重替换内部最大权重匹配问题,以便最小化。这里y j 是对应于 j 的双变量,而z k 是对应于b k 的双变量>
minΣ j y j +Σ k z k
s.t。
∀j,K。 y j + z k ≥(1 - s(a j ))w(a j ,b < sub> k ,0)+ s(a j )w(a j ,b k ,1)
∀j。 s(a j )∈{0,1}
∀j。 y j ≥0
∀k。 z k ≥0
这个公式是一个混合整数程序,可以通过现成的软件(例如,GNU线性编程套件)在不需要太多人力的情况下攻击。它可能会或可能不会比暴力更好。