【发布时间】:2012-02-28 12:55:15
【问题描述】:
假设我有两个集合:(n_1, n_2, ...) 和 (m_1, m_2, ...) 以及一个匹配函数 match(n, m),它返回一个从 0 到 1 的值。我想要找到满足以下约束的两个集合之间的映射:
- 每个元素在相反的集合中最多只能有 1 个匹配的元素。
- 不匹配的元素将与成本为 1 的虚拟元素配对
- 匹配函数应用于所有元素时的总和最大
- 我在正式表达这一点时遇到了麻烦,但是如果您按照原始顺序将每个集合相互平行地排列并在匹配的元素之间画一条线,那么这些线都不会交叉。前任。 [n_1m_2, n_2m_3] 是有效的映射,但 [n_1m_2, n_2m_1] 不是。
(我相信前三个是标准的加权二分匹配约束,但我指定了它们以防我误解了加权二分匹配)
在指数时间内进行详尽搜索(相对于集合的大小)相对简单,但我希望多项式时间(理想情况下为 O((|n|*|m|)^ 3) 或更好的) 解决方案存在。
我已经在“分配问题”/“加权二分匹配”方面进行了大量搜索,并看到了具有不同约束的变体,但没有找到匹配的或者我能够通过添加的排序减少到一个约束。您对我如何解决这个问题有任何想法吗?或者也许是一个粗略的证明,证明它不能在多项式时间内解决(为了我的目的,减少到 NP 完全也可以)?
【问题讨论】:
-
抱歉订购不是简化。你有序列作为输入或集合?因为没有有序集
-
对术语感到抱歉,我认为将输入视为序列而不是集合是合适的。