Permutaciones Lexicográficas.

En el campo de las matemáticas una permutación se remite a todas las posibles maneras en las que puede ordenarse un conjunto finito de elementos De este modo, una permutación puede ser vista como una combinación de elementos en donde el orden en el cual están dispuestos es un factor clave. Cabe mencionar que el número de permutaciones posible de un conjunto de n elementos es igual a n!.

Por otro lado, un orden lexicográfico hace referencia a la manera en que ordenan un conjunto de caracteres. Así, intersectando ambas definiciones, se produce lo que se conoce como una permutación lexicográfica: Conjunto de permutaciones enlistadas numérica o alfabéticamente. Considerando lo anterior, podemos argumentar que del conjunto finito {a, b, c} se pueden obtener las siguientes permutaciones:

bac
cba
abc
bca
acb

Las cuales ordenadas alfabéticamente, pueden ser dispuestas como:

abc
acb
bac
bca
cab
cba

El algoritmo para generar la siguiente permutación(es decir la permutación m+1) lexicográfica a partir de una permutación m constituida de  n elementos es el siguiente:

  1. Encontrar el mayor valor de x tal que P[x] < P[x+1]. Si dicho valor de x no existe, entonces P es la última permutación lexicográfica que puede ser concebida por medio del conjunto de elementos que la conforman.
  2. Encontrar el mayor valor de y tal que P[x]<P[y]. Si dicho valor de y no existe, entonces P es la última permutación lexicográfica que puede ser concebida por medio del conjunto de elementos que la conforman.
  3. Intercambiar P[x] por P[y] y viceversa.
  4. Invertir los elementos desde P[x+1] hasta P[n].

Por útlimo, el siguiente código en Python utiliza listas para implementar el algoritmo explicado anteriormente. El código posee comentarios para  que el lector pueda identificar facilmente los pasos de dicho algoritmo:

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s