2012-03-08 24 views
6

estoy tratando de escribir un simple algoritmo que genera diferentes conjuntosalgoritmo para generar diferentes órdenes

(cba) (cabina) (BAC) (BCA) (ACB) de (abc)

haciendo dos operaciones:

intercambio primero y segundo elementos de entrada (abc), Así que tengo (BAC)

después desplazar primer elemento a durar => entrada es (b a c), la salida es (a c b)

por lo que la salida final de este procedimiento es (a c b).

Por supuesto, este método solo genera un c b y a b c. Me preguntaba si el uso de estas dos operaciones (tal vez usando 2 intercambios seguidos y luego un cambio, o cualquier variación) es suficiente para producir todos los diferentes ordenamientos.

Me gustaría encontrar un algoritmo simple, que no use> < o +, simplemente intercambiando repetidamente ciertas posiciones (por ejemplo, siempre intercambiando las posiciones 1 y 2) y siempre cambiando ciertas posiciones (por ejemplo, cambie el primer elemento a último).

+4

Dado que no hace su pregunta en un idioma en particular, tal vez sería más adecuado para http://cstheory.stackexchange.com/ – Ali

+0

Para tres elementos, puede hacerlo con intercambios simplemente alternando dos diferentes intercambios y enumerará las seis permutaciones. Para cuatro elementos, una solución es (21) (32) (43) (32) (43) (32) (21) (32) todos repiten tres elementos donde (32) significa intercambiar los elementos en el segundo y tercer posición. Sin embargo, no conozco una solución general. – Neil

Respuesta

5

Tenga en cuenta que la operación de desplazamiento (mover el primer elemento al final) es equivalente a permitir un intercambio (intercambio) de cualquier par adyacente: simplemente cambie hasta llegar al par que desea intercambiar, y luego cambie el elementos.

Por lo tanto, su pregunta es esencialmente equivalente a la siguiente pregunta: ¿Es posible generar cada permutación utilizando solo el intercambio de pares adyacentes? Y si lo es, ¿hay un algoritmo para hacer eso?

La respuesta es sí (a ambas preguntas). Uno de los algoritmos para hacer eso se llama "El algoritmo Johnson-Trotter" y puede encontrarlo en Wikipedia.

+0

Muchas gracias –

Cuestiones relacionadas