从这些集合的组合重新创建集合

时间:2010-09-24 15:21:53

标签: algorithm graph-theory combinatorics cartesian-product clique

我遇到了一个特定问题并正在寻找一些算法。要解决的问题如下所述。

假设我们有如下组合

1 - 3 - 5

1 - 4 - 5

1 - 8 - 5

2 - 4 - 5

3 - 4 - 5

2 - 4 - 7

这些组合是从给定的集合中生成的,在这种特殊情况下,我们可以从

中得出

{1},{3,4,8},{5}

{2,3},{4},{5}

{2},{4},{7}

我想要做的是从这些组合中重新创建集合。我知道对于这些组合,您有多个解决方案,例如

第一个解决方案

{1},{3,4,8},{5}

{2,3},{4},{5}

{2},{4},{7}

第二个解决方案

{1},{3,8},{5}

{1,2,3},{4},{5}

{2},{4},{7}

第3个解决方案

{1},{3,4,8},{5}

{3},{4},{5}

{2},{4},{5,7}

但是最终(最佳)解决方案将是具有尽可能少的集合或者随机的解决方案,以防它们在集合计数方面都是等效的。

是否存在针对此类问题的算法?如果有任何处理过这类问题的人可以给我一些提示,我感激不尽。

编辑:看起来我正在寻找的是n-ary产品的分解(笛卡尔积为N)

编辑:经过对该主题的更多研究后,我发现这个问题在“图论”中被称为“最小集团覆盖”问题

的问候, 巴兹

1 个答案:

答案 0 :(得分:1)

这不是一个真正的答案,而是一个扩展的评论。你的“压缩表示”实际上并没有任何空间。

在您存储的未压缩表示中:

  • 规则,即每个组由3个符号组成;和
  • 18(在您的示例中)符号。

这可以存储在1R + 18S中(其中R是存储规则所需的空间,S是存储符号所需的空间)

在你想要压缩的表示中,你必须存储:

  • 规则,即每组由3组符号组成;
  • 每组中的符号;和
  • 另一个符号,用于界定下一个集合。

在您的第一个“压缩”表示中,我计算1R + 12S + 8D(其中D是存储一个分隔符所需的空间)。如果S == D则为1R + 20S - 超过未压缩的表示。

在你的另外两个“压缩”表示中,我数相同:1R + 12S + 8D,1R + 12S + 8D。

我还没弄清楚这种非压缩是否是您提案的基本功能,或者是您选择的示例的偶然功能。

你的意思是,当你写那个

  

组合元素的数量   实际上是N

某些组合将有3个元素,其他4个,其他2个或5个等等?

我建议你澄清你的问题。

编辑:@bazeusz:现在看来你正在寻找这些套装的笛卡儿产品