У меня очень странная проблема, которая имеет некоторые ограничения, которые затрудняют ее решение. У меня есть список списков, и я хочу сделать комбинации всех элементов в этих списках. Каждый элемент имеет имя и значение. Вот пример:
Основной список:
- Список 01:
- Элемент 01: имя: имя01, значение: значение01
- Элемент 02: имя: имя02, значение: значение02
- Список 02:
- Элемент 01: имя: имя03, значение: значение03
- Список 03:
- Элемент 01: имя: имя04, значение: значение04
- Элемент 02: имя: имя05, значение: значение05
Конечный результат должен выглядеть следующим образом:
Некоторые списки:
- Элемент 01: имя01: значение01, имя03: значение03, имя04: значение04
- Элемент 02: имя02: значение02, имя03: значение03, имя04: значение04
- Элемент 03: имя03: значение03, имя03: значение03, имя04: значение04
- Элемент 04: имя01: значение01, имя03: значение03, имя04: значение05
- Элемент 05: имя02: значение02, имя03: значение03, имя04: значение05
- Элемент 06: имя03: значение03, имя03: значение03, имя04: значение05
Новый список в значительной степени содержит элементы, которые действуют как хэш-карта.
Ограничения следующие:
- Я не могу собрать в новые списки и смешать их, потому что эти списки могут быстро стать довольно большими.
- Я использую какой-то API-интерфейс, похожий на наблюдатель, поэтому мне нужно как можно скорее сообщить наблюдателю о результате, чтобы не использовать много памяти.
Другими словами, этот генератор комбинаций может быть снабжен X числом списков, каждый из которых может содержать N номеров, и я должен генерировать их комбинации, не используя слишком много памяти.
Я не рассчитываю работать с более чем 5 списками одновременно, но я хотел бы сделать алгоритм максимально устойчивым к изменениям кода.
Я решаю проблему в Java, но алгоритм должен работать одинаково и на других языках, потому что он может быть переведен.
У вас есть идеи, предложения?
Заранее спасибо.
P.S. Я не думаю, что рекурсия будет работать хорошо. Я согласен с идеей использования цикла while и некоторых вложенных циклов, но очень трудно представить, как это должно работать.