Lazy (next?) tuples

Рейтинг: 1Ответов: 1Опубликовано: 29.04.2023

Для вложенного n x mсписка [[e11, e12, … ], [e21, e22, … ], …] необходимо составить все возможные кортежи "по одному элементу из списка" без повторений. Можно рассмотреть списки индексов, потом я смогу получить элементы.
Кортежи должны выдаваться lazy или next способом, без размещения их всех в памяти. Вполне допустимо использовать вложенные for, но не более 3 уровней. Нельзя использовать библиотеки, решение должно быть обще-алгоритмическим.

То есть для [[1, 2, 3, …, n], [1, 2, 3, …, n], …] нужно последовательно получать
[1, 1, 1, ...,1], [1, 1, 1, ..., 2], …, [n, n, …, n].
Порядок может быть любым, но должны быть представлены все кортежи без повторений.
Я изучил алгоритм next permutation и думаю это близко, но не могу сделать окончательно.
Буду благодарен за любые идеи, можно использовать Python, Javascript или псевдокод.

Ответы

▲ 5Принят

Ну а в чем проблема? Раздел 7.2.1.1 "Искусства программирования" Кнута. Простейший способ — по счетчику для каждого списка и вперед (прибавление 1 в эдакой хитрой системе счисления). Счетчики (m чисел) определяют состояние, не надо хранить все кортежи в памяти. Все, как заказано...

Набирать текст, простите, не буду. Но копию странички приложу...

введите сюда описание изображения

Запрограммировать сами сумеете?