微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

查找由单个 MultiSet 中的元素组成的一组 MultiSet 的所有子集无需替换

如何解决查找由单个 MultiSet 中的元素组成的一组 MultiSet 的所有子集无需替换

同一作者的两个recent questions 1 一般用同样的技术解决。对我来说,这就像是一个经过研究并且可能很好解决的问题。

假设这是一个众所周知的问题,我想知道它可能被称为什么以及在哪里可以找到有关它的更多信息

这是我自己对问题的表述:

如果我们有一个集合,M,MultiSets2M_1 - M_n 由集合 S 的元素组成,并且我们有一个多组组件 C,也从 S提取,我们如何找到 M 的所有子集,使得对于每个子集,{{1} 的每个元素的重数}} 在其联合中不大于该元素在 S?3

中的多重性

例如,将 my own answer 解释为第一个问题:

我想我明白你想要的是这样的:

C

屈服

const catalog= ["ad","aab","ace","cd","ba","bd","adf","def"]
const components = ["a","b","a","c","d","e"]

simultaneousItems (catalog,components) 

结果中的每个数组都是目录项的子集,可以由提供的组件组合在一起。因此,例如,没有一个输出数组包含 [ ["ad","ace"],["ad","ba"],["ad"],["aab","cd"],["aab"],["ace","bd"],["ace"],["cd",["cd"],["ba"],["bd"],[] ] "adf",因为我们在组件中没有 "def",并且它们都不包含 both { {1}} 和 "f",因为我们在组件列表中只有两个 "ad"

请注意,我使用 "aab" 作为包含字符串 "a""abc""a" 的集合的简写。

最初的问题似乎是在寻找最大子集,所以还有一个额外的步骤,这可能是一个同样有趣的问题,但我对上面的版本更好奇。

请不要将我的解决方案视为任何一种算法理想。这是我想到的第一个想法。

这是一个众所周知的问题吗?与背包问题和其他包装问题有一些模糊的关系,但我无法弄清楚要搜索内容和位置。


1first one 更接近我认为的基本算法问题。我假设 second one 更接近 OP 试图解决的真正问题。 OP 还没有任何反馈,我不确定我的答案是否符合实际需求,但无论如何我觉得这是一个有趣的问题。

2"b""c"。 (definition)

3 如果 C = {S_1^m(z_1),S_2^m(z_2),... S_j^m(z_j)} 对于一些整数 jS_1 ,S_2,... S_jS 中,如果 N = { M_a_1,M_a_2,... M_a_k} 是结果中 M 的子集之一,∪ {M_a_1,... M_a_k} = {S_1^m(x_1),S_2^m (x_2),... S_j^m(x_j)},那么对于所有的 ix_i z_i.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。