我遇到了一个特定问题并正在寻找一些算法。要解决的问题如下所述。
假设我们有如下组合
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)
编辑:经过对该主题的更多研究后,我发现这个问题在“图论”中被称为“最小集团覆盖”问题的问候, 巴兹
答案 0 :(得分:1)
这不是一个真正的答案,而是一个扩展的评论。你的“压缩表示”实际上并没有任何空间。
在您存储的未压缩表示中:
这可以存储在1R + 18S中(其中R是存储规则所需的空间,S是存储符号所需的空间)
在你想要压缩的表示中,你必须存储:
在您的第一个“压缩”表示中,我计算1R + 12S + 8D(其中D是存储一个分隔符所需的空间)。如果S == D则为1R + 20S - 超过未压缩的表示。
在你的另外两个“压缩”表示中,我数相同:1R + 12S + 8D,1R + 12S + 8D。
我还没弄清楚这种非压缩是否是您提案的基本功能,或者是您选择的示例的偶然功能。
你的意思是,当你写那个
时组合元素的数量 实际上是N
某些组合将有3个元素,其他4个,其他2个或5个等等?
我建议你澄清你的问题。
编辑:@bazeusz:现在看来你正在寻找这些套装的笛卡儿产品。