【问题标题】:Group tuples such that each item in a group shares no common elements with other members组元组,使得组中的每个项目与其他成​​员不共享公共元素
【发布时间】:2016-08-15 22:30:37
【问题描述】:

所以我遇到了一个像这样的现实世界问题:我们有一个需要分类的对列表。我们希望最大限度地减少我们拥有的组总数,并限制组中的任何成员不能与组中的任何其他成员共享元素。

这是一个例子。我们的元组列表是 (A, B), (B, C), (C, A), (D, E), (F, G)。我们可以通过[(A,B),(D,E),(F,G)],[(B,C)],[(C,A)]来形成三个组。

是否有可能在多项式时间内最优地解决这个问题?贪婪的解决方案有多糟糕?这可能是一个不同的问题,但我无法完全弄清楚如何将其简化为其他问题(想到图形着色)。

【问题讨论】:

  • 您能否发布一个更长的示例,或者给出实际输入的大小的想法?可以有重复的元组吗?您是否希望每个元素出现的次数或多或少相等?
  • 输入的大小在 20-60(对)范围内。没有重复的元组,即如果 (A, B) 在集合中,则没有其他 (A, B) 或 (B, A)。我对单个元素没有任何分布知识(尽管在实践中我怀疑某些元素比其他元素出现的频率更高,但为了问题,我不知道情况是否如此——如果对问题有一些概率知识产生更好的平均案例解决方案,让我知道,我可以尝试提供)
  • 输入有大约多少个不同的字母(或任何代表的字母)?​您是否尝试过您的图表中的approximating the minimum-vertex-cover-size 和他们的complement graphs?​ 你试过approximating the treewidth 的图表吗?​ ​ ​

标签: algorithm sorting tuples grouping


【解决方案1】:

上述问题可以被认为是edge-coloring problem:您有一个图,其中每个元组条目都是一个节点,边由元组给出。然后将元组聚类成组对应于查找不共享端点(匹配)的边缘组,然后可以在边缘着色中为其分配相同的颜色。换句话说,每个边缘着色给你一个聚类,每个聚类给你一个边缘着色。不幸的是,NP-很难找到最佳的边缘着色,所以你的问题通常是 NP-hard。对于这个问题,有一些近似算法可以产生常数因子近似值,但除非 P=NP 没有精确的算法。

如果你将这个问题概括为每个元组允许任意数量的元素,那么这个问题就会变得更加困难。这个问题的一般版本确实是 NP-hard,并且真的很难通过减少图形着色来近似。我将展示一个在特定情况下减少的示例,但它可以很好地概括。

给定一张这样的图表:

 A -- B -- C
 |    |    |
 D -- E -- F

我们将创建一组元组,每个节点一个,其中元组中的每个条目是与该节点相邻的一组边。例如,在上图中,我们将形成这些元组:

( AB, AD )
( AB, BC, BE )
( CB, CF )
( AD, DE )
( BE, DE, EF )
( CF, EF)

现在,假设其中两个元组不重叠。这意味着与这些元组对应的两个节点不能相邻,因为如果它们相邻,它们之间的边将是元组中的公共元素,因此它们不能被聚类。另一方面,如果两个节点不相邻,那么它们的元组可以一起分组到同一个簇中,因为一个元组中的边不会出现在另一个元组中。

鉴于此设置,原始图的任何着色都提供了一种对元组进行聚类的方法(将具有相同颜色的节点的所有元组放入同一个集合中;它们都不相邻,因此它们不会冲突),并且对元组进行聚类的任何方式都会给出着色(将与集群中每个元组对应的所有节点着色为相同颜色)。因此,找到最小的簇数对应于找到原始图的色数,这是 NP-hard 并且不知道允许任何接近真实值的近似算法。

【讨论】:

  • 我在这里看到了一个潜在的问题。元组实际上似乎仅限于对(OP 在“元组”之前使用“对”这个词 - 诚然是模棱两可的),所以我认为你不能编码 set 的事件边一个节点到一个 single 元组中,如果它们的对应节点共享一条边,则两个元组重叠。我认为您可以使用 multiple 元组对该集合进行编码,但是(至少对我而言)如何从元组簇变为着色并不明显,因为对应于顶点的元组可能是分布在多个集群中。
  • @j_random_hacker 我也注意到了……在我写完这篇文章之后。 :-) 在顶部提到边缘着色的编辑应该更准确地解决这个事实,并且仍然建立 NP 硬度。
  • 对不起那些家伙。我应该意识到这一点并将其限制在其中一个。在实践中,这个问题只是查看元素对。
  • @templatetypedef:感谢您的更新。由于事实证明边缘着色已经是 NP 难的,因此您无需费心证明更一般的问题(任意元组而不是仅对)也是 NP 难的——它必须是,因为它包含配对问题作为一个特例。
  • @j_random_hacker 这绝对是真的。我在这里包含了更通用的版本,以防问题确实泛化到元组......并且因为我认为这是一个很酷的证明。 :-)
猜你喜欢
  • 2017-05-11
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多