Добрый вечер, уважаемые участники форума!
На днях заинтересовался алгоритмами генерации комбинаторных объектов, в частности перестановками.
Сам алгоритм генерации перестановок очень прост, но я усложнил себе задачу.
Давайте теперь считать эквивалентными те перестановки, которые получаются друг из друга циклическими сдвигами.
Например:
.
Объединим такие перестановки в классы.Меня интересует, существует ли эффективный алгоритм перебора таких классов (от каждого класса нужно выдавать по одному представителю, например, лексикографически наименьшую перестановку). Лично я, не смог переделать алгоритм Нарайаны для этих целей и в интернете ничего найти не смог.
Наверняка я не первый интересуюсь чем-то подобным. Буду благодарен за любую интересную информацию по теме.