Permutação e combinação com JavaScript

Permutação e combinação com JavaScript

Neste artigo aprenderemos como gerar permutações e combinações usando JavaScript.

Permutações

As permutações são uma organização ou rearranjo de todos os elementos de um conjunto em todas as ordens possíveis. Por exemplo, dados os elementos [1, 2, 3], suas permutações são:

 

[1, 2, 3]

[1, 3, 2]

[2, 1, 3]

[2, 3, 1]

[3, 1, 2]

[3, 2, 1]

 

Aqui está um exemplo de como implementar a permutação em JavaScript

 

function gerarPermutacoes(lista) {

    const resultados = [];

    function retroceder(caminho, opcoes) {

        if (caminho.length === lista.length) {

            resultados.push([...caminho]);

            return;

        }

        for (let i = 0; i < opcoes.length; i++) {

            caminho.push(opcoes[i]);

            retroceder(caminho, opcoes.slice(0, i).concat(opcoes.slice(i + 1)));

            caminho.pop();

        }

    }

    retroceder([], lista);

    return resultados;

}

const numeros = [1, 2, 3];

const permutacoes = gerarPermutacoes(numeros);

console.log("Permutações:", permutacoes);

 

A função gerarPermutacoes() recebe como parâmetro um array e a partir dele gera todas as permutações possíveis. Perceba que dentro dela existe uma função chamada retroceder, que trabalha de forma recursiva, construíndo as perguntações. Ela recebe dois parãmetros, que são o caminho (Mantém a permutação atual sendo criada) e opcoes (Contém os elementos que ainda podem ser adicionados à permutação)

Quando o tamanho de caminho é igual ao tamanho do array original, uma permutação completa foi formada e é adicionada a resultados. O loop tenta todas as combinações removendo um elemento de opcoes e adicionando-o a caminho.

Ao executar o código, o resultado será: 

[

  [1, 2, 3],

  [1, 3, 2],

  [2, 1, 3],

  [2, 3, 1],

  [3, 1, 2],

  [3, 2, 1]

]

 

Um exemplo de permutação prático seria um gerador de senhas. Com base numa lista de caracteres e num tamanho desejado, ele geraria uma senha aleatória. O código a seguir mostra isso, ao gerar uma senha aleatória com 8 caracteres.

function gerarSenha(tamanho) {

    const caracteres = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()";

    let senha = "";

    for (let i = 0; i < tamanho; i++) {

        const indiceAleatorio = Math.floor(Math.random() * caracteres.length);

        senha += caracteres[indiceAleatorio];

    }

    return senha;

}

const tamanhoSenha = 8; 

const senhaGerada = gerarSenha(tamanhoSenha);

console.log("Senha gerada:", senhaGerada);

 

Combinações

 

Quando lidamos com combinações, estamos interessados em como selecionar um grupo de itens a partir de um conjunto maior, sem importar a ordem. Em JavaScript, podemos usar algumas abordagens simples para calcular as combinações de um conjunto.

Se temos um conjunto de 3 letras,  A, B e C, e queremos formar grupos de 2 letras, as combinações possíveis seriam:

 

AB

AC

BC

 

Perceba que ao contrário das permutações, a ordem não importa. Ou seja, AB é a mesma coisa que BA.

Aqui está uma função em JavaScript que calcula as combinações de um conjunto de elementos:

 

function fatorial(n) {

    if (n === 0 || n === 1) {

        return 1;

    }

    let resultado = 1;

    for (let i = 2; i <= n; i++) {

        resultado *= i;

    }

    return resultado;

}

function combinacoes(n, r) {

    return fatorial(n) / (fatorial(r) * fatorial(n - r));

}

console.log(combinacoes(3, 2)); 

 

Veja que a nossa função combinacoes utiliza uma função auxiliar chamada fatorial para calcular o resultado. O fatorial de um número é o resultado da multiplicação de todos os números inteiros de 1 até esse número. Ele é muito usado em problemas de combinatória, como o cálculo de permutações e combinações. A notação usada para fatorial é o símbolo de exclamação (!).

Por exemplo, o fatorial de 4, escrito como 4!, seria:

 

4! = 4 × 3 × 2 × 1 = 24

 

O fatorial cresce rapidamente à medida que o número aumenta.

 

Está começando e deseja saber o que precisa estudar de HTML e JavaScript? Não deixe de conferir os roteiros de estudo de HTML e JavaScript!. São dezenas de conteúdos para você melhorar suas habilidades.

Roteiro de estudos - HTML e CSS

Roteiro de estudos - Javascript

 

Outros conteudos que podem ser de seu interesse

Avisar quantos caracteres faltam com JavaScript
22/10/2019JAVASCRIPT

Avisar quantos caracteres faltam com JavaScript

Avise quantos caracteres faltam ao digitar dados em seu formulário

Saiba mais...
Sites e aplicativos para praticar o seu inglês
06/11/2022JAVASCRIPT

Sites e aplicativos para praticar o seu inglês

Veja dicas de como melhorar o seu inglês sem colocar a mão no bolso

Saiba mais...

Conteúdo sobre banco de dados sem complicação!