Un collar k-ary de longitud n es una lista ordenada de longitud n cuyos elementos se extraen de un alfabeto de longitud k, que es la lista lexicográficamente primera en una especie de todas las listas que comparten un pedido en rotación.¿Buen algoritmo simple para generar collares en Scheme?
Ejemplo: (1 2 3) y (1 3 2) son los collares de longitud 3 del alfabeto {1 2 3}.
Más información: http://en.wikipedia.org/wiki/Necklace_(combinatorics)
me gustaría para generar éstos en el Esquema (o un Lisp de su elección). He encontrado unos papeles ...
Savage - Un nuevo algoritmo para generar Collares
Sawada - Generación de pulseras en Constante de tiempo amortizado
Sawada - Collares electrógenos con Subcadenas Forbidden
... pero el código que figura en ellos es opaco para mi Principalmente porque no parecen estar pasando ni en el alfabeto ni en la longitud (n) deseada. El procedimiento de esquema que estoy buscando es de la forma (collares n '(a b c ...)).
Puedo generar esto de manera fácil generando listas k^n y luego filtrando las rotaciones. Pero es terriblemente ineficaz en la memoria ...
¡Gracias!
¿Es el listado de solo dos de 10 collares una simple omisión, o quieres algo además de collares? –