Cuando algunos elementos son iguales, varios ordenamientos dejan de ser distinguibles. La fórmula de las permutaciones con repetición corrige ese conteo duplicado.
En una permutación simple todos los elementos son diferentes. Si aparecen elementos repetidos, intercambiar dos copias iguales no produce un ordenamiento nuevo.
Por ejemplo, las secuencias AABC y AABC obtenidas al intercambiar las dos A son visualmente la misma. Si calculáramos 4!, contaríamos varias veces una configuración idéntica.
Supongamos que tenemos las letras A, A, B y C. Si tratamos las dos A como si fueran diferentes, podemos marcarlas temporalmente como A₁ y A₂.
Pero cada ordenamiento visible aparece 2! veces: una con A₁ antes que A₂ y otra intercambiando sus etiquetas. Por eso debemos dividir por 2!.
Si tenemos n elementos en total y hay grupos repetidos de tamaños n₁, n₂, ..., nᵣ, la cantidad de permutaciones diferentes es:
El denominador elimina las repeticiones producidas por intercambiar elementos iguales.
La palabra AABC tiene 4 letras, pero la A aparece 2 veces. Por lo tanto:
El resultado es menor que 4! porque algunos intercambios no generan una palabra nueva.
Escribe entre 3 y 7 símbolos. La simulación calcula la fórmula y genera las permutaciones distintas cuando la cantidad de resultados es manejable.
Consideremos los elementos A, A, B, B y C. Hay 5 elementos en total, dos A y dos B.
El denominador contiene un factorial por cada grupo de elementos iguales.
Si los n elementos son iguales, solo existe un ordenamiento visible. La fórmula lo confirma:
Intercambiar elementos iguales no produce una configuración nueva.
Podemos contar la frecuencia de cada elemento y aplicar la fórmula dividiendo el factorial total por los factoriales de las frecuencias.
function factorial(n) {
let resultado = 1;
for (let valor = 2; valor <= n; valor += 1) resultado *= valor;
return resultado;
}
const elementos = ["A", "A", "B", "C"];
const frecuencias = new Map();
for (const elemento of elementos) {
frecuencias.set(elemento, (frecuencias.get(elemento) || 0) + 1);
}
const divisor = [...frecuencias.values()]
.reduce((producto, cantidad) => producto * factorial(cantidad), 1);
const total = factorial(elementos.length) / divisor;
console.log(`Permutaciones diferentes: ${total}`);
Una estrategia para generar permutaciones únicas es elegir cada valor disponible solo una vez en cada posición. Si un valor aparece varias veces, se reduce su cantidad disponible y se restaura al volver atrás.
function permutarUnicas(elementos) {
const cantidades = new Map();
elementos.forEach(elemento => {
cantidades.set(elemento, (cantidades.get(elemento) || 0) + 1);
});
const resultados = [];
function construir(actual) {
if (actual.length === elementos.length) {
resultados.push(actual.join(""));
return;
}
for (const [elemento, cantidad] of cantidades) {
if (cantidad === 0) continue;
cantidades.set(elemento, cantidad - 1);
construir([...actual, elemento]);
cantidades.set(elemento, cantidad);
}
}
construir([]);
return resultados;
}
console.log(permutarUnicas(["A", "A", "B"]));
La tabla de frecuencias evita crear copias artificialmente diferenciadas y produce cada ordenamiento visible una sola vez.
| Tipo | Condición | Fórmula | Ejemplo |
|---|---|---|---|
| Simples | Todos diferentes | n! | A, B, C → 3! = 6 |
| Con repetición | Hay grupos iguales | n! / (n₁! × ...) | A, A, B, C → 4! / 2! = 12 |
Las permutaciones con elementos repetidos permiten contar ordenamientos visibles sin incluir duplicados. La fórmula conserva el factorial total y divide por los factoriales de cada grupo repetido.
En el próximo tema estudiaremos las permutaciones circulares, donde los ordenamientos se organizan alrededor de un círculo.