Estruturas Discretas

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

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

Análise e Complexidade de Algoritmos

Algoritmos de ordenação Quicksort

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

Algoritmos de Ordenação: QuickSort

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

DAINF - Departamento de Informática

Programação Estruturada

Análise de Complexidade para algoritmos iterativos e recursivos

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

Árvores Árvores Geradoras de Custo Mínimo 0/16

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Relações de recorrência

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Estruturas de Dados 2

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

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

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

Algoritmos de pesquisa

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort

Complexidade de Algoritmos

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

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

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

Ordenação de Dados (III) HeapSort

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

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Divisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Algoritmos de ordenação Ordenação rápida ( Quicksort )

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Relações de recorrência

ÁRVORE BINÁRIA DE BUSCA

Projeto de Algoritmos e Indução Matemática

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

PAA-DCC-UFAM. Árvores. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

Quicksort. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick F. M.

Apostila de Estuturas Discretas Parte I. Eduardo Sany Laber

Algoritmos de Ordenação

LISTA DE EXERCÍCIOS. Humberto José Bortolossi

Algoritmos de Ordenação

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

Estruturas de Dados 2

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

Universidade da Madeira. 1. Recursão. 3. Busca. Profa. Dra. Laura Rodríguez Estruturas de dados e algoritmos 2

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

Pedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas

Pesquisa e Ordenação

MC102 Aula 27 Recursão II

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

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

Á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

Classificação por Seleção - selection sort

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

SCC-601 Introdução à Ciência da Computação II. Ordenação e Complexidade Parte 3. Lucas Antiqueira

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

QuickSort. Estrutura de Dados II Jairo Francisco de Souza

Projeto e Análise de Algoritmos

Apostila de Estruturas Discretas Parte I. Eduardo Sany Laber

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

Algoritmos de Ordenação: MergeSort

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Árvores Binária de Busca. Prof. César Melo DCC/ICE/UFAM

Transcrição:

Estruturas Discretas 2017.2 Marco Molinaro > Indução Forte Corretude de Algoritmos 1/20

Indução Forte > Indução Forte Corretude de Algoritmos 2/20

Indução Forte X Indução Fraca Para provar Propriedade para todo inteiro n n 0 basta mostrar: Indução (fraca) (Caso base) Que Propriedade vale para n 0 (Passo indutivo) Assume que Propriedade vale para n, mostra que vale para n + 1 > Indução Forte Corretude de Algoritmos 3/20

Indução Forte X Indução Fraca Para provar Propriedade para todo inteiro n n 0 basta mostrar: Indução (fraca) (Caso base) Que Propriedade vale para n 0 (Passo indutivo) Assume que Propriedade vale para n, mostra que vale para n + 1 Na verdade, no passo indutivo podemos utilizar que a propriedade vale para todo caso menor ou igual a n para provar que vale para n + 1 > Indução Forte Corretude de Algoritmos 3/20

Indução Forte X Indução Fraca Para provar Propriedade para todo inteiro n n 0 basta mostrar: Indução (fraca) (Caso base) Que Propriedade vale para n 0 (Passo indutivo) Assume que Propriedade vale para n, mostra que vale para n + 1 Na verdade, no passo indutivo podemos utilizar que a propriedade vale para todo caso menor ou igual a n para provar que vale para n + 1 Indução forte (Caso base) Que Propriedade vale para n 0 (Passo indutivo) Assume que propriedade vale para todos os números {n 0, n 0 + 1,..., n}, mostra que vale para n + 1 > Indução Forte Corretude de Algoritmos 3/20

Exemplos Definição (Informal) Uma árvore binária enraizada é (i) um conjunto vazio ou (ii) um nó denominado raíz com uma subárvore a esquerda e outra a direita > Indução Forte Corretude de Algoritmos 4/20

Exemplos Definição (Informal) Uma árvore binária enraizada é (i) um conjunto vazio ou (ii) um nó denominado raíz com uma subárvore a esquerda e outra a direita > Indução Forte Corretude de Algoritmos 5/20

Exemplos Definição (Informal) Uma árvore binária enraizada é (i) um conjunto vazio ou (ii) um nó denominado raíz com uma subárvore a esquerda e outra a direita > Indução Forte Corretude de Algoritmos 6/20

Definição (Informal) Dada uma árvore binária enraizada: Uma folha é um nó com 0 filhos Um nó interno é um nó com pelo menos um filho > Indução Forte Corretude de Algoritmos 7/20

Definição (Informal) Dada uma árvore binária enraizada: Uma folha é um nó com 0 filhos Um nó interno é um nó com pelo menos um filho Definição Uma árvore é dita estritamente binária se todo nó possui 0 ou 2 filhos > Indução Forte Corretude de Algoritmos 7/20

Exemplos Exemplo Prove por indução no número de nós internos que para toda árvore estritamente binária T temos onde folhas(t ) internos(t ) = 1, folhas(t ) = número de folhas internos(t ) = número de nós internos > Indução Forte Corretude de Algoritmos 8/20

Corretude de Algoritmos > Indução Forte Corretude de Algoritmos 9/20

Corretude de Algoritmos Lembre a definição de fatorial: n! = n (n 1) (n 2)... 2 1 Exemplo (Calculando o fatorial) Considere o código abaixo. Fatorial Entrada: n (inteiro positivo) Função Fat(n) If n 1 Return n End if Return n Fat(n 1) Fim Função Mostre que a saída de Fat(n) é n!, para todo n 1. > Indução Forte Corretude de Algoritmos 10/20

Corretude de Algoritmos Prova: (por indução fraca) Caso Base: n = 1. Por causa do If, Fat(1) = 1 = 1! > Indução Forte Corretude de Algoritmos 11/20

Corretude de Algoritmos Prova: (por indução fraca) Caso Base: n = 1. Por causa do If, Fat(1) = 1 = 1! Passo Indutivo. Suponha que a propriedade valha para n, ou seja Fat(n) = n!. Precisamos provar que vale para n + 1 > Indução Forte Corretude de Algoritmos 11/20

Corretude de Algoritmos Prova: (por indução fraca) Caso Base: n = 1. Por causa do If, Fat(1) = 1 = 1! Passo Indutivo. Suponha que a propriedade valha para n, ou seja Fat(n) = n!. Precisamos provar que vale para n + 1 Pelo código, Fat(n + 1) = (n + 1) Fat(n) > Indução Forte Corretude de Algoritmos 11/20

Corretude de Algoritmos Prova: (por indução fraca) Caso Base: n = 1. Por causa do If, Fat(1) = 1 = 1! Passo Indutivo. Suponha que a propriedade valha para n, ou seja Fat(n) = n!. Precisamos provar que vale para n + 1 Pelo código, Fat(n + 1) = (n + 1) Fat(n) Pela hipótese indutiva Fat(n) = n!, então > Indução Forte Corretude de Algoritmos 11/20

Corretude de Algoritmos Prova: (por indução fraca) Caso Base: n = 1. Por causa do If, Fat(1) = 1 = 1! Passo Indutivo. Suponha que a propriedade valha para n, ou seja Fat(n) = n!. Precisamos provar que vale para n + 1 Pelo código, Fat(n + 1) = (n + 1) Fat(n) Pela hipótese indutiva Fat(n) = n!, então Fat(n + 1) = (n + 1) Fat(n) = (n + 1) n! = (n + 1) n (n 1)... 2 1 (Pela definição de n!) = (n + 1)! > Indução Forte Corretude de Algoritmos 11/20

Corretude de Algoritmos Prova: (por indução fraca) Caso Base: n = 1. Por causa do If, Fat(1) = 1 = 1! Passo Indutivo. Suponha que a propriedade valha para n, ou seja Fat(n) = n!. Precisamos provar que vale para n + 1 Pelo código, Fat(n + 1) = (n + 1) Fat(n) Pela hipótese indutiva Fat(n) = n!, então Fat(n + 1) = (n + 1) Fat(n) = (n + 1) n! = (n + 1) n (n 1)... 2 1 (Pela definição de n!) = (n + 1)! Isso conclui o paso indutivo. Fim de prova. > Indução Forte Corretude de Algoritmos 11/20

Corretude de Algoritmos Vamos agora considerar o problema de ordenação de uma lista A de números > Indução Forte Corretude de Algoritmos 12/20

Corretude de Algoritmos Vamos agora considerar o problema de ordenação de uma lista A de números Vamos provar a corretude do algoritmo Quicksort > Indução Forte Corretude de Algoritmos 12/20

Corretude de Algoritmos Vamos agora considerar o problema de ordenação de uma lista A de números Vamos provar a corretude do algoritmo Quicksort Para simplificar, vamos assumir que os números na lista A são distintos > Indução Forte Corretude de Algoritmos 12/20

Quicksort(A,p,r) Entrada: vetor A, posição de início p posição de termino r Saída: vetor A com posições A[p], A[p + 1],..., A[r] ordenadas Se p < r então q Partition(A,p,r) Quicksort(A,p,q-1) Quicksort(A,q+1,r) Fim Se > Indução Forte Corretude de Algoritmos 13/20

Quicksort(A,p,r) Entrada: vetor A, posição de início p posição de termino r Saída: vetor A com posições A[p], A[p + 1],..., A[r] ordenadas 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 particionamento que funciona da seguinte maneira: Seja j o número de elementos no subvetor A[p, r] menores ou iguais ao valor x = A[p] > Indução Forte Corretude de Algoritmos 13/20

Quicksort(A,p,r) Entrada: vetor A, posição de início p posição de termino r Saída: vetor A com posições A[p], A[p + 1],..., A[r] ordenadas 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 particionamento que funciona da seguinte maneira: Seja j o número de elementos no subvetor A[p, r] menores ou iguais ao valor x = A[p] Partition coloca os elementos de A[p, r] menores a x no início, ou seja, nas posições A[p],..., A[p + j 1] (em qualquer ordem) > Indução Forte Corretude de Algoritmos 13/20

Quicksort(A,p,r) Entrada: vetor A, posição de início p posição de termino r Saída: vetor A com posições A[p], A[p + 1],..., A[r] ordenadas 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 particionamento que funciona da seguinte maneira: Seja j o número de elementos no subvetor A[p, r] menores ou iguais ao valor x = A[p] Partition coloca os elementos de A[p, r] menores a x no início, ou seja, nas posições A[p],..., A[p + j 1] (em qualquer ordem) coloca valor x logo após, na posição A[p + j ] > Indução Forte Corretude de Algoritmos 13/20

Quicksort(A,p,r) Entrada: vetor A, posição de início p posição de termino r Saída: vetor A com posições A[p], A[p + 1],..., A[r] ordenadas 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 particionamento que funciona da seguinte maneira: Seja j o número de elementos no subvetor A[p, r] menores ou iguais ao valor x = A[p] Partition coloca os elementos de A[p, r] menores a x no início, ou seja, nas posições A[p],..., A[p + j 1] (em qualquer ordem) coloca valor x logo após, na posição A[p + j ] coloca elementos maiores que x nas outras posições, ou seja A[p + j + 1],..., A[r] > Indução Forte Corretude de Algoritmos 13/20

Quicksort(A,p,r) Entrada: vetor A, posição de início p posição de termino r Saída: vetor A com posições A[p], A[p + 1],..., A[r] ordenadas 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 particionamento que funciona da seguinte maneira: Seja j o número de elementos no subvetor A[p, r] menores ou iguais ao valor x = A[p] Partition coloca os elementos de A[p, r] menores a x no início, ou seja, nas posições A[p],..., A[p + j 1] (em qualquer ordem) coloca valor x logo após, na posição A[p + j ] coloca elementos maiores que x nas outras posições, ou seja A[p + j + 1],..., A[r] e retorna posição do x, ou seja, p + j > Indução Forte Corretude de Algoritmos 13/20

Exemplo de Quicksort(A,2,5) > Indução Forte Corretude de Algoritmos 14/20

Exemplo (Quicksort) Assumindo que a rotina Partition funciona da maneira especificada, mostre que Quicksort(A,1,n) ordena o vetor A[1, n]. > Indução Forte Corretude de Algoritmos 15/20

Exemplo (Quicksort) Assumindo que a rotina Partition funciona da maneira especificada, mostre que Quicksort(A,1,n) ordena o vetor A[1, n]. Prova: Vamos provar que pra todo p r, Quicksort(A, p,r) ordena A[p, r] > Indução Forte Corretude de Algoritmos 15/20

Exemplo (Quicksort) Assumindo que a rotina Partition funciona da maneira especificada, mostre que Quicksort(A,1,n) ordena o vetor A[1, n]. Prova: Vamos provar que pra todo p r, Quicksort(A, p,r) ordena A[p, r] Prova por indução forte em n = p r + 1 (tamanho to subvetor que queremos ordenar) > Indução Forte Corretude de Algoritmos 15/20

Exemplo (Quicksort) Assumindo que a rotina Partition funciona da maneira especificada, mostre que Quicksort(A,1,n) ordena o vetor A[1, n]. Prova: Vamos provar que pra todo p r, Quicksort(A, p,r) ordena A[p, r] Prova por indução forte em n = p r + 1 (tamanho to subvetor que queremos ordenar) Casos base: p r + 1 = 0 e p r + 1 = 1. Em ambos os casos Quicksort(A,p,r) não faz nada > Indução Forte Corretude de Algoritmos 15/20

Exemplo (Quicksort) Assumindo que a rotina Partition funciona da maneira especificada, mostre que Quicksort(A,1,n) ordena o vetor A[1, n]. Prova: Vamos provar que pra todo p r, Quicksort(A, p,r) ordena A[p, r] Prova por indução forte em n = p r + 1 (tamanho to subvetor que queremos ordenar) Casos base: p r + 1 = 0 e p r + 1 = 1. Em ambos os casos Quicksort(A,p,r) não faz nada Ok, pois todo subvetor de tamanho 0 ou 1 já está ordenado > Indução Forte Corretude de Algoritmos 15/20

Passo indutivo. Suponha que a Quicksort retorna A[p, r] ordenato desde que p r + 1 n (indução forte) > Indução Forte Corretude de Algoritmos 16/20

Passo indutivo. Suponha que a Quicksort retorna A[p, r] ordenato desde que p r + 1 n (indução forte) Precisamos provar que vale quando p r + 1 = n + 1 > Indução Forte Corretude de Algoritmos 16/20

Passo indutivo. Suponha que a Quicksort retorna A[p, r] ordenato desde que p r + 1 n (indução forte) Precisamos provar que vale quando p r + 1 = n + 1 Primeiro, Quicksort(A,p,r) executa Partition(A,p,r) > Indução Forte Corretude de Algoritmos 16/20

Passo indutivo. Suponha que a Quicksort retorna A[p, r] ordenato desde que p r + 1 n (indução forte) Precisamos provar que vale quando p r + 1 = n + 1 Primeiro, Quicksort(A,p,r) executa Partition(A,p,r) Partition coloca todos os elementos menores que valor x = A[p] à esquerda, e os maiores a direita só falta ordenar os subvetores a esquerda e a direita do valor x > Indução Forte Corretude de Algoritmos 16/20

Depois, Quicksort executa a recursão Quicksort(A,p,q-1) (subvetor a esquerda de x) > Indução Forte Corretude de Algoritmos 17/20

Depois, Quicksort executa a recursão Quicksort(A,p,q-1) (subvetor a esquerda de x) Essa recursão opera em subvetor de tamanho r (q 1) + 1 = r q, estritamente menor que r p + 1 = n + 1 > Indução Forte Corretude de Algoritmos 17/20

Depois, Quicksort executa a recursão Quicksort(A,p,q-1) (subvetor a esquerda de x) Essa recursão opera em subvetor de tamanho r (q 1) + 1 = r q, estritamente menor que r p + 1 = n + 1 tamanho do subvetor é n > Indução Forte Corretude de Algoritmos 17/20

Depois, Quicksort executa a recursão Quicksort(A,p,q-1) (subvetor a esquerda de x) Essa recursão opera em subvetor de tamanho r (q 1) + 1 = r q, estritamente menor que r p + 1 = n + 1 tamanho do subvetor é n Pela hipótese indutiva essa chamada recursiva ordena o subvetor esquerdo A[p, q 1] de forma correta > Indução Forte Corretude de Algoritmos 17/20

Finalmente, Quicksort executa a recursão Quicksort(A,q+1,r) (subvetor a direita de x) > Indução Forte Corretude de Algoritmos 18/20

Finalmente, Quicksort executa a recursão Quicksort(A,q+1,r) (subvetor a direita de x) Essa recursão opera em subvetor de tamanho r (q + 1) + 1 = r q, estritamente menor que r p + 1 = n + 1 > Indução Forte Corretude de Algoritmos 18/20

Finalmente, Quicksort executa a recursão Quicksort(A,q+1,r) (subvetor a direita de x) Essa recursão opera em subvetor de tamanho r (q + 1) + 1 = r q, estritamente menor que r p + 1 = n + 1 tamanho do subvetor é n > Indução Forte Corretude de Algoritmos 18/20

Finalmente, Quicksort executa a recursão Quicksort(A,q+1,r) (subvetor a direita de x) Essa recursão opera em subvetor de tamanho r (q + 1) + 1 = r q, estritamente menor que r p + 1 = n + 1 tamanho do subvetor é n Pela hipótese indutiva essa chamada recursiva ordena o subvetor direito A[q + 1, r] de forma correta > Indução Forte Corretude de Algoritmos 18/20

Finalmente, Quicksort executa a recursão Quicksort(A,q+1,r) (subvetor a direita de x) Essa recursão opera em subvetor de tamanho r (q + 1) + 1 = r q, estritamente menor que r p + 1 = n + 1 tamanho do subvetor é n Pela hipótese indutiva essa chamada recursiva ordena o subvetor direito A[q + 1, r] de forma correta Quicksort retorna. Note que vetor A[p, r] está ordenado > Indução Forte Corretude de Algoritmos 18/20

Exercicios Exercicio: Considere o seguinte procedimento Prog2(int n) If n < 3 Imprima( Oi ) 4 vezes Return Else Prog2(n-1) Prog2(n-2) End if Seja T (n) o número de vezes que a palavra OI é impressa quando Prog2 é chamado com parâmetro n Prove por indução (forte) que T (n) 4 (7/4) n pra todo n 1 > Indução Forte Corretude de Algoritmos 19/20