【问题标题】:Select the most elements that do not overlap so that the sum of their size is maximized选择最多不重叠的元素,使它们的大小总和最大化
【发布时间】:2017-06-20 02:12:31
【问题描述】:

我正在尝试找到解决以下问题的算法。

假设我有许多对象 A、B、C、...

我有这些对象的有效组合列表。每个组合的长度为 2 或 4。

例如。 AF、CE、CEGH、ADFG、...等等。

对于两个对象的组合,例如。 AF,组合的长度为2。对于四个对象的组合,例如CEGH,组合的长度。

我只能选择不重叠的组合,即我不能选择 AF 和 ADFG,因为它们都需要对象“A”和“F”。我可以选择 AF 和 CEGH 的组合,因为它们不需要公共对象。 如果我的解决方案仅包含 AF 和 CEGH 两个组合,那么我的目标是组合长度的总和,即 2 + 4 = 6。

给定一个对象列表及其有效组合,我如何选择不相互重叠的最有效组合,以便最大化组合长度的总和?我不想将其表述为 IP,因为我正在处理具有 180 个对象和 1000 万个有效组合的问题实例,并且使用 CPLEX 解决 IP 的速度非常慢。寻找其他优雅的方法来解决它。我可以将其转换为网络吗?并使用最大流算法解决它?还是动态程序?不知道如何解决这个问题。

【问题讨论】:

  • "CEGH,组合的长度。"​ ->​“CEGH,组合的长度为4。”​ ​ ​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
  • 考虑由 [[X 与 Y] 给出的对象上的无向图当且仅当 [XY 是至少一个有效组合的子集]]。 ​(你可以通过一次有效的组合来构建该图。)该图是连通的吗?如果不是,那么您可以轻松地将您的问题拆分为严格更小的不相交子问题。​ ​ ​
  • 如果它是连通的,则计算顶点容量为 log ( 1 + 对象所在的有效组合数) 和边容量为 log ( 1 + 边的有效组合数) 的子集并尝试使用contracting 不相交的可能但非必要连接并使用generalized max-flow。 ​(这些容量可以通过你的有效组合计算一次。)​​​​​​
  • 当你得到不太高的流量时,尝试增长要收缩的子图。​如果您可以使两个子图都相当大而不会允许过多的流量,那么您可以将您的问题减少到不是太多显着更小的子问题。​ ​ ​
  • @RickyDemer 感谢您的回答-您能否将我引导到更详细解释的地方(如果存在)?也许举个例子?

标签: algorithm dynamic-programming combinatorics network-flow


【解决方案1】:

我第一次尝试证明这个问题是 NP-hard 是错误的,因为它没有考虑到只允许大小为 2 或 4 的组合这一事实。然而,使用Jim D.'s suggestion 减少3-dimensional matching (3DM),我们可以证明这个问题仍然是 NP-hard。

我将展示你的问题的自然决策问题形式(“给定一组 O 对象,一组来自 O 的 2 或 4 个对象的组合 C 和一个整数 m,是否存在一个子集? C 中的 D 使得 D 中的所有集合都是成对不相交的,并且 D 中所有集合的并集大小至少为 m?") 是 NP 难的。显然,优化问题(即您的原始问题,我们在其中寻找使上述 m 最大化的实际组合子集)至少与这个问题一样困难。 (要看到优化问题并不比决策问题“难”很多,请注意,您可以首先使用对 m 进行二分搜索找到解决方案存在的最大 m 值,其中您在每个步骤中解决决策问题,然后,一旦找到这个最大的 m 值,解决一系列决策问题,其中每个组合依次被删除:如果删除某个特定组合后的解决方案仍然是“是”,那么它也可能被排除在外未来的问题实例,而如果解决方案变为“否”,则有必要在解决方案中保留这种组合。)

给定一个 3DM 的实例 (X, Y, Z, T, k),其中 X、Y 和 Z 是彼此成对不相交的集合,T 是 X*Y*Z 的子集(即,一组有序三元组,分别具有来自 X、Y 和 Z 的第一、第二和第三分量)并且 k 是整数,我们的任务是确定是否存在 T 的任何子集 U 使得 |U| >= k 并且 U 中的所有三元组都是成对不相交的(即,要回答“T 中是否至少有 k 个不重叠的三元组?”)。要将任何此类 3DM 实例转换为您的问题的实例,我们需要做的就是从 T 中的每个三元组创建一个新的 4 组合,通过向每个三元组添加一个不同的虚拟值。问题的构造实例中的对象集将由 X、Y、Z 和 |T| 的并集组成。我们创建的虚拟值。最后,将 m 设置为 k。

假设原始 3DM 实例的答案是“YES”,即 T 中至少有 k 个不重叠的三元组。那么这样的解中的 k 个三元组中的每一个对应于输入中的一个 4-组合C 到您的问题,并且这 4 个组合中没有两个重叠,因为通过构造,它们的第 4 个元素都是不同的,并且通过假设。因此,在您的问题实例中至少有 m = k 不重叠的 4 组合,因此该问题的解决方案也必须是“是”。

在另一个方向,假设你的问题的构造实例的解决方案是“是”,即在 C 中至少有 m 个不重叠的 4 组合。我们可以简单地取每个的前 3 个元素4 个组合(丢弃第 4 个)以在 T 中生成一组 k = m 非重叠三元组,因此原始 3DM 实例的答案也必须为“是”。

我们已经证明,对一个问题的肯定回答意味着对另一个问题的肯定回答,因此对一个问题的否定回答意味着对另一个问题的否定回答。因此问题是等价的。您的问题实例可以清楚地在多项式时间和空间中构建。因此,您的问题是 NP 难的。

【讨论】:

    【解决方案2】:

    您可以将此问题简化为maximum weighted clique problem,不幸的是,这是 NP-hard。

    构建一个图,使每个组合都是一个权重等于组合长度的顶点,如果相应的组合不共享任何对象(即如果您可以同时选择它们),则连接顶点。那么,当且仅当它是该图中的一个团时,一个解才是有效的。

    在google上简单搜索一下,针对这个问题有很多近似算法,比如this one

    【讨论】:

    • @JimD。你什么意思?
    • @JimD。 “当且仅当”双向工作。换句话说,集团的集合都是有效的解决方案,不存在其他有效的解决方案(即不是集团)
    • 如果我理解正确,您表明给定一个 OPs 问题的实例,您可以将其转换为最大加权集团的实例。为了证明 OPs 问题是 NP-hard,你不需要展示一个最大加权 clique 的实例可以转化为 OPs 问题的一个实例吗?我们已经知道 NP 中的任何问题都可以在多项式时间内转化为最大 wighted clique 的实例,因为它是 NP 完全的。
    • @JimD。好吧,我明白你的意思了,我没有意识到这一点。如果存在,我将尝试提出正确的证明
    • 我建议尝试将3-dimensional matching 减少到 OPs 问题。如果你能做到这一点,这将对近似算法产生一些有趣的影响。
    猜你喜欢
    • 2019-06-27
    • 1970-01-01
    • 2012-10-17
    • 2011-09-07
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 2018-01-03
    相关资源
    最近更新 更多