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