Herramientas de usuario

Herramientas del sitio


cpp-avanzado:algorithm:next-permutation

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
cpp-avanzado:algorithm:next-permutation [2017/12/07 16:05]
guty [Forma 2 (iterativa)]
cpp-avanzado:algorithm:next-permutation [2017/12/08 18:22] (actual)
guty
Línea 1: Línea 1:
 ======= Permutaciones ======= ======= Permutaciones =======
  
-FIXME (¿Agregar definición de permutación?​ ¿noción intuitiva? ¿función biyectiva de un conjunto en sí mismo?)+FIXME (¿Agregar definición de permutación?​ ¿noción intuitiva? ¿función biyectiva de un conjunto en sí mismo? ​Por ahora queda el link a wikipedia)[[https://​es.wikipedia.org/​wiki/​Permutaci%C3%B3n|Permutación Wikipedia]]
  
 Dado un arreglo de $n$ elementos (sus índices se encuentran en $ \left \{0,1, \dots, n-1 \right \}$), se plantea el problema de hallar todas las permutaciones del mismo. Ejemplo, si $n=3$, todas las permutaciones posibles de $\left \{ 0,1,2 \right \}$ son: Dado un arreglo de $n$ elementos (sus índices se encuentran en $ \left \{0,1, \dots, n-1 \right \}$), se plantea el problema de hallar todas las permutaciones del mismo. Ejemplo, si $n=3$, todas las permutaciones posibles de $\left \{ 0,1,2 \right \}$ son:
Línea 20: Línea 20:
 ===== Forma 1 (recursiva) ===== ===== Forma 1 (recursiva) =====
  
-Usaremos ''​permutacion''​ como un vector donde construiremos todas las permutaciones y ''​elegido''​ como un arreglo booleano (o idealmente un bitset ​FIXME (agregar link a bitset)), que nos dirá en la $i$-ésima posición, si el $i$-ésimo elemento ya fue elegido en el proceso constructivo de la permutación (y es un elemento actual de ''​permutacion''​).+Usaremos ''​permutacion''​ como un vector donde construiremos todas las permutaciones y ''​elegido''​ como un arreglo booleano (o idealmente un [[cpp-avanzado:​bitset|Bitset]]), que nos dirá en la $i$-ésima posición, si el $i$-ésimo elemento ya fue elegido en el proceso constructivo de la permutación (y es un elemento actual de ''​permutacion''​).
  
 <code cpp> <code cpp>
Línea 58: Línea 58:
 Tendremos como resultado que se modificó ''​arreglo''​ de manera in-place, a la siguiente permutación lexicográfica (que sea distinta a la original, esto cobra importancia si tenemos elementos repetidos). Por ejemplo: Tendremos como resultado que se modificó ''​arreglo''​ de manera in-place, a la siguiente permutación lexicográfica (que sea distinta a la original, esto cobra importancia si tenemos elementos repetidos). Por ejemplo:
  
-   * $(0,1,2,3) \overset{\texttt{next_permutation}}{\longrightarrow} (0,1,3,2)$  +   * $(0,​1,​2,​3) ​  ​\xrightarrow{\texttt{next_permutation}} (0,1,3,2)$  
-   * $(0,3,1,2) \overset{\texttt{next_permutation}}{\longrightarrow} (0,3,2,1)$  +   * $(0,​3,​1,​2) ​  ​\xrightarrow{\texttt{next_permutation}} (0,3,2,1)$  
-   * $(0,​2,​1,​1,​3) \overset{\texttt{next_permutation}}{\longrightarrow} (0,​2,​1,​3,​1)$ ​+   * $(0,​2,​1,​1,​3) \xrightarrow{\texttt{next_permutation}} (0,2,1,3,1)$  
 +   * $(0,​3,​2,​1,​1) \xrightarrow{\texttt{next_permutation}} (1,0,1,2,3)$ 
  
-De esta forma, si queremos generar todas las permutaciones de un arreglo, **debemos comenzar con la permutación lexicográficamente más chica** (por ejemplo, llamando a ''​sort''​ FIXME (agregar link a sorten el arreglo), y luego ejecutar el siguiente código.+De esta forma, si queremos ​**generar todas** las permutaciones de un arreglo, **debemos comenzar con la permutación lexicográficamente más chica** (por ejemplo, llamando a [[cpp-avanzado:​algorithm:​sort sort]]   en el arreglo), y luego ejecutar el siguiente código.
  
 <code cpp> <code cpp>
cpp-avanzado/algorithm/next-permutation.1512662707.txt.gz · Última modificación: 2017/12/07 16:05 por guty