Допустим, у нас есть список элементов:
[{dog,1},{dog,2},{cat,1},{cat,2},{bird,1},{bird,2},...]
Я хотел бы сохранить все возможные перестановки этого списка в оперативной памяти.
Поскольку список может быть довольно длинным (10 элементов и более), его хранение занимает много места (факториал N).
Например, если у меня есть список, который занимает около 70 байт пространства и имеет 12 элементов, тогда мне нужно 12! * 70 ~ 31 GB
. Если я добавлю еще один элемент в список, то станет невозможным хранить перестановки в ОЗУ.
Есть ли более эффективное представление для хранения всех перестановок в памяти, чем следующее представление Эрланга?
[{dog,1},{dog,2},{cat,1},{cat,2},{bird,1},{bird,2},...]
(я знаю, что атом dog
сохраняется только один раз в таблице атомов, но, поскольку он повторяется при каждой перестановке, он занимает N памяти).
Может быть, эти перестановки могут быть сохранены в каком-то виде байтового представления? (Извините, я новичок в байтах и двоичных файлах).
Ведь это просто одни и те же элементы, но переставленные по-разному.