我有一套S
。它包含N
子集(其中又包含不同長度的一些子子集):找到所有可能的N套子集與Erlang之間的配對
1. [[a,b],[c,d],[*]]
2. [[c],[d],[e,f],[*]]
3. [[d,e],[f],[f,*]]
N. ...
我也有一個列表,包含在一套S
「獨一無二」的元素L
:
a, b, c, d, e, f, *
我需要從每個子集中找到每個子子集之間的所有可能組合,以便每個結果組合具有列表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
。
換句話說,我需要生成所有可能的「鏈」(它是對,如果N == 2
,和三元如果N==3
),但是每個「鏈」應從列表L
包含恰好一個要素除了通配符元素*
可能會在每個生成的鏈中出現多次。
我知道如何做到這一點N == 2
(這是一個簡單的對生成),但我不知道如何增強算法來使用N
的任意值。
也許Stirling numbers of the second kind可以幫助這裏,但我不知道如何應用它們來獲得所需的結果。
注意:這裏使用的數據結構的類型對我來說並不重要。
注意:這個問題已經從我以前的similar問題發展而來。