Universidade Federal do Espírito Santo Centro de Ciências Agrárias CCA UFES Departamento de Computação. Combinatória

Documentos relacionados
Contagem e Combinatória Elementar

Análise Combinatória. Matemática Discreta. Prof Marcelo Maraschin de Souza

Curso: Ciência da Computação Disciplina: Matemática Discreta 3. CONJUNTOS. Prof.: Marcelo Maraschin de Souza

Matemática Discreta - 09

CIC 111 Análise e Projeto de Algoritmos II

Recursividade Exaustiva e Backtracking

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Notas sobre Sequências e Cardinalidade (1)

significa ( x)[(x S P (x)) (P (x) x S)]

Técnicas de análise de algoritmos

Modelagem com relações de recorrência. Exemplo: Determinada população dobra a cada ano; população inicial = 5 a n = população depois de n anos

Recursividade, Tentativa e Erro

Sumário. 2 Índice Remissivo 9

REVISÃO DOS CONTEÚDOS

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

Interseção de Semiplanos

Aula 05: - Recursão (parte 1)

Funções, Seqüências, Cardinalidade

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

PRINCÍPIO FUNDAMENTAL DA CONTAGEM OU PRINCÍPIO MULTIPLICATIVO

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Recursividade. Objetivos do módulo. O que é recursividade

Matemática Discreta - 08

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Recursividade. Prof. Jesus José de Oliveira Neto

Aula 05: - Recursão (parte 1)

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia. 9 de Novembro de 2017

Aula prática 5. Funções Recursivas

PROBABILIDADE E ESTATÍSTICA. Profa. Dra. Yara de Souza Tadano

Matemática Discreta - 07

XIX Semana Olímpica de Matemática. Nível 3. Funções Geratrizes. José Armando Barbosa

Programa Combinatória Aritmética Racional MATEMÁTICA DISCRETA. Patrícia Ribeiro. Departamento de Matemática, ESTSetúbal 2018/ / 52

NOTAS DE AULA 1 METAHEURÍSTICA 13/10/2016

Mais Permutações e Combinações (grupo 2)

ALGORITMOS AVANÇADOS UNIDADE II Recursividade. Luiz Leão

Introdução Paradigmas

RESOLUÇÃO DCC-UFRJ MATEMÁTICA COMBINATÓRIA 2006/2 PROVA Considere a soma. S n = n 2 n 1

Análise de Algoritmos Parte 4

Introdução a Algoritmos Parte 08

Prof. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35

Desafios de Programação

Matemática Discreta. Aula 01: Análise Combinatória I. Tópico 01: Princípio fundamental de contagem

Análise e Complexidade de Algoritmos

Matemática Discreta - 06

4. COMBINATÓRIA BÁSICA. Combinatória: ramo da matemática que trata de arranjos de objetos (configurações satisfazendo propriedades específicas).

Estrutura de Dados Conceitos Iniciais

Unidade IV ESTATÍSTICA. Prof. Fernando Rodrigues

Análise e Síntese de Algoritmos. Programação Dinâmica CLRS, Cap. 15

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Tópicos Avançados em Algoritmos - exercícios de Prog. Din. com correcção parcial

1. Faça um programa que leia uma string digitada pelo usuário e salve em um arquivo em branco.

Números Naturais. MA12 - Unidade 1. Os Axiomas de Peano. O Axioma da Indução. Exemplo: uma demonstração por indução

Universidade Federal do Espírito Santo Centro de Ciências Agrárias CCA UFES Departamento de Computação. Ordenação

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Aula 06: Análise matemática de algoritmos recursivos

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

Conjuntos Contáveis e Não Contáveis / Contagem

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Recursividade

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa

Recursividade e relações de recorrência

Otimização Combinatória - Parte 4

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante).

Lista 2 - PMR2300/3200

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Probleminhas pseudoalgébricos com soluções elegantemente carteadas

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.

SUMÁRIO. Unidade 1 Matemática Básica

Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica. Prof. Humberto Brandão

8 ANÁLISE COMBINATÓRIA E

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

Programação I Aula 15 Definições recursivas Pedro Vasconcelos DCC/FCUP

Estruturas de Dados Estruturas de Dados Fundamentais

Exercícios: Recursão

Programação I Aula 15 Definições recursivas

Técnicas de projeto de algoritmos: Indução

n! = n (n 1) (n 2) 1.

Combinatória. Samuel Barbosa. 28 de março de 2006

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia. 23 de Março de 2018

Lista de Exercício de Linguagens de Programação Prog. Funcional

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Prof. Dr. Lucas Santana da Cunha de abril de 2018 Londrina

ESTRUTURAS DE DADOS. prof. Alexandre César Muniz de Oliveira. 1. Introdução 2. Pilhas 3. Filas 4. Listas 5. Árvores 6. Ordenação 7. Busca 8.

CI811 Tópicos em Algoritmos

Análise Combinatória

ESTUDO DA ANÁLISE COMBINATÓRIA

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

UNITAU APOSTILA ANÁLISE COMBINATÓRIA PROF. CARLINHOS

TE802 Processos Estocásticos em Engenharia. Informação sobre a disciplina Notes. Processos Estocásticos em Engenharia Conteúdo Notes.

1 Análise combinatória

Análise Combinatória e Probabilidade

Contagem. Próxima Aula: Prova

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Comparação com Divisão e Conquista

Solução da prova da 1.ª Fase. b) Queremos os números interessantes do tipo ABC6. Isso implica que A x B x C = 6. Temos dois casos a considerar:

Slide 01 16/03/2017. Estruturas de Dados. Prof. Cleziel Franzoni da /Cleziel.

Técnicas de Programação

O termo Programação Dinâmica é um bocado infeliz.

Transcrição:

Universidade Federal do Espírito Santo Centro de Ciências Agrárias CCA UFES Departamento de Computação Combinatória Tópicos Especiais em Programação Site: http://jeiks.net E-mail: jacsonrcsilva@gmail.com

Aprendendo a contar A combinatória é o ramo da matemática que trata a contagem. Os problemas combinatórios são comuns e requerem perspicácia e atenção. Uma vez que o problema for olhado de maneira correta, a resposta pode tornar óbvia. As técnicas de contagem básicas são: Princípio da Multiplicação: se existem A possibilidades do conjunto A e B possibilidades do conjunto B, então existem A x B formas de combinar um elemento de A com um elemento de B. Princípio da Adição: x 5 ou 4 + Se existem A possibilidades em um conjunto A e B possibilidades em um conjunto B, então existem A + B formas de tanto A ou B ocorrerem assumindo que os elementos de A e B são distintos. 2

Princípio da Multiplicação Quantas linhas existe em uma tabela verdade com 5 proposições simples? Se uma criança pode escolher entre duas balas (uma rosa e uma preta) e entre três chicletes (um amarelo, um verde e outro branco), quantos conjuntos diferentes a criança pode ter? 3

Princípio da Adição Se tiver que escolher uma sobremesa entre três tortas e quatro bolos, de quantas maneiras isso pode ser feito? Um consumidor deseja comprar um veículo em uma concessionária. A concessionária tem 23 automóveis e 14 caminhões no estoque. Quantas escolhas possíveis o consumidor tem? * e + Se uma mulher tem sete blusas, cinco saias e nove vestidos, de quantas maneiras diferentes ela pode se vestir? 4

Princípio da Inclusão e Exclusão Ao somar dois conjuntos, tem que se tomar o cuidado de não somar o mesmo elemento duas vezes, pois o mesmo pode estar nos dois conjuntos O Princípio da Adição é um caso especial do Princípio da Inclusão e Exclusão. Tem-se que tomar cuidado, pois A-B, B A, A B são distintos A B Princípio da inclusão e exclusão para dois conjuntos: A B = A + B A B A B A B B A A B = A + B A B E para três: A B C = A + B + C A B A C B C + A B C 5

Princípio da Inclusão e Exclusão Um pesquisador de união pública entrevistou 35 eleitores, todos apoiando o referendo 1, o referendo 2, ou ambos. Ele descobriu que 14 eleitores apoiam o referendo 1 e 26 apoiam o referendo 2. Quantos eleitores apoiam ambos? Um grupo de estudantes está planejando encomendar pizzas. Se 13 comem calabresa, 10 comem salame, 12 comem queijo extra, 4 comem tanto calabresa quanto salame, 5 comem tanto salame quanto queijo extra, 7 comem tanto calabresa quanto queijo extra, 3 comem de tudo. Quantos estudantes há no grupo?. 6

Objetos Combinatoriais Uma bijeção é uma mapeamento um para um entre os elementos de um conjunto e os elementos do outro conjunto. Contando o tamanho de um dos conjuntos automaticamente lhe dará o tamanho do outro conjunto. A exploração de bijeções depende de um repertório de conjuntos que saibamos como contar. Assim, poderemos mapear outros objetos para eles. Isso é útil para saber (sentir) o quão rápido o número de objetos cresce. As técnicas comuns para mensurar isso serão discutidas nos próximos slides. 7

Permutação Uma permutação é um arranjo de n itens, onde cada item aparece exatamente uma vez. Há n! permutações diferentes permutações para n. As 3! = 6 permutações de três itens são 123, 132, 213, 231, 312 e 321. Para n = 10, n! = 3.628.800. 8

Subconjuntos Um subconjunto é uma coleção de elementos de n possíveis itens. Existem 2n subconjuntos distintos de n coisas. Assim, existem 23 = 8 subconjuntos de {1,2,3}. Ex.: 1, 2, 3,12, 13, 23, 123, e o conjunto vazio (nunca se esqueça do conjunto vazio). Para n = 20, 2n = 1.048.576 9

Strings Uma string é uma sequência de itens que são organizados com repetição. Existem mn sequências distintas de n itens provenientes de m caracteres. Exemplo: existem 27 strings de tamanho 3 em 123. O número de strings binárias de tamanho n é idêntico ao número de subconjuntos de n itens (por quê?) 4bits: 0000 2 possuem 2 4 diferentes combinações... 10

Relações de Recorrência Relações de recorrência torna mais fácil a contagem de uma variedade de estruturas definidas recursivamente, como: Árvores; Listas; Fórmulas bem definidas; e Algoritmos dividir para conquistar. Uma relação de recorrência é uma equação que está definida em seus próprios termos, como os números de Fibonacci: F n = F n 1 + F n 2 11

Relações de Recorrência, por quê? Elas são úteis porque muitas funções naturais são expressas como recorrências: Polinomiais: Exponenciais: a n = a n 1 + 1, a 1 = 1 a n = n a n = 2a n 1, a 1 = 2 a n = 2 n Funções estranhas, mas interessantes e difíceis de representar: a n = na n 1, a 1 = 1 a n = n! Às vezes, é relativamente fácil encontrar uma recorrência como resposta de um problema de contagem. 12

Coeficientes Binomiais A classe mais importante de números contáveis são os coeficientes binomiais. O número de maneiras de escolher k coisas de n possibilidades é denotado por: O que eles contam? Comissões: Quantas maneiras existem para formar uma comissão de k membros retirados dentre n pessoas? A resposta é: ( n k) ( n k) Caminhos de uma rede (matriz): Quantas maneiras existem para viajar do canto superior esquerdo de uma matriz n x m para o canto inferior direito caminhando somente para baixo e para a direita? Cada caminho deve consistir de n+m passos, n para baixo e m para a direita. Todo o caminho com um conjunto diferente de movimentos é distinto, então temos o conjunto de caminhos: ( n+m n ) 13

Coeficientes Binomiais Leia: de n escolha k ( n k) = n! k!(n k)! 14

Coeficientes de (a + b) n Observe: (a + b) 3 = 1a 3 + 3a 2 b + 3ab 2 + 1b 3 Qual é o coeficiente do termo ak b n-k? A resposta é: ( n k) Porque ele conta a quantidade de maneiras que podemos escolher os k termos a em n possibilidades. A expressão (x+y)5 fica: ( 5 0) x5 y 0 + ( 5 1) x4 y 1 + ( 5 2) x3 y 2 + ( 5 3) x2 y 3 + ( 5 4) x1 y 4 + ( 5 5) x0 y 5 15

Implementação A seguinte implementação dessa recorrência é um bom exemplo das técnicas de programação utilizadas na programação dinâmica. Ela armazena uma matriz de resultados que nós podemos utilizar para definir os valores apropriados da recorrência. #define MAXN 100 long coeficientes_binomiais(int n, int k)/* de n escolha k */ { int i,j; long bc[maxn][maxn]; for (i=0; i<=n; i++) bc[i][0] = 1; for (j=0; j<=n; j++) bc[j][j] = 1; for (i=1; i<=n; i++) for (j=1; j<i; j++) bc[i][j] = bc[i 1][j 1] + bc[i 1][j]; } return( bc[n][k] ); 16

Fibonacci Várias outras sequências repetidamente aparecem em aplicações. Elas podem ser facilmente computadas utilizando relações de recorrência. Números de Fibonacci: Definidos pela recorrência F n = F n 1 + F n 2 e os valores iniciais F 0 = 0 and F 1 = 1. Esses números são muitos utilizados devido à sua característica e sua simplicidade. Os primeiros valores são 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, Fórmula para calcular os números de Fibonacci: F n = 1 (( 1+ (5) )n ( 1 (5) (5) 2 2 )n) 17

Números de Catalan Os números de Catalan formam uma sequência de números naturais que ocorrem em vários problemas de contagem Frequentemente, envolvem objetos definidos recursivamente. O número de Catalan é obtido pela seguinte fórmula: Ou: C n = 1 n+1 ( 2n n ) = (2n)! (n+1)! n! com n 0 C n = ( 2n n ) ( 2n n 1) com n 0 Mas também satisfazem a seguinte relação de recorrência: C 0 =1 e C n+1 = 2(2n+1) n+2 C n 18

Números de Catalan A expressão na forma de recursividade é: n=0 1 C n ={se n 1 se n>0 C i.c n 1 i i=0 n C n 0 1 1 1 2 2 3 5 4 14 5 42 6 132 7 429 8 1.430 9 4.862 10 16.796 11 58.786 12 208.012 13 742.900 14 2.674.440 15 9.694.845 16 35.357.670 19

Utilização dos Números de Catalan Empilhando moedas: Vamos empilhar moedas sobre uma linha de baixo que consiste de n moedas consecutivas. Não é permitido colocar moedas dos dois lados das moedas que estão no(s) extremo(s) da linha inferior. Então: Quantas maneiras existem para empilhar moedas sobre n moedas? n: O número de maneiras para empilhar moedas no plano. Solução: C n 20

Utilização dos Números de Catalan Balanceamento de Parênteses Queremos agrupar uma série de parênteses. Cada parênteses aberto deve ter uma correspondência de parênteses fechado. Então: Portanto, "(() ())" é válida, mas ") ()) ((" e "()) () (" não é. Quantos grupos existem para grupo de n pares de parênteses? n: O número de pares de parênteses. Solução: C n n = 0 Não fazer nada! 1 solução n = 1 () 1 solução n = 2 (( )) () () 2 soluções n = 3 ((( ))) (() ()) (()) () () (()) () () () 5 soluções 21

Utilização dos Números de Catalan Muitas soluções são equivalentes aos balanceamento de parênteses. Se quisermos conectar cinco pontos com dois arcos em uma linha deitada: 22

Utilização dos Números de Catalan Triangulação de polígonos: Queremos cortar um polígono convexo em triângulos, ligando os vértices com linhas retas que não se cruzam. De quantas maneiras diferentes existem para um polígono com N + 2 lados? Então: n: o número de lados do polígono 2 Solução: C n 23

Utilização dos Números de Catalan Árvores Binárias Quantos árvores binárias completas existem com n nós internos? Então: n: o número de nós internos sobre árvores binárias completas. Solução: C n 24

Números de Catalan Mais exemplos em: <http://goo.gl/4ni3y9> <http://goo.gl/ss7a9> 25

Números Eulerianos Os números de Euler permitem contar o número de permutações de n elementos com k ascendentes. Uma permutação é um rearranjo de uma lista ordenada de itens. Um ascendente de uma permutação {a 1, a 2,, a n } é um par (a i, a i+1 ), tal que a i < a i+1. Exemplo: As permutações de {1,2,3} são: {1,2,3}, {1,3,2}, {2,1,3}, {2,3,1}, {3,1,2}, {3,2,1} As permutações com exatamente 1 ascendente são: {1,3,2}, {2,1,3}, {2,3,1}, {3,1,2} 3 1 =4 Sendo, n k = n 1 k +(n k+1) n 1 k 1 26

Partições Inteiras Uma partição inteira de n é um conjunto não ordenado de inteiros positivos que somam até n. Por exemplo, existem sete partições de 5, ou seja, (5), (4, 1), (3, 2), (3, 1, 1), (2, 2, 1), (2, 1, 1, 1), e (1, 1, 1, 1, 1). A maneira mais fácil de contá-las é a de definir uma função f(n, k), dando o número de partições inteiras de n com o maior valor sendo k. Como a maior parte faz ou não chegar ao limite, então f(n, k) = f(n - k, k) + f (n, k 1). As bases são f(1, 1) = 1 e f (n, k) = 0 quando k> n. 27

Recursividade Utilizando a recursividade: Devemos possuir um critério de parada; Os valores são armazenados na memória como uma pilha; A cada nova iteração, as variáveis de escopo são recriadas no novo espaço da pilha de memória; Pode sobrecarregar o sistema e demorar a fornecer a resposta; Pode gerar erros/problemas, devido à: Critérios de parada mau incrementados; Ponteiros mau alocados/referenciados; Métodos custosos de resolução. 28

Problemas Fáceis: Counting; The Priest Mathematician; How many Fibs? Intermediários: Steps; Expressions; Difíceis: How many pieces of land? 29