12/05/2015 Desafios de Programação TCC-00.254 | Turma A-1 Conteúdo Análise Combinatória Professor Leandro Augusto Frata Fernandes [email protected] Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2015.1/tcc-00.254 Leitura Sugerida • Art of Programming Contest AREFIN, A. S. 2nd ed. Gyankosh Prokashoni: 2006 Capítulo 7 (algumas partes) • Concrete Mathematics GRAHAM, R.L. et al. Addison-Wesley: 1994 Capítulos 5, 6 e 7 • Competitive Programming 2 / 3 HALIM, S.; HALIM, F. Lulu: 2012 / 2013 Capítulo 5 (algumas partes) • Programming Challenges SKIENA, S.S.; REVILÇA, M.A. Springer: 2003 Capítulo 6 TCC-00.254 Desafios de Programação 2 1 12/05/2015 Bibliotecas Nativas Sério!? Você quer uma biblioteca nativa? Esqueça! TCC-00.254 Desafios de Programação 3 TCC-00.254 Desafios de Programação 4 Análise Combinatória Contagem 2 12/05/2015 Princípios • Princípio multiplicativo Se um evento pode acontecer de maneiras diferentes, então o número de maneiras em que os eventos , , ⋯, podem ocorrer de forma sucessiva é Demostre com árvore de possibilidade. TCC-00.254 Desafios de Programação 5 Princípios • Princípio aditivo Dados os conjuntos disjuntos , , ⋯, , então o número de elementos da união ∪ ∪ ⋯∪ é ∪ • ∪⋯∪ = Princípio da inclusão e exclusão Dados os conjuntos ∪ é ∪ = e + o número de elementos em − ∩ TCC-00.254 Desafios de Programação Demostre com diagramas de Venn. 6 3 12/05/2015 Arranjos e Permutações • Permutações (permutação simples) Número de maneiras que podemos ordenar de um conjunto de elementos elementos = ! • -Permutações (arranjo simples) Número de maneiras que podemos ordenar de um conjunto de elementos = = ! − ! elementos A ordem dos elementos importa. TCC-00.254 Desafios de Programação 7 Arranjos e Permutações • Arranjo com repetição Número de grupos de tamanho que podemos formar com repetição de elementos a partir de um conjunto com elementos = A ordem dos elementos importa. TCC-00.254 Desafios de Programação 8 4 12/05/2015 Combinações Simples • Número de subconjuntos de tamanho podemos formar a partir de um conjunto com elementos ! = = ! − ! que Coeficiente Binomial A ordem dos elementos não importa. TCC-00.254 Desafios de Programação Coeficiente Binomial − 0 #define MAXN 100 9 = =1 −1 + −1 −1 =1 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]; } TCC-00.254 Desafios de Programação 10 5 12/05/2015 Subconjuntos Manipulação Algébrica vs. Intuição • O que representa a expressão abaixo e qual o resultado? = TCC-00.254 Desafios de Programação 11 Combinações com Repetição • Número de subconjuntos de tamanho podemos formar a partir de um conjunto com elementos = + −1 = que + −1 ! ! −1 ! A ordem dos elementos não importa. TCC-00.254 Desafios de Programação 12 6 12/05/2015 Partições • Uma combinação pode ser vista como a partição de um conjunto em dois subconjuntos Um com • elementos e outro com − elementos Partições generalizam combinações para subconjuntos − − − ⋯ − − ⋯− = ! ! !⋯ TCC-00.254 Desafios de Programação ! 13 Análise Combinatória Algumas Funções Enumerativas TCC-00.254 Desafios de Programação 14 7 12/05/2015 Números de Fibonacci 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, . . . • Recorrência • Forma fechada % = % =% % =1 % =0 1 5 +% 1+ 5 2 − 1− 5 2 TCC-00.254 Desafios de Programação 15 Números de Catalan 1, 1, 2, 5, 14, 42, 132, 429, 1430, . . . • Recorrência = =1 • Forma fechada = 1 2 +1 Problemas: Maneiras de balancear parênteses. Triangulações possíveis em um polígono convexo com vértices. __ , que não passam sobre a diagonal principal. Caminhos monótonos em uma grade de lado TCC-00.254 Desafios de Programação 16 8 12/05/2015 Números Eulerianos • Recorrência = • ' =1 0 Forma fechada = ___ * ( − −1 +1 ( exatamente −1 + −1 +1 ) −1 −)+1 Problemas: Permutações dos números 1 a nas quais elementos são maiores que seu antecessor. TCC-00.254 Desafios de Programação 17 Números de Stirling de Tipo 1 • Recorrência = ' 0 = =0 0 ' 0 =1 0 −1 + −1 −1 Arranjos de TCC-00.254 Desafios de Programação −1 Problemas: objetos em ciclos. 18 9 12/05/2015 Números de Stirling de Tipo 2 • Recorrência = −1 ' 0 =0 = 0 ' 0 =1 0 Maneiras de particionar + −1 −1 objetos em TCC-00.254 Desafios de Programação Problemas: subconjuntos não vazios. 19 10