Существует ли алгоритм для генерации всех уникальных циклических перестановок мультимножества?

Я столкнулся с этой проблемой, когда занимался программированием. Проблема может быть выражена следующим образом:

Для мультимножества A пусть P (A) обозначает множество всех возможных перестановок A. P (A) естественно делится на непересекающиеся подмножества, являющиеся классами эквивалентности, причем отношение эквивалентности «может быть связано круговыми сдвигами». Перечислите все эти классы эквивалентности, генерируя ровно по одному члену от каждого из них.

Например, рассмотрим мультимножество {0, 1, 1, 2}. Перестановки «0112» и «1201» являются уникальными перестановками, но последние могут быть найдены путем смещения по кругу первого и наоборот. Желаемый алгоритм не должен генерировать оба.

Конечно, возможен метод «грубой силы»: просто генерируйте перестановки - независимо от циклического дублирования - используя любой из алгоритмов перестановок мультимножества, и отбрасывайте найденные дублирования путем сравнения с предыдущими результатами. Однако на практике это имеет тенденцию быть неэффективным. Желаемый алгоритм должен требовать минимального, если не нулевого учета.

Любое понимание этой проблемы высоко ценится.

Ответы на вопрос(5)

Ваш ответ на вопрос