У меня есть набор 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, *
Мне нужно найти все возможные комбинации между каждым подмножеством из каждого подмножества так, чтобы каждая результирующая комбинация имела ровно один элемент из списка 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
.
Возможно здесь могли бы помочь числа Стирлинга второго рода, но я не знаю, как их применять чтобы получить желаемый результат.
Примечание. Тип используемой структуры данных для меня не важен.
Примечание. Этот вопрос вырос из моего предыдущего похожий вопрос.