Existe um algoritmo para gerar todas as permutações circulares exclusivas de um multiset?

Eu encontrei esse problema ao fazer alguma programação entusiasta. O problema pode ser expresso da seguinte maneira:

Para um multiset A, deixe P (A) denotar o conjunto de todas as permutações possíveis de A. P (A) é naturalmente dividido em subconjuntos disjuntos que são classes de equivalência, com a relação de equivalência sendo "pode ser relacionada por turnos circulares". Enumere todas essas classes de equivalência gerando exatamente um membro de cada uma delas.

Por exemplo, considere o multiset {0, 1, 1, 2}. As permutações "0112" e "1201" são permutações únicas, mas a última pode ser encontrada deslocando circular a primeira e vice-versa. O algoritmo desejado não deve gerar os dois.

Obviamente, é possível uma abordagem de força bruta: basta gerar permutações - independentemente da duplicação circular - usando qualquer um dos algoritmos de permutação multiset e descartar duplicações encontradas em comparação com os resultados anteriores. No entanto, isso tende a ser ineficiente na prática. O algoritmo desejado deve exigir contabilidade mínima, se não zero.

Quaisquer insights sobre esse problema são profundamente apreciados.

questionAnswers(5)

yourAnswerToTheQuestion