假设我有两组:(n_1,n_2,...)和(m_1,m_2,...)和匹配函数匹配(n,m),它返回0到1之间的值。我想要找到两个集合之间的映射,以满足以下约束:
(我相信前三个是标准加权的二分匹配约束,但是如果我误解了加权二分匹配,我会指定它们)
在指数时间(相对于集合的大小)进行穷举搜索这是相对简单的,但我希望多项式时间(理想情况下为O((| n | * | m |)^ 3)或更好)解决方案存在。
我已经在“分配问题”/“加权二分匹配”上搜索了相当多的数量,并且看到了不同约束的变体,但没有找到匹配的或者我能够通过这个添加的顺序减少到一个约束。你有什么想法我可以解决这个问题吗?或者也许是在多项式时间内无法解决的粗略证明(对于我的目的,减少到NP-complete也会有效)?
答案 0 :(得分:7)
已经在“最大重量非交叉匹配”的名称下研究了该问题。有一个简单的二次时动态程序。设M(a,b)为n 1 ,...,n a 和m 1 ,...,m的最佳匹配值<子> b'/子>。我们有复发
M(0,b)= - b
M(a,0)= - a
M(a,b)= max {M(a-1,b-1)+ match(a,b),M(a-1,b)-1,M(a,b-1)-1}。
通过追溯argmax,您可以从其值中恢复最佳解决方案。
如果匹配明显少于大于-1的二次条目数,则有一个算法在有用条目数(Khoo and Cong, A Fast Multilayer General Area Router for MCM Designs)中按时间线性运行。