Princípio da Multiplicação. > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 0/18

Documentos relacionados
2 Erro comum da indução. 3 Corretude de Algoritmos. > Indução Forte X Indução Fraca Erro comum da indução Corretude de Algoritmos 0/17

Princípio da Multiplicação Gerando todas as palavras de um alfabeto. > Princípios de Contagem e Enumeração Computacional 0/18

> Princípios de Contagem e Enumeração Computacional 1/13

Estruturas Discretas

> Princípios de Contagem e Enumeração Computacional 0/19

Apostila de Estuturas Discretas Parte I. Eduardo Sany Laber

Apostila de Estruturas Discretas Parte I. Eduardo Sany Laber

Ordenação em Tempo Linear. Leitura: Cormen Capítulo 8

MC102 Aula 26. Instituto de Computação Unicamp. 17 de Novembro de 2016

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

Introdução à Ciência da Computação

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

AULA 13. Algoritmos p.526/582

> Princípios de Contagem e Enumeração Computacional 1/10

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

Bucketsort. CLRS sec 8.4. Algoritmos p. 1

11º ano - Indução matemática

QuickSort CI/2015. Análise e Projeto de Algoritmos. - Prof. Lucídio A. F. Cabral

Análise e Complexidade de Algoritmos

Lista 2 - PMR2300/3200

Algoritmos e Programação I

Complexidade de Algoritmos

Projeto de Algoritmos e Indução Matemática

CI811 Tópicos em Algoritmos

CONTEÚDOS DO PRIMEIRO PERÍODO EXERCÍCIOS DE RECUPERAÇÃO DO PRIMEIRO PERÍODO

Exercícios: Recursão

DCC001 - Programação de Computadores. Lista de Exercícios 02 - Estruturas de Dados Homogêneas (Vetores).

Análise Combinatória

Oi, Ficou curioso? Então conheça nosso universo.

Algoritmos e Estrutura de Dados Aula 02 Listas em Python

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

ESTRUTURAS DE REPETIÇÃO - PARTE 1

Luís Fernando Schultz Xavier da Silveira. 12 de maio de 2010

Estruturas de Dados 2

Tópico 5 Algoritmos de Ordenação. Parte II - métodos de ordenação: counting sort, radix sort e bucket sort.

Programação Estruturada

Algoritmos para Gerar Permutações e Combinações em Ordem Lexicográfica

Universidade Federal do ABC Programação Estruturada Fabrício Olivetti França Lista de Exercícios 01

Recursão. Aula 1. Liana Duenha. Faculdade de Computação Universidade Federal de Mato Grosso do Sul

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

Algoritmos e Estruturas de Dados II Lista de Exercícios de Listas Lineares

Exercícios: Vetores e Matrizes

Paradigmas de programação

O Problema da Ordenação Métodos de Ordenação Parte 1

Análise Combinatória AULA 1. Métodos Simples de Contagem

Tópicos em Algoritmos. André Guedes

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS. Aluno (s): 01 ATIVIDADE. Revisão de Conteúdo

ESTRUTURAS DE REPETIÇÃO - PARTE 2

Estruturas de Dados. Revisão de Funções e Recursão. Agradecimentos

Recursão. Definição. Características. Recursividade 31/08/2010

Universidade Federal do ABC Programação Estruturada Fabrício Olivetti França Lista de Exercícios 02

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

Recursão. Introdução à Ciência da Computação II(2009/2010) Rosane Minghim. Apoio na confecção: Rogério Eduardo Garcia Danilo Medeiros Eler

CONTROLE DE FLUXO DE EXECUÇÃO

Algoritmos de Ordenação

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

Álgebra A - Aula 02 Teorema da fatoração única, Propriedade fundamental dos primos, números primos

Aula 05: - Recursão (parte 1)

AED2 - Aula 11 Problema da separação e quicksort

Busca em Memória Primária Estrutura de Dados II

Busca em Memória Primária Estrutura de Dados II

Algoritmos e Estruturas de Dados I Linguagem C

MATRIZES - PARTE Mais exemplos Multiplicação de duas matrizes AULA 26

Elementos de Matemática

Algoritmos I Edézio 1

Métodos de Ordenação Parte I

Encontro 5: Permutação e resolução de exercícios de contagem

Aula 05: - Recursão (parte 1)

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Estruturas de Dados 2

AULA 5 - Independência, Combinatória e

Contagem e Combinatória Elementar

Curso: Ciência da Computação Turma: 4ª Série. Probabilidade e Estatística. Aula 2

Análise de Algoritmos

Algoritmos de Ordenação: Tempo Linear

Pedro Ribeiro 2014/2015

Projeto e Análise de Algoritmos Análise de Complexidade. Prof. Luiz Chaimowicz

Polo Olímpico de Treinamento Intensivo UFPR Curso de Combinatória, Nível 3 1 o semestre de 2019

Algoritmos e Lógica de Programação. 6ª Lista de Exercícios Comandos de Repetição

Algoritmos de ordenação Quicksort

MA21 (2015) - Teste - Gabarito comentado. Problema 1 (OBM 2005) Na sequência de números

Noções de Probabilidade parte I

a) Em quantas ordem quatro pessoas podem senta num sofá de 4 lugares?

A única diferença entre o difícil e o impossível é que o último demora um pouco mais de tempo para ser alcançado..

BCC201 Introdução à Programação ( ) Prof. Reinaldo Silva Fortes. Prática 04 Estruturas de Dados Homogêneas Vetores

Métodos de Ordenação Parte 3

Lista de Exercícios de Algoritmos - 04 Para cada um dos exercícios abaixo, faça um programa (em laboratório) que teste a função.

Funções. Material Didático Unificado. BCC701 Programação de Computadores I Universidade Federal de Ouro Preto Departamento de Ciência da Computação

Funções. Material Didático Unificado. BCC701 Programação de Computadores I Universidade Federal de Ouro Preto Departamento de Ciência da Computação

Análise Combinatória

Indução Matemática. George Darmiton da Cunha Cavalcanti CIn - UFPE

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

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

Programação de Computadores II TCC

Célia Borlido 07/09/2007 Encontro Nacional dos Novos Talentos em Matemática

Transcrição:

Conteúdo 1 Corretude de Algoritmos 2 Princípios de Contagem e Enumeração Computacional Princípio da Multiplicação > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 0/18

Corretude de Algoritmos Exemplo (Calculando o fatorial) Consider o código abaixo. Fatorial input: n (inteiro positivo) Função Fat(n) Se n 1 Return n Senão Return n Fat(n 1) Fim Função. Mostre que a saída de Fat(n) é n!, para todo n 1. > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 1/18

Corretude de Algoritmos Prova: Caso Base. Para n = 1, Fat(1) = 1 = 1!. Hipotese Inductiva. P(k) : Fat(k) devolve k! Passo Indutivo. Pelo código temos que Fat(k + 1) devolve (k + 1) Fat(k). Entretanto, por hipótese de indução Fat(k) = k!. Segue que Fat(k + 1) devolve (k + 1) (k)! = (k + 1)! > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 2/18

Corretude de Algoritmos Exemplo (Quicksort) Quicksort(A,p,r) input: subvetor de A que começa na posição p e termina na posição r output: subvetor de A ordenado Se p < r então q Partition(A,p,r) Quicksort(A,p,q-1) Quicksort(A,q+1,r) Fim Se Partition(A,p,r) é uma rotina de pivoteamento que funciona da seguinte maneira: seja X = A[p] e seja j o número de elementos menores que x no subvetor A[p, r]. Partition coloca o elemento x na posição q = p + j, os elementos de A[p, r] menores que x nas posições A[p],..., A[q 1] e os maiores a x nas posições A[q + 1],..., A[r]. Assumindo que a rotina Partition funciona da maneira especificada, mostre que Quicksort(A,1,n) ordena o vetor A[1, n]. > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 3/18

Corretude de Algoritmos Solução. Base: Se o vetor tem tamanho 1 ou é vazio, ou seja, p r, o Quicksort não faz nada já que todo vetor de tamanho 1 é ordenado. Hipótese Indutiva (Forte). Assuma que P(r) é verdadeira para todo r {1,..., k}: P(r): Quicksort funciona corretamente para um vetor de tamanho r. > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 4/18

Corretude de Algoritmos Prova do Passo Indutivo Assuma que r p + 1 = k + 1. Primeiramente, Partition coloca o elemento x = A[p] na posição correta. Após, ele chama Quicksort(A,p,q-1) e Quicksort(A,q+1,r) para ordenar os subvetores A[p, q 1] e A[q + 1, r]. O funcionamento de Partition garante que A[p, q 1] contém os elementos de A[p, r] menores que x enquanto A[q + 1, r] contem os maiores ou iguais a x. Como os subvetores A[p, q 1] e A[q + 1, r] tem menos do que k + 1 elementos, a hipótese garante que o Quicksort ordena eles corretamente. Portanto, ao término da chamada Quicksort(A,p,r), x é colocado na posição correta em A[p, r] e os subvetores A[p, q 1] e A[q + 1, r] estão ordenados. Logo, podemos concluir que A[p, r] esta ordenado. > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 5/18

Corretude de Algoritmos Exemplo (Conversor Decimal-Binário) input: n (inteiro positivo) output: b (array de bits com a representação binária de n, começando com o byte menos significativo) Função Converte(n) t n k 0 zere todos os bits de b Enquanto t > 0 faça k k + 1 b[k] t mod 2 t t div 2 Fim Enquanto; Fim Função. Mostre que o algoritmo retorna a representação binária de um número natural n. > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 6/18

Corretude de Algoritmos Como exemplo, considere a execução do algoritmo quando n = 57 : t b k Início 57 000000000 0 Loop 1 28 000000001 1 Loop 2 14 000000001 2 Loop 3 7 000000001 3 Loop 4 3 000001001 4 Loop 5 1 000011001 5 Loop 6 0 000111001 6 Table : Execução do Algoritmo para n=57. > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 7/18

Corretude de Algoritmos Para provar que o algoritmo funciona, considere a seguinte proposição: Proposição Sejam m k o inteiro representado pelo vetor binário b t k o valor de t ao final do k-ésimo loop Então, n = t k.2 k + m k, k Questão 1. Mostre que essa proposição implica na corretude do algoritmo Questão 2. Prove essa proposição. > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 8/18

Corretude de Algoritmos Base. k = 0, t = n m = 0 Hipótese Indutiva. P(k) : A proposição vale ao término do laço k. Prova do Passo Indutivo Caso 1) t k é par No final do loop k + 1, temos t k+1 = t k 2 m k+1 = m k. Logo, e t k+1.2 k+1 + m k+1 = t k.2 k + m }{{ k = n } hip indutiva Caso 2) t k é ímpar O valor de t k+1 é t k 1 2 e m k+1 = m k + 2 k, já que um bit 1 é acrescido na posição k + 1 de b. t k+1.2 k+1 + m k+1 = t k 1.2 k+1 + m k + 2 k = t k.2 k + m k = n 2 }{{} hip indutiva > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 9/18

Conteúdo 1 Corretude de Algoritmos 2 Princípios de Contagem e Enumeração Computacional Princípio da Multiplicação > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 9/18

Objetivos Contar/listar o número de elementos de conjuntos finitos Aplicações Determinar o número de operações realizadas por um algoritmo para determinar sua eficiência Ferramenta utilizada para resolver problemas estatísticos Desenvolver o raciocínio dos alunos de ED > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 10/18

Objetivos Por que estudar problemas do tipo: 1 De quantas maneiras é possível dispor os alunos de uma turma em fila, sem que alunos com nomes consecutivos na ordem alfabética fiquem juntos? 2 Quantas permutações distintas tem a palavra MISSISSIPI? Duas justificativas: 1 Estes problemas são fáceis de formular; 2 As técnicas envolvidas na solução destes problemas podem ser aplicadas na resolução de problemas práticos > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 11/18

Objetivos Em algumas situações estamos interessados em calcular o número de elementos de um conjunto, enquanto que em outras desejamos listar todos os elementos de um conjunto. Exemplo Seja S o conjunto de todos os números de três algarismos que satisfazem as seguintes propriedades (i) todo algarismo pertence ao conjunto {2, 3, 6} (ii) nenhum algarismo pode repetir no mesmo número P1) Quantos elementos possui S? P2) Quem são os elementos de S? > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 12/18

Objetivos Exemplo Considere um caminhão que necessita entregar mercadorias em 12 localidades {L 1,..., L 12 } ao longo de um dia. Sabe-se que o consumo médio para ir da localidade L i para localidade L j é c ij, e que o caminhão deve partir de sua garagem e retornar para mesma. Considere que L 0 identifica a garagem. P1) Quantos trajetos distintos o caminhão pode percorrer? P2) Qual o trajeto que minimiza o consumo do caminhão? > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 13/18

Princípio da Multiplicação Uma das técnicas mais elementares de contagem é conhecida como princípio da multiplicação. Sejam os eventos E 1, E 2,..., E k. Se o evento E i, i = 1,..., k, pode ocorrer de n i formas diferentes e a forma com que o evento E i ocorre não influencia no número de formas que o evento E j pode ocorrer, i j, então a sequência de eventos E 1 E 2 E 3... E k pode ocorrer de n 1 n 2 n 3... n k formas diferentes. Exemplo Em uma placa de carro, as três primeiras posições são letras e as quatro restantes são dígitos. Quantas placas distintas são possíveis? > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 14/18

Princípio da Multiplicação O evento E i, i = 1, 2, 3, consiste em atribuir uma letra a i-ésima posição, enquanto que os eventos E 4, E 5, E 6, E 7 consistem em atribuir dígitos as posições 4, 5, 6 e 7 respectivamente. Logo temos, E i = 26, para i = 1, 2, 3 e E i = 10, para i = 4,..., 7. Segue do princípio da multiplicação que o número de placas é 10 4 26 3. > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 15/18

Princípio da Multiplicação Exemplo Quantas placas são possíveis de modo que nenhuma letra e nenhum dígito apareçam repetidos? > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 16/18

Princípio da Multiplicação Exemplo Seja S o conjunto dos números de telefone com as seguintes propriedades: (i) o número é formado de 8 dígitos (ii) o primeiro dígito pertence a {2,3,5,7} (iii) deve haver pelo menos um número repetido dentre os quatro últimos dígitos. Quantos elementos possui S? > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 17/18

Princípio da Multiplicação Exemplo Considere o trecho de código abaixo Para i=1,...l Para j=1,...m Para k=1,...n PRINT( OI ) Determine em função de m, n e l o número de vezes que o trecho de código imprime OI > Corretude de Algoritmos Princípios de Contagem e Enumeração Computacional 18/18