¿Existe un algoritmo para generar todas las permutaciones circulares únicas de un multiset?

Encontré este problema al hacer una programación entusiasta. El problema se puede expresar de la siguiente manera:

Para un conjunto múltiple A, supongamos que P (A) denota el conjunto de todas las permutaciones posibles de A. P (A) se divide naturalmente en subconjuntos disjuntos que son clases de equivalencia, siendo la relación de equivalencia "puede estar relacionada por desplazamientos circulares". Enumere todas estas clases de equivalencia generando exactamente un miembro de cada una de ellas.

Por ejemplo, considere el multiset {0, 1, 1, 2}. Las permutaciones "0112" y "1201" son permutaciones únicas, pero la última se puede encontrar desplazando circularmente la primera y viceversa. El algoritmo deseado no debería generar ambos.

Por supuesto, es posible un enfoque de fuerza bruta: solo genere permutaciones, independientemente de la duplicación circular, utilizando cualquiera de los algoritmos de permutación de múltiples conjuntos y descarte las duplicaciones encontradas en comparación con los resultados anteriores. Sin embargo, esto tiende a ser ineficiente en la práctica. El algoritmo deseado debe requerir una contabilidad mínima, si no cero.

Cualquier idea sobre este problema es muy apreciada.

Respuestas a la pregunta(5)

Su respuesta a la pregunta