说我有两套,set1 = {a,b,c,d,e,f}
和set2 = {a,b,c,d,e,g}
。我没有明确地表达这些,而是想创建像
common = {a,b,c,d,e}
set1 = common + f
set2 = common + g
如果我们想要代表{a,b,c,h}
,我们可以将其表示为common - d - e + h
。
我的目标基本上是能够生成要使用的最佳公共部分。只有一个共同的部分,这不是太具有挑战性,但我需要允许不止一个(但不是无限制,或获得的好处将是微不足道的)。
最佳,我的意思是“表达的元素数量最少”。因此,在上面的示例中,使用common
变量“成本”5(元素数量)。然后设置1和2都是成本2(一个用于引用公共,一个用于添加额外元素),总计为7.没有替换,这些将花费12来存储(每个6个元素)。类似地,从引用中减去一个元素“cost”1。
另一个例子,
{a,b,c,d}, {a,c,d,e}, {e,f,g,h} and {e,f}
可能是
common1 = {a,c,d}
common2 = {e,f,g}
set1 = common1 + b
set2 = common1 + e
set3 = common2 + h
set4 = common2 - g
通过允许多个共同部分,这变得更具挑战性。是否存在此类问题的名称或类似问题?看起来它可能与压缩有关,但我无法找到太多资源,从哪里开始。
其他一些可能相关的细节: