1. Introdução
Na matemática e na ciência da computação, frequentemente encontramos situações em que precisamos contar o número de elementos que satisfazem várias condições. No entanto, quando existem várias condições, os conjuntos de elementos que satisfazem cada condição frequentemente se sobrepõem (têm interseções). Simplesmente somá-los resultará em contar os elementos várias vezes.
Um método poderoso para eliminar com precisão essas sobreposições e derivar o número correto de elementos é o Princípio da Inclusão-Exclusão.
Neste artigo, explicaremos de forma abrangente o Princípio da Inclusão-Exclusão em detalhes, desde seus conceitos básicos até fórmulas matemáticas generalizadas, provas matemáticas e exemplos concretos de aplicação (como a função totiente de Euler e desarranjos). Além disso, apresentaremos exemplos de implementação de programação para aprofundar sua compreensão sob perspectivas teóricas e práticas.
2. Noções básicas de Conjuntos e Cardinalidade
Antes de aprender o Princípio da Inclusão-Exclusão, vamos rever a notação básica de conjuntos.
- \(A, B\) : Conjuntos
- \(|A|\) : Número de elementos (cardinalidade) do conjunto \(A\)
- \(A \cup B\) : União do conjunto \(A\) e do conjunto \(B\) (elementos que pertencem a pelo menos um)
- \(A \cap B\) : Interseção do conjunto \(A\) e do conjunto \(B\) (elementos que pertencem a ambos)
O que queremos encontrar é a cardinalidade da união de vários conjuntos, ou seja, \(|A \cup B \cup \dots|\).
3. Princípio da Inclusão-Exclusão para 2 Conjuntos
Consideremos o caso mais simples com dois conjuntos, \(A\) e \(B\).
3.1 Fórmula
\[ |A \cup B| = |A| + |B| - |A \cap B| \]3.2 Compreensão Intuitiva
Ao adicionar o número de elementos no conjunto \(A\) (\(|A|\)) e no conjunto \(B\) (\(|B|\)), os elementos que pertencem a ambos os conjuntos, ou seja, elementos na interseção \(A \cap B\), são adicionados duas vezes. Portanto, subtraindo a parte contada a mais \(|A \cap B|\) exatamente uma vez, obtém-se a cardinalidade correta da união \(|A \cup B|\).
flowchart TD
U["Conjunto Universal U"]
A["Conjunto A"]
B["Conjunto B"]
AandB["A ∩ B (Interseção)"]
U -->|"Contém"| A
U -->|"Contém"| B
A -->|"Sobreposição"| AandB
B -->|"Sobreposição"| AandB
4. Princípio da Inclusão-Exclusão para 3 Conjuntos
Quando há três conjuntos, torna-se um pouco mais complexo. Considere os conjuntos \(A, B, C\).
4.1 Fórmula
\[ |A \cup B \cup C| = |A| + |B| + |C| - |A \cap B| - |B \cap C| - |C \cap A| + |A \cap B \cap C| \]4.2 Compreensão Intuitiva e Prova
- Primeiro, adicione todas as cardinalidades individuais: \(|A| + |B| + |C|\)
- Ao fazer isso, as interseções de quaisquer dois conjuntos são adicionadas duas vezes, então subtraia-as: \(- |A \cap B| - |B \cap C| - |C \cap A|\)
- Finalmente, considere a interseção de todos os três conjuntos \(A \cap B \cap C\). Ela foi adicionada 3 vezes no passo 1, e subtraída 3 vezes no passo 2, deixando sua contagem atual em \(0\). Portanto, adicionamos de volta uma vez no final: \(+ |A \cap B \cap C|\)
4.3 Exemplo Concreto: O número de inteiros de 1 a 100 divisíveis por 2, 3 ou 5
- Conjunto universal: \(U = \{1, 2, \dots, 100\}\)
- Conjunto de múltiplos de 2: \(A\)
- Conjunto de múltiplos de 3: \(B\)
- Conjunto de múltiplos de 5: \(C\)
Vamos encontrar cada cardinalidade (onde \(\lfloor x \rfloor\) representa a função piso).
- \(|A| = \lfloor 100 / 2 \rfloor = 50\)
- \(|B| = \lfloor 100 / 3 \rfloor = 33\)
- \(|C| = \lfloor 100 / 5 \rfloor = 20\)
- \(|A \cap B|\) (Múltiplos de 6) \(= \lfloor 100 / 6 \rfloor = 16\)
- \(|B \cap C|\) (Múltiplos de 15) \(= \lfloor 100 / 15 \rfloor = 6\)
- \(|C \cap A|\) (Múltiplos de 10) \(= \lfloor 100 / 10 \rfloor = 10\)
- \(|A \cap B \cap C|\) (Múltiplos de 30) \(= \lfloor 100 / 30 \rfloor = 3\)
Portanto, existem 74 números divisíveis por 2, 3 ou 5.
5. Princípio Geral da Inclusão-Exclusão para \(n\) Conjuntos
Generalizando isso para \(n\) conjuntos \(A_1, A_2, \dots, A_n\) temos a seguinte bela fórmula.
5.1 Fórmula
\[ \left| \bigcup_{i=1}^n A_i \right| = \sum_{k=1}^n (-1)^{k-1} \left( \sum_{1 \le i_1 < i_2 < \dots < i_k \le n} \left| A_{i_1} \cap A_{i_2} \cap \dots \cap A_{i_k} \right| \right) \]Em palavras, a operação repete “adicionar as cardinalidades das interseções de um número ímpar de conjuntos e subtrair as cardinalidades das interseções de um número par de conjuntos”.
5.2 Esboço da Prova Matemática
Mostraremos que qualquer elemento \(x \in \bigcup_{i=1}^n A_i\) é contado exatamente uma vez no cálculo do lado direito.
Suponha que um certo elemento \(x\) esteja contido em exatamente \(m\) conjuntos (\(1 \le m \le n\)). O número de vezes que \(x\) é contado no lado direito pode ser expresso usando coeficientes binomiais da seguinte forma:
\[ \text{Vezes Contadas} = \binom{m}{1} - \binom{m}{2} + \binom{m}{3} - \dots + (-1)^{m-1} \binom{m}{m} \]Pelo teorema binomial, sabe-se que \((1 - 1)^m = \binom{m}{0} - \binom{m}{1} + \binom{m}{2} - \dots + (-1)^m \binom{m}{m} = 0\). Reorganizando isso:
\[ \binom{m}{0} - \left( \binom{m}{1} - \binom{m}{2} + \dots + (-1)^{m-1} \binom{m}{m} \right) = 0 \]Uma vez que \(\binom{m}{0} = 1\), a expressão dentro dos parênteses (que é o número de vezes que \(x\) é contado) é avaliada exatamente como \(1\). Isso prova que cada elemento é contado exatamente uma vez, sem duplicação.
6. Exemplo de Aplicação 1: Função Totiente de Euler
A função totiente de Euler \(\varphi(N)\) representa o número de inteiros de \(1\) a \(N\) que são coprimos com \(N\). Isso também pode ser calculado usando o Princípio da Inclusão-Exclusão.
Sejam os fatores primos de \(N\) representados por \(p_1, p_2, \dots, p_k\). Seja o conjunto universal \(U = \{1, 2, \dots, N\}\), e \(A_i\) seja “o conjunto de múltiplos de \(p_i\)”. O que queremos encontrar é o número de elementos que não pertencem a nenhum \(A_i\).
\[ \varphi(N) = N - \left| \bigcup_{i=1}^k A_i \right| \]A aplicação do Princípio da Inclusão-Exclusão e sua simplificação leva a esta famosa fórmula:
\[ \varphi(N) = N \left(1 - \frac{1}{p_1}\right) \left(1 - \frac{1}{p_2}\right) \dots \left(1 - \frac{1}{p_k}\right) \]7. Exemplo de Aplicação 2: Desarranjos
Um desarranjo é uma permutação dos números de \(1\) a \(n\) tal que nenhum \(i\)-ésimo número esteja na \(i\)-ésima posição. Por exemplo, é equivalente ao número total de maneiras de distribuir presentes em uma troca de presentes de modo que ninguém receba o próprio presente.
Seja \(A_i\) “o conjunto de permutações onde \(i\) está na \(i\)-ésima posição”. A cardinalidade do conjunto universal é \(n!\). Queremos encontrar \(n! - |A_1 \cup A_2 \cup \dots \cup A_n|\).
A cardinalidade da interseção de quaisquer \(k\) conjuntos é \((n-k)!\), e existem \(\binom{n}{k}\) maneiras de escolher tais \(k\) conjuntos. Aplicando o Princípio da Inclusão-Exclusão, o número de desarranjos \(D_n\) é obtido da seguinte forma:
\[ D_n = n! \sum_{k=0}^n \frac{(-1)^k}{k!} \]8. Cálculo e Implementação via Programação
O Princípio da Inclusão-Exclusão é extremamente útil na programação. Especialmente quando combinado com pesquisa exaustiva bit a bit, o Princípio da Inclusão-Exclusão para \(n\) condições pode ser implementado de forma concisa.
Abaixo está o código Python para encontrar “o número de inteiros de 1 a \(M\) que são divisíveis por qualquer um dos números primos em uma determinada lista”.
| |
A complexidade de tempo desse algoritmo é \(O(n \cdot 2^n)\), que é executado com rapidez suficiente se \(n\) for até cerca de 20.
9. Conclusão
O Princípio da Inclusão-Exclusão é uma fórmula matemática mágica que divide as sobreposições de conjuntos aparentemente complexas em uma repetição simples e mecânica de adição e subtração.
Sua gama de aplicações é excepcionalmente ampla, abrangendo desde problemas básicos de probabilidade a programação competitiva avançada e o cálculo da função totiente de Euler relacionada à criptografia. Dominar essa técnica poderosa melhorará drasticamente suas habilidades de resolução de problemas em matemática e algoritmos. Não deixe de tentar aplicá-lo a vários problemas e experimentar o seu poder.
