Permutação Com Repetição - Permutação com repetição: fórmula, como calcular - Brasil Escola
Permutação com repetição: fórmula, como calcular - Brasil Escola

Como calcular permutações quando os elementos se repetem

A fórmula básica é P(n; k1, k2, ..., km) = n! / (k1! × k2! × ... × km!). Você divide o fatorial do total de itens pelo fatorial de cada grupo de itens repetidos. Isso parece simples até você tentar calcular manualmente um caso com números maiores. O problema começa quando n é grande. Digamos que você tenha a palavra "ESTATÍSTICA" — 10 letras, com E, T e A repetidos. O cálculo é 10! / (2! × 2! × 2!). Dá 453.600 arranjos possíveis. Se o número de repetições aumentar, os fatoriais crescem rápido demais e você acaba com uma calculadora ou planilha trabalhando.

Entendendo permutação com repetição na prática

A ideia central é que, em vez de tratar todos os itens como distintos, você reconhece que alguns são indistinguíveis entre si. Quando dois itens são idênticos, as permutações que os trocam entre si não geram arranjos novos — elas são redundantas. O denominador da fórmula remove exatamente essas repetições. Já vi gente cometer o erro de aplicar a fórmula simples n! mesmo quando há repetições. O resultado sai enormemente inflado. Em uma análise de combinações de caracteres para um sistema de geração de senhas, por exemplo, usei inicialmente a permutação simples e o número de resultados era seis vezes maior do que a realidade. O erro estava em não considerar que alguns dígitos se repetiam no conjunto de caracteres permitidos.

O que ajuda é identificar primeiro quantos elementos únicos existem e depois contar quantas vezes cada um aparece. A conta seguinte é direta, mas um detalhe importante: a ordem dos fatores no denominador não altera o resultado, então você pode organizar como quiser.

Quando esse método não funciona bem

Permutação com repetição assume que todos os n elementos estão sendo usados em cada arranjo. Se você quer escolher apenas k elementos de um conjunto onde há repetições, o cálculo muda completamente e a fórmula simples não se aplica mais. Nesse caso, precisa recorrer a combinações com repetição ou a métodos recursivos, dependendo do problema. Também tem o problema do overflow de números grandes. Em linguagens com inteiros de tamanho fixo, n! explode rapidamente. Já processei uma sequência genética com 52 nucleotídeos, onde as repetições eram pequenas, mas o fatorial de 52 é um número com cerca de 68 dígitos. Em Python, isso não é problema porque os inteiros têm precisão arbitrária. Em C ou Java, você precisa usar BigInteger ou BigDecimal, ou então calcular de forma incremental para evitar o estouro antes do resultado final.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Um truque que uso nesses casos é calcular o resultado passo a passo, multiplicando e dividindo alternadamente, em vez de computar os fatoriais completos primeiro. Isso mantém os números intermediários menores e evita o overflow prematuro. O tempo de execução aumenta ligeiramente, mas para a maioria dos casos práticos, a diferença é insignificante — geralmente menos de um segundo a mais.

Exemplo concreto

Vamos com "MISISSIPÍ". São 11 letras: M(1), I(4), S(4), P(2), A(1), É(0 na contagem original — esqueci que é acento, então vamos tratar como letras normais: I aparece 4 vezes, S aparece 4 vezes, P aparece 2 vezes, M e A aparecem 1 vez cada). A conta fica 11! / (4! × 4! × 2!). O resultado é 34.650 permutações distintas. Se você for fazer isso muitas vezes — digamos, processando milhares de palavras em lote para um estudo de criptografia — colocar a fórmula em uma função reutilizável poupa bastante tempo. Um script simples que lê a entrada, conta as frequências com um dicionário ou histograma, e aplica a fórmula roda em menos de 10 milissegundos por palavra em hardware moderno.

Dicas que ninguém conta

Primeiro: simplifique frações antes de calcular os fatoriais. Se um fator no numerador cancela com um no denominador, faça a redução. Isso reduz o trabalho computacional e evita números desnecessariamente grandes. Segundo: verifique se realmente se trata de permutação com repetição e não de arranjo. Permutação usa todos os elementos. Arranjo escolhe uma parte deles. Confundir os dois é um erro comum em exercícios e em problemas do mundo real.

Terceiro: em casos onde n é muito grande e as repetições são poucas, considere usar o logaritmo dos fatoriais. A função lgamma em bibliotecas matemáticas padrão retorna log(n!) sem precisar calcular o fatorial em si. Depois você faz exp da soma dos logaritmos do numerador menos os do denominador. Isso é essencial quando n ultrapassa 170 em double precision, pois além disso n! já estoura o máximo representável.