В этом вопросе спрашивается, как вычислить декартово произведение заданного числа векторов. Поскольку количество векторов известно заранее и довольно мало, решение легко получить с помощью вложенных циклов for.
Теперь предположим, что вам дан на выбранном вами языке вектор векторов (или список списков, или набор множеств и т. д.):
l = [ [1,2,3], [4,5], [6,7], [8,9,10], [11,12], [13] ]
Если бы меня попросили вычислить его декартово произведение, то есть
[ [1,4,6,8,11,13], [1,4,6,8,12,13], [1,4,6,9,11,13], [1,4,6,9,12,13], ... ]
Я бы продолжил рекурсию. Например, в быстром и грязном питоне
def cartesianProduct(aListOfLists):
if not aListOfLists:
yield []
else:
for item in aListOfLists[0]:
for product in cartesianProduct(aListOfLists[1:]):
yield [item] + product
Есть ли простой способ вычислить его итеративно?
(Примечание: ответ не обязательно должен быть на питоне, и в любом случае я знаю, что в питоне itertools делает работу лучше, как в этот вопрос.)