Skip to content

WesleyYDS/combinacoes-entre-listas

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Combinações entre Listas

O objetivo desse projeto é fornecer métodos para facilitar o processo de prever e gerar a análise combinatória entre X elementos de Y listas (X podendo variar para cada lista).

Made by Wesley Yago Last Commit Contributors License Check out my LinkedIn!


🗺 Tabela de conteúdos


🧪 Como funciona

O que é análise combinatória? 🤓

(Se você já sabe o que é análise combinatória, combinação simples e fatorial, siga para o próximo tópico clicando aqui)

A analise combinatória consiste, entre outras funções, em auxiliar no cálculo de possibilidades de combinação entre 1 ou mais grupos de elementos.

Temos como exemplo a clássica situação de definir quais as combinações possíveis entre um conjunto de X calças e Y camisas.
Exemplo: se tenho 3 calças (X = 3) e 5 camisas (Y = 5), quantas combinações de 1 calça e 1 camisa posso formar? A resposta seria 15, porque é o resultado da multiplicação entre 3 (número de calças) e 5 (número de camisas).
Equação: X * Y * Z...

Outro exemplo que podemos citar é o de formar conjuntos de P elementos dentro de um grupo de N elementos, como definir quantas combinações possíveis de P alunos podem ser formadas em uma sala com N alunos.
Exemplo: Em uma sala com 20 alunos (N = 20), quantas combinações de 2 alunos (P = 2) podemos formar?
*Vale lembrar que nesse caso tanto faz a ordem dos elementos (João e Maria é o mesmo que Maria e João)
A resposta é 190 dado a equação abaixo de análise combinatória (combinação simples).
Equação: N! / ( P! * (N - P)! )

Por simplificação, iremos chamar essa equação de Combin(N, P).

Se você está se perguntando ou tentando se lembrar do que é esse sinal de exclamação, saiba que ele representa a operação de fatorial (!) que basicamente representa a multiplicação daquele número por todos os números anteriores a ele, até chegar a 1.
Exemplo: 5! = 5 * 4 * 3 * 2 * 1

O problema encontrado nas soluções existentes 😩

Para trabalhar com casos isolados em programação que contemplem situações simples como as mencionadas anteriormente, as fórmulas acima podem ser o suficiente para prever a quantidade de combinações (dado que as fórmulas retornam números de possibilidades de combinações entre os elementos) e até é possível encontrar essas fórmulas em forma de trechos de código no Stack Overflow para executar a combinação entre elementos (gerar as reais listas de combinações entre tais elementos).

Mas e se nós precisássemos de uma função que não só gerasse as combinações de P elementos dentro de um grupo com N elementos, mas também permitisse montar conjuntos entre esse grupo e X outros grupos?
E melhor ainda, que cada um desses grupos pudesse ter um valor específico para P e N?

Ainda não entendeu a premissa desse projeto e como ele pode ser útil? Observe o tópico abaixo "Exemplo na prática" para entender melhor.


🔨 Exemplo na prática

Grêmio Estudantil 🎓

Para demonstrar de maneira simples e intuitiva a utilidade de uma fórmula um pouco mais avançada como a que iremos utilizar, vamos usar o exemplo de uma escola que precisa formar um Grêmio estudantil contando com a participação dos alunos.

Na nossa analogia, o diretor da escola quer saber quantas (prever) e quais (executar) seriam TODAS as possíveis chapas que poderiam ser criadas para formar o Grêmio estudantil, dadas as seguintes informações:

  • A quantidade X de salas que desejam participar da formação do Grêmio.
  • A quantidade Y de alunos que desejam participar de cada sala (Y podendo variar para cada sala individualmente)
  • A cota Z de quantos alunos serão selecionados de cada sala (Z podendo variar para cada sala individualmente)

Para saber quantas (prever) as possibilidades de chapas que poderiam ser criadas, o diretor precisaria usar uma junção inteligente das fórmulas apresentadas no capítulo anterior para calcular todas as chapas possíveis, seguindo uma lógica como a seguinte:

  • Para cada sala, seria necessário calcular separadamente a análise combinatória considerando o número de alunos interessados (Y) e a cota de alunos elegíveis (Z) para aquela sala, visando descobrir todas as possíveis combinações de Z alunos entre todos os alunos interessados daquela sala. A fórmula para obter esse resultado seria Combin(Y, Z). Consulte o capítulo anterior para ver a fórmula por extenso.
  • Após obter o resultado de combinações de cada sala separadamente, teríamos que multiplicar cada um dos resultados para obter o número total de combinações de todas as salas.

🚀 Testando na sua máquina


Documentation

Esse projeto segue as seguintes Commit Guidelines:

  • build: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)
  • ci: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)
  • docs: Documentation only changes
  • feat: A new feature
  • fix: A bug fix
  • perf: A code change that improves performance
  • refactor: A code change that neither fixes a bug nor adds a feature
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
  • test: Adding missing tests or correcting existing tests
  • chore: Misc content

📌 Apoio

Entre em contato e preste apoio através das seguintes redes:


📝 Licença

License

Esse projeto está licenciado sob a licença do MIT - veja o arquivo de LICENÇA para mais detalhes.


🧰 Sendo desenvolvido por Wesley Yago!

About

Esse projeto tem como intuito exemplificar como gerar todas as combinações entre elementos de duas ou mais listas, com o diferencial de poder definir separadamente a quantidade de elementos a ser selecionado de cada lista. Essa solução foi desenvolvida em Java mas é possível transcrevê-la para outras linguagens usando as referências.

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages