Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
cpp-avanzado:algorithm:next-permutation [2017/12/08 18:18] guty [Permutaciones] |
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?)[[https://es.wikipedia.org/wiki/Permutaci%C3%B3n|Permutación Wikipedia]] | + | 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 63: | Línea 63: | ||
* $(0,3,2,1,1) \xrightarrow{\texttt{next_permutation}} (1,0,1,2,3)$ | * $(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 sort) en 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> |