我有一套S
。它包含N
子集(其中又包含一些不同长度的子子集):
1. [[a,b],[c,d],[*]]
2. [[c],[d],[e,f],[*]]
3. [[d,e],[f],[f,*]]
N. ...
我还有一个L
包含在集合中的“独特”元素列表S
:
a, b, c, d, e, f, *
我需要从每个子集的每个子集之间找到所有可能的组合,以便每个结果组合都具有 list 中的一个元素L
,但该元素的出现次数为任意数量[*]
(它是通配符元素)。
因此,使用上述集合的所需函数的结果S
应该是(不是 100% 准确):
- [a,b],[c],[d,e],[f];
- [a,b],[c],[*],[d,e],[f];
- [a,b],[c],[d,e],[f],[*];
- [a,b],[c],[d,e],[f,*],[*];
所以,基本上我需要一个执行以下操作的算法:
- 从子集中取一个子集
1
, 2
从维护到目前为止获得的“唯一”元素列表的子集中添加一个子集(如果子集包含该*
元素,则跳过对“唯一”列表的检查);- 重复
2
直到N
达到。
换句话说,我需要生成所有可能的“链”(它是对、 ifN == 2
和三元组 if N==3
),但是每个“链”应该只包含列表中的一个元素,L
除了可以在每个生成的通配符元素*
中出现多次链。
我知道如何做到这一点N == 2
(这是一个简单的对生成),但我不知道如何增强算法以使用N
.
也许第二种斯特林数在这里会有所帮助,但我不知道如何应用它们来获得所需的结果。
注意:这里使用的数据结构类型对我来说并不重要。
注意:这个问题是从我之前的类似问题中衍生出来的。