Desafios de Programação
Semana 09
Conteúdo
Análise Combinatória
Atividades
Material Didático cedido pelo Professor Marcos Lage
Introdução
Matemática e competições de programação?
Como vimos nos últimos slides, inúmeros problemas de Matemática são temas de questões de competições de programação!
Nesta aula apresentaremos tópicos sobre Análise Combinatória .
Introdução
Bibliotecas nativas?
Nenhuma liguagem de programação oferece biblioteca nativa com implementações específicamente relacionadas ao tema!
Nos próximos slides apresetaremos conceitos úteis para solução de problemas que utilizam Análise Combinatória.
Contagem
Princípio multiplicativo
Contagem
Princípio aditivo
Se $A_1, A_2, ..., A_n$ são conjuntos disjuntos, então o número de elementos da união $A_1 \cup A_2 \cup \dots \cup A_n$ é:
$|A_1 \cup A_2 \cup \dots \cup A_n| = \displaystyle \sum_{i=1}^n |A_i|$
Ex: Se $A_1 = \{1,2\}$ e $A_2 = \{a, b, c\}$:
Contagem
Princípio da inclusão e exclusão
Dados conjuntos $A_1$ e $A_2$ o número de elementos em $A_1 \cup A_2$ é:
$|A_1 \cup A_2| = |A_1| + |A_2| - |A_1 \cap A_2|$
Ex: Se $A_1 = \{1,2,a\}$ e $A_2 = \{a, b, c\}$:
Arranjos & Permutações
Permutação simples
O número de maneiras que podemos ordenar $n$ elementos em um conjunto com $n$ elementos :
$P_n^n = n!$
Ex: Se $A = \{a, b, c\}$:
Arranjos & Permutações
Arranjo simples
O número de maneiras que podemos ordenar $k$ elementos em um conjunto com $n$ elementos :
$P_k^n = A_k^n = \frac{n!}{(n-k)!}$
Ex: Se $A = \{a, b, c\}$ e $k = 2$:
Arranjos & Permutações
Arranjo com permutação
O número de grupos de $k$ elementos que pordemos formar, com repetição , em um conjunto com $n$ elementos :
$AR_k^n = n^k$
A ordem dos elementos é importante!
Ex: Se $A = \{a, b, c\}$ e $k = 2$:
Combinação
Combinação simples
O número de subconjuntos de $k$ elementos que pordemos formar, a partir de um conjunto com $n$ elementos :
$
C_k^n = \left( \begin{array}{c} n\\k \end{array} \right) = \frac{n!}{k!(n-k)!}$
A ordem dos elementos não é importante!
Ex: Se $A = \{a, b, c\}$ e $k = 2$:
Combinação
Combinação simples
A quantidade $\left( \begin{array}{c} n\\k \end{array} \right)$ é chamada de Coeficiente Binomial .
O coeficiente binomial pode ser calculado através do algoritmo :
C/C++:
#define MAXN 100
long binomial_coefficient(int n, int k) {
long bc[MAXN][MAXN]; // tabela de coeficientes binomiais
for (int i=0; i<=n; i++) {
bc[i][0] = 1;
bc[i][i] = 1;
}
for (int i=1; i<=n; i++)
for (int j=1; j< i; j++)
bc[i][j] = bc[i-1][j-1] + bc[i-1][j];
return bc[n][k];
}
Combinação
Combinação com repetição
O número de subconjuntos de $k$ elementos que pordemos formar, a partir de um conjunto com $n$ elementos :
$
CR_k^n = \left( \begin{array}{c} n+k-1\\k \end{array} \right) = \frac{(n+k-1)!}{k!(n-1)!}$
A ordem dos elementos não é importante!
Ex: Se $A = \{a, b, c\}$ e $k = 2$:
Combinação
Partições
Uma combinação define a partição de um conjunto em dois subconjuntos, um com $k$ e outro com $k-1$ elementos.
Partições generalizam combinações para 𝑟 subconjuntos
$
C_{n_1}^n C_{n_2}^{n-n_1} \dots C_{n_r}^{n-n_1 \dots n_{r-1}} =
\frac{n!}{n_1!n_2!\dots n_r!}$
Ex: Se $|A| = 3$ e $n_1 = 2$ e $n_2 = 1$:
Funções Enumerativas
Fibonacci
Funções Enumerativas
Catalan
Atividades
Sugestão de estudo
Leitura:
Capítulo 5 do livro texto Competitive Programming 1 Halim, S. e Halim, F.
Exercícios:
Lista de exercícios 07, de problemas Análise Combinatória .
Desafios de Programação
Semana 09
Conteúdo
Análise Combinatória
Atividades
Material Didático cedido pelo Professor Marcos Lage