13.07.2015 Views

Corretude - UFCG

Corretude - UFCG

Corretude - UFCG

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Introdução Indução Algoritmos Recursivos Algoritmos Iterativos<strong>Corretude</strong>Prof. Dr. Leandro Balby MarinhoAnálise e Técnicas de AlgoritmosProf. Dr. Leandro Balby Marinho 1 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosRoteiro1. Introdução2. Revisão: Indução Matemática3. <strong>Corretude</strong> de Algoritmos Recursivos4. <strong>Corretude</strong> de Algoritmos IterativosProf. Dr. Leandro Balby Marinho 2 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos Iterativos<strong>Corretude</strong>◮ Quando esta máquina está correta?◮ Quando não está?Prof. Dr. Leandro Balby Marinho 2 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos Iterativos<strong>Corretude</strong> de AlgoritmosNesse curso trataremos de corretude parcial.<strong>Corretude</strong> ParcialUm algoritmo é parcialmente correto se, para todas as instânciasdo problema, ele termina com a resposta correta.◮ Como ter certeza que um algoritmo sempre produz a respostacorreta?Prof. Dr. Leandro Balby Marinho 3 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos Iterativos<strong>Corretude</strong> de AlgoritmosNesse curso trataremos de corretude parcial.<strong>Corretude</strong> ParcialUm algoritmo é parcialmente correto se, para todas as instânciasdo problema, ele termina com a resposta correta.◮ Como ter certeza que um algoritmo sempre produz a respostacorreta?◮Testes exaustivos.Prof. Dr. Leandro Balby Marinho 3 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos Iterativos<strong>Corretude</strong> de AlgoritmosNesse curso trataremos de corretude parcial.<strong>Corretude</strong> ParcialUm algoritmo é parcialmente correto se, para todas as instânciasdo problema, ele termina com a resposta correta.◮ Como ter certeza que um algoritmo sempre produz a respostacorreta?◮◮Testes exaustivos.Técnicas de demonstração matemáticaProf. Dr. Leandro Balby Marinho 3 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosRoteiro1. Introdução2. Revisão: Indução Matemática3. <strong>Corretude</strong> de Algoritmos Recursivos4. <strong>Corretude</strong> de Algoritmos IterativosProf. Dr. Leandro Balby Marinho 4 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosIndução Matemática◮É usada para mostrar que uma dada afirmação é verdadeirapara todos os inteiros positivos.Prof. Dr. Leandro Balby Marinho 4 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosIndução Matemática◮ É usada para mostrar que uma dada afirmação é verdadeirapara todos os inteiros positivos.◮ Por exemplo, para todo n ∈ Z + :Prof. Dr. Leandro Balby Marinho 4 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosIndução Matemática◮ É usada para mostrar que uma dada afirmação é verdadeirapara todos os inteiros positivos.◮ Por exemplo, para todo n ∈ Z + :◮ n! ≤ n n ,Prof. Dr. Leandro Balby Marinho 4 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosIndução Matemática◮ É usada para mostrar que uma dada afirmação é verdadeirapara todos os inteiros positivos.◮ Por exemplo, para todo n ∈ Z + :◮ n! ≤ n n ,◮ n 3 − n é divisível por 3,Prof. Dr. Leandro Balby Marinho 4 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosIndução Matemática◮ É usada para mostrar que uma dada afirmação é verdadeirapara todos os inteiros positivos.◮ Por exemplo, para todo n ∈ Z + :◮ n! ≤ n n ,◮ n 3 − n é divisível por 3,◮ a soma dos primeiros n inteiros positivos é n(n + 1)/2.Prof. Dr. Leandro Balby Marinho 4 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosIntuiçãoDada uma fileira infinita de dominós, podemos afirmar que umdominó arbitrário irá cair?Prof. Dr. Leandro Balby Marinho 5 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosPrimeiro Princípio de InduçãoPrimeiro Princípio de InduçãoPara provar que P(n) é verdade para todo n ∈ Z + , precisamos provar oseguinte:1. P(1) (passo básico ou base da indução )2. (∀k ∈ Z + ) (P(k) → P(k + 1)) (passo indutivo)Demonstração usando o primeiro princípio da induçãoPasso 1 Prove a base da induçãoPasso 2 Suponha P(k)Passo 3 Prove P(k + 1) (passo de indução)Prof. Dr. Leandro Balby Marinho 6 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 1Mostre que a equação 1 + 3 + 5 + . . . + (2n − 1) = n 2 é verdadeira paratodo n ∈ Z + .Prof. Dr. Leandro Balby Marinho 7 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 1Mostre que a equação 1 + 3 + 5 + . . . + (2n − 1) = n 2 é verdadeira paratodo n ∈ Z + .Para n = 1, 1 = 1 2 é verdadeiro.Prof. Dr. Leandro Balby Marinho 7 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 1Mostre que a equação 1 + 3 + 5 + . . . + (2n − 1) = n 2 é verdadeira paratodo n ∈ Z + .Para n = 1, 1 = 1 2 é verdadeiro. Agora supomos P(k) verdadeiro1 + 3 + 5 + . . . + (2k − 1) = k 2 (1)Prof. Dr. Leandro Balby Marinho 7 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 1Mostre que a equação 1 + 3 + 5 + . . . + (2n − 1) = n 2 é verdadeira paratodo n ∈ Z + .Para n = 1, 1 = 1 2 é verdadeiro. Agora supomos P(k) verdadeiro1 + 3 + 5 + . . . + (2k − 1) = k 2 (1)Usando a hipótese de indução, queremos mostrar P(k + 1), ou seja1 + 3 + 5 + . . . + (2k − 1) + [(2(k + 1) − 1] = (k + 1) 2 (2)Prof. Dr. Leandro Balby Marinho 7 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 1Mostre que a equação 1 + 3 + 5 + . . . + (2n − 1) = n 2 é verdadeira paratodo n ∈ Z + .Para n = 1, 1 = 1 2 é verdadeiro. Agora supomos P(k) verdadeiro1 + 3 + 5 + . . . + (2k − 1) = k 2 (1)Usando a hipótese de indução, queremos mostrar P(k + 1), ou seja1 + 3 + 5 + . . . + (2k − 1) + [(2(k + 1) − 1] = (k + 1) 2 (2)Mostrando-se a penúltima parcela, procedemos como segue:1 + 3 + 5 + . . . + (2k − 1) + [(2(k + 1) − 1]=k 2 + [2(k + 1) − 1]=k 2 + 2k + 1=(k + 1) 2Prof. Dr. Leandro Balby Marinho 7 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 2Mostre que o número de linhas em uma tabela verdade, para qualquern ∈ Z + proposições, é dado por 2 n .Prof. Dr. Leandro Balby Marinho 8 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 2Mostre que o número de linhas em uma tabela verdade, para qualquern ∈ Z + proposições, é dado por 2 n .P(1) = 2 1 = 2 é verdade, pois uma proposição tem dois valores possíveis.Agora supomos que P(k) = 2 k e tentamos mostrar queP(k + 1) = 2 k+1Como P(k + 1) = 2P(k), chegamos aP(k + 1) = 2(2 k ) = 2 k+1Prof. Dr. Leandro Balby Marinho 8 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 3Mostre que para qualquer n ∈ Z + , se 1 + x > 0, então(1 + x) n ≥ 1 + nxProf. Dr. Leandro Balby Marinho 9 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 3Mostre que para qualquer n ∈ Z + , se 1 + x > 0, então(1 + x) n ≥ 1 + nxBase: Para n = 1 temos 1 + x ≥ 1 + x.Hipótese Indutiva: (1 + x) k ≥ 1 + kxMostrar: (1 + x) k+1 ≥ 1 + (k + 1)xProf. Dr. Leandro Balby Marinho 9 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 3Mostre que para qualquer n ∈ Z + , se 1 + x > 0, então(1 + x) n ≥ 1 + nxBase: Para n = 1 temos 1 + x ≥ 1 + x.Hipótese Indutiva: (1 + x) k ≥ 1 + kxMostrar: (1 + x) k+1 ≥ 1 + (k + 1)x(1 + x) k+1=(1 + x)(1 + x) k≥(1 + x)(1 + kx) (pela hip. indutiva)=1 + (k + 1)x + kx 2≥1 + (k + 1)x (pois kx 2 ≥ 0)Prof. Dr. Leandro Balby Marinho 9 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExercíciosExercício 1: Mostre que1 + 2 + 3 + 4 + 5 + . . . + n =para todos os inteiros n positivos.n(n + 1)2Exercício 2: Mostre que uma árvore binária completa de k níveispossui 2 k − 1 vértices.Prof. Dr. Leandro Balby Marinho 10 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosSegundo Princípio da Indução MatemáticaSegundo Princípio de InduçãoPara provar que ∀n P(n) é verdade, precisamos provar duassentenças:1. P(1) (passo básico ou base da indução )2. (∀k ∈ Z + ) (P(1) ∧ P(2) ∧ . . . ∧ P(k) → P(k + 1)) (passoindutivo)Prof. Dr. Leandro Balby Marinho 11 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 4Prove que, para todo n ≥ 2, n é um número primo ou pode ser decompostoem um produto de números primos, sendo essa decomposição única.Prof. Dr. Leandro Balby Marinho 12 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 4Prove que, para todo n ≥ 2, n é um número primo ou pode ser decompostoem um produto de números primos, sendo essa decomposição única.Base: Como 2 é é primo, então o caso base é verificado.Hipótese Indutiva: Assumimos queé verdadeiro.P(2) ∧ P(3) ∧ . . . ∧ P(k)Mostrar: Para provar que P(k + 1) temos que considerar dois casos:1. Se k + 1 é primo então P(k + 1) é verificado e terminamos.2. Se não, k + 1 é um composto e então ele tem fatores u, v tal que2 ≤ u ≤ v < k + 1 tal queu · v = k + 1Prof. Dr. Leandro Balby Marinho 12 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 4 cont.Agora aplicamos o passo indutivo; ambos u e v são menores que k + 1 eportanto podem ambos ser decompostos em um produto único de primos;u := ∏ ip i ,v := ∏ jp jPortanto,k + 1 :=(u := ∏ ip i) ⎛ ⎝v := ∏ jp j⎞⎠e verificamos P(k + 1) por indução forte.Prof. Dr. Leandro Balby Marinho 13 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosRoteiro1. Introdução2. Revisão: Indução Matemática3. <strong>Corretude</strong> de Algoritmos Recursivos4. <strong>Corretude</strong> de Algoritmos IterativosProf. Dr. Leandro Balby Marinho 14 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosRecursividade: RevisãoUma definição onde um item é definido em termos de si mesmoé chamada de uma definição recursiva ou definição por recorrência.Uma definição recursiva tem duas partes:1. Um caso base, onde casos mais simples do item sendodefinido são especificados.2. Um passo recursivo, onde novos casos são construídos emfunção de casos anteriores.Prof. Dr. Leandro Balby Marinho 14 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosSequências Definidas por RecursividadeUma sequência S é uma lista de objetos numerados emdeterminada ordem. S(n) denota o n-ésimo elemento da sequência.Exemplo 5A sequencia s é definida por1. s(1) = 2 (caso base)2. s(n) = 2s(n − 1) para n ≥ 2 (passo recursivo)Prof. Dr. Leandro Balby Marinho 15 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosSequências Definidas por RecursividadeUma sequência S é uma lista de objetos numerados emdeterminada ordem. S(n) denota o n-ésimo elemento da sequência.Exemplo 5A sequencia s é definida por1. s(1) = 2 (caso base)2. s(n) = 2s(n − 1) para n ≥ 2 (passo recursivo)A sequencia A é dada por2, 4, 8, 16, 32, . . .Prof. Dr. Leandro Balby Marinho 15 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosSequências Definidas por RecursividadeSequencia de FibonacciA sequencia de Fibonacci f é definida por:1. f (0) = 0 (caso base)2. f (1) = 1 (caso base)3. f (n) = f (n − 1) + f (n − 2) para n ≥ 2 (passo recursivo)Prof. Dr. Leandro Balby Marinho 16 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosSequências Definidas por RecursividadeSequencia de FibonacciA sequencia de Fibonacci f é definida por:1. f (0) = 0 (caso base)2. f (1) = 1 (caso base)3. f (n) = f (n − 1) + f (n − 2) para n ≥ 2 (passo recursivo)A sequencia de Fibonnaci para 2 ≤ n ≤ 6 segue abaixo:f (2) = f (1) + f (0) = 1 + 0 = 1,f (3) = f (2) + f (1) = 1 + 1 = 2,f (4) = f (3) + f (2) = 2 + 1 = 3,f (5) = f (4) + f (3) = 3 + 2 = 5,f (6) = f (5) + f (4) = 5 + 3 = 8.Prof. Dr. Leandro Balby Marinho 16 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosAlgoritmos RecursivosAlgoritmos RecursivosUm algoritmo é chamado recursivo se ele resolve um problemareduzindo-o à instâncias do mesmo problema com entradas menores.Prof. Dr. Leandro Balby Marinho 17 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 6Escreva um algoritmo recursivo para calcular n!, onde n é uminteiro não negativo.Prof. Dr. Leandro Balby Marinho 18 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 6Escreva um algoritmo recursivo para calcular n!, onde n é uminteiro não negativo.Fat(n)1 if n == 02 return 13 else4 return n · Fat(n − 1)Prof. Dr. Leandro Balby Marinho 18 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 7Escreva um algoritmo recursivo para cacular a n , onde a é umnúmero real não negativo e n um inteiro não negativo.Prof. Dr. Leandro Balby Marinho 19 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 7Escreva um algoritmo recursivo para cacular a n , onde a é umnúmero real não negativo e n um inteiro não negativo.Pot(a, n)1 if n == 02 return 13 else4 return a · Pot(a, n − 1)Prof. Dr. Leandro Balby Marinho 19 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos Iterativos<strong>Corretude</strong> de Algoritmos Recursivos◮ Ideia: Usar indução matemática.◮ Definir a conjectura a provar.◮ Caso Base: condição de parada da recursão.◮ Assumir que as chamadas recursivas anteriores estão corretas(hipótese indutiva).◮ Usar esse argumento para provar que a execução atual écorreta (passo indutivo).Prof. Dr. Leandro Balby Marinho 20 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 8Prove que o algoritmo do fatorial recursivo é correto.◮ Conjectura: Fat(n) = n!, para n ≥ 0◮ Caso Base: Se n = 0, então Fat(n) = 1. Isso é correto jáque 0! = 1.◮ Hipótese indutiva: Agora assumimos que Fat(k) = k!◮ Mostrar: Fat(k + 1) = (k + 1)!◮ Passo Indutivo: ComoFat(k + 1) = (k + 1) · Fat(k)e pela hipótese indutiva Fat(k) = k!, segue queFat(k + 1) = (k + 1) · k! = (k + 1)!Prof. Dr. Leandro Balby Marinho 21 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 9Prove a corretude do algoritmo Pot(a, n).◮ Conjectura: Pot(a, n) = a n .Prof. Dr. Leandro Balby Marinho 22 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 9Prove a corretude do algoritmo Pot(a, n).◮ Conjectura: Pot(a, n) = a n .◮ Caso Base: Se n = 0, então Pot(a, n) = 1. Isso é correto jáque a 0 = 1.Prof. Dr. Leandro Balby Marinho 22 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 9Prove a corretude do algoritmo Pot(a, n).◮ Conjectura: Pot(a, n) = a n .◮ Caso Base: Se n = 0, então Pot(a, n) = 1. Isso é correto jáque a 0 = 1.◮ Hipótese indutiva: Agora assumimos que Pot(a, k) = a kpara qualquer k ∈ Z +Prof. Dr. Leandro Balby Marinho 22 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 9Prove a corretude do algoritmo Pot(a, n).◮ Conjectura: Pot(a, n) = a n .◮ Caso Base: Se n = 0, então Pot(a, n) = 1. Isso é correto jáque a 0 = 1.◮ Hipótese indutiva: Agora assumimos que Pot(a, k) = a kpara qualquer k ∈ Z +◮ Mostrar: Pot(a, k + 1) = a k+1Prof. Dr. Leandro Balby Marinho 22 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 9Prove a corretude do algoritmo Pot(a, n).◮ Conjectura: Pot(a, n) = a n .◮ Caso Base: Se n = 0, então Pot(a, n) = 1. Isso é correto jáque a 0 = 1.◮ Hipótese indutiva: Agora assumimos que Pot(a, k) = a kpara qualquer k ∈ Z +◮ Mostrar: Pot(a, k + 1) = a k+1◮ Passo Indutivo: ComoPot(a, k + 1) = a · Pot(a, k)e pela hipótese indutiva Pot(a, k) = a k , segue quePot(a, k + 1) = a · a k = a k+1Prof. Dr. Leandro Balby Marinho 22 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExercício 3Prove a corretude do algoritmo que retorna o máximo de um vetorde n elementos dado abaixo.Maximo(A, n)1 if n ≤ 12 return A[1]3 else4 return max(Maximo(A, n − 1), A[n])Conjectura: Para todo n ≥ 1, Maximo(A, n) retornamax{A[1], A[2], . . . , A[n]}Prof. Dr. Leandro Balby Marinho 23 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExercício 4Considere o seguinte algoritmo recursivo para calcular a soma dosprimeiros n cubos: S(n) = 1 3 + 2 3 + . . . + n 3 .S(n)// Entrada: Um inteiro positivo n// Saida: A soma dos n primeiros cubos1 if n == 12 return 13 else return S(n − 1) + n · n · nProve a corretude desse algoritmo usando indução matemática.Prof. Dr. Leandro Balby Marinho 24 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosRoteiro1. Introdução2. Revisão: Indução Matemática3. <strong>Corretude</strong> de Algoritmos Recursivos4. <strong>Corretude</strong> de Algoritmos IterativosProf. Dr. Leandro Balby Marinho 25 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosAlgoritmos Iterativos◮ Algoritmos iterativos são normalmente baseados em laços (e.g. “while” e “for”).◮ Como saber se esses algoritmos são corretos?Prof. Dr. Leandro Balby Marinho 25 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos Iterativos<strong>Corretude</strong> de Algoritmos Iterativos1. Analise o algoritmo um laço por vez (começando do maisinterno em aninhamentos).2. Derive um invariante do laço (IL) para cada laço.3. Prove IL levando os seguintes critérios em consideração:◮◮◮Inicialização: É verdadeiro antes da inicialização do laço.Manutenção: Permanece verdadeiro em cada iteração.Terminação: Quando o laço termina, IL implica corretude.Prof. Dr. Leandro Balby Marinho 26 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 10Considere o algoritmo BuscaLinear abaixo.BuscaLinear(A, k)// Input: Um array A[1 . . n] e uma chave de busca k.// Output: O indice do primeiro elemento em A que casa com k, ou 01 for i = 1 to A.length2 if A[i] == k3 return i4 return 0Prof. Dr. Leandro Balby Marinho 27 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 10Considere o algoritmo BuscaLinear abaixo.BuscaLinear(A, k)// Input: Um array A[1 . . n] e uma chave de busca k.// Output: O indice do primeiro elemento em A que casa com k, ou 01 for i = 1 to A.length2 if A[i] == k3 return i4 return 0Invariante do Laço: No começo de cada iteração i do laço forA[j] ≠ k para todo j < i.Prof. Dr. Leandro Balby Marinho 27 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 10 cont.◮ Inicialização: Antes da primeira iteração o IL é trivialmenteverdadeira já que não existe j < i.◮ Manutenção: O IL é mantido, pois caso contrário na i-ésimaiteração haverá um j < i tal que A[j] = k. Nesse o valor j seráretornado na j-ésima iteração e não haverá i-ésima iteração,uma contradição.◮ Terminação: Quando o laço termina, pode haver dois casos:1. termina depois de i ≤ A.length iterações e retorna i, o quegarante que A[i] = k pela condição if.2. i excede A.length, e portanto para todo j ≤ A.lengthA[j] ≠ k, retornando 0, que é correto.Prof. Dr. Leandro Balby Marinho 28 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 11Considere o algoritmo Insertion-Sort abaixo.Insertion-Sort(A)1 for j = 2 to A.length2 key = A[j]3 / Insere A[j] na sequencia ordenada A[1 . . j − 1].4 i = j − 15 while i > 0 and A[i] > key6 A[i + 1] = A[i]7 i = i − 18 A[i + 1] = keyProf. Dr. Leandro Balby Marinho 29 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 11 Cont.Invariante do laço?Prof. Dr. Leandro Balby Marinho 30 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 11 Cont.No começo de cada iteração do laço for, subarray A[1 . . j − 1] estásempre ordenado.Prof. Dr. Leandro Balby Marinho 31 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 11 Cont.No começo de cada iteração do laço for, subarray A[1 . . j − 1] estásempre ordenado.◮ Inicialização: Quando j = 2 o subarray contém apenas oelemento A[1] que é trivialmente ordenado.◮ Manutenção:◮ A cada iteração A[j] é colocado na posição correta.◮ Nenhum elemento de A[1 . . j] se move além de j.◮ Terminação: Seja n = A.length. Quando termina, j := n + 1e pelo IL A[1 . . n] está ordenado.Prof. Dr. Leandro Balby Marinho 31 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosInvariante do Laço vs. Indução◮ Pontos em comum:◮ inicialização vs. caso base.◮ manutenção vs. passo indutivo.◮ Diferença:◮ terminação vs. infinito.Prof. Dr. Leandro Balby Marinho 32 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 12Considere o seguinte algoritmo que calcula n 2 para n ∈ N.Square(n)1 x = 02 i = 03 while i < n4 x = x + n5 i = i + 1Invariante do laço?Prof. Dr. Leandro Balby Marinho 33 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 12 Cont.◮ Para j iterações, x = jn e i = j (invariante do laço).Prof. Dr. Leandro Balby Marinho 34 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 12 Cont.◮ Para j iterações, x = jn e i = j (invariante do laço).◮ Verdade para qualquer j ∈ N?Prof. Dr. Leandro Balby Marinho 34 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 12 Cont.◮ Para j iterações, x = jn e i = j (invariante do laço).◮ Verdade para qualquer j ∈ N?◮ Podemos provar que sim por indução.Prof. Dr. Leandro Balby Marinho 34 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 12 Cont.◮ Base: Quando j = 0, x = 0 · n = 0 e i = 0 é verdadeiro.Prof. Dr. Leandro Balby Marinho 35 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 12 Cont.◮ Base: Quando j = 0, x = 0 · n = 0 e i = 0 é verdadeiro.◮ Hip. Indutiva: Depois de k ∈ N iterações, x = kn e i = k.Prof. Dr. Leandro Balby Marinho 35 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 12 Cont.◮ Base: Quando j = 0, x = 0 · n = 0 e i = 0 é verdadeiro.◮ Hip. Indutiva: Depois de k ∈ N iterações, x = kn e i = k.◮ Mostrar que depois de k + 1 iterações, x = (k + 1)n e i = k + 1Prof. Dr. Leandro Balby Marinho 35 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 12 Cont.◮ Base: Quando j = 0, x = 0 · n = 0 e i = 0 é verdadeiro.◮ Hip. Indutiva: Depois de k ∈ N iterações, x = kn e i = k.◮ Mostrar que depois de k + 1 iterações, x = (k + 1)n e i = k + 1◮ Passo Indutivo: Quando o algoritmo executa o laço pela(k + 1)-ésima vez, temosx k+1 := x k + n = kn + n = (k + 1)ni k+1 := i k + 1 = k + 1Prof. Dr. Leandro Balby Marinho 35 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 12 Cont.◮ Terminação: Mostrar que quando o laço termina, x = n 2 ,Prof. Dr. Leandro Balby Marinho 36 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 12 Cont.◮ Terminação: Mostrar que quando o laço termina, x = n 2 ,◮ Depois de t iterações i = n e o algoritmo sai do laço.Prof. Dr. Leandro Balby Marinho 36 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 12 Cont.◮ Terminação: Mostrar que quando o laço termina, x = n 2 ,◮ Depois de t iterações i = n e o algoritmo sai do laço.◮ Como i t = t (pelo IL), concluímos que t = n.Prof. Dr. Leandro Balby Marinho 36 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 12 Cont.◮ Terminação: Mostrar que quando o laço termina, x = n 2 ,◮ Depois de t iterações i = n e o algoritmo sai do laço.◮ Como i t = t (pelo IL), concluímos que t = n.◮ Também pelo IL, temos quex t := tn= nn= n 2Prof. Dr. Leandro Balby Marinho 36 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 13Considere o algoritmo iterativo de Fibonacci abaixo.Fib(n)1 if n == 02 return 03 else a = 04 b = 15 i = 26 while i ≤ n7 c = a + b8 a = b9 b = c10 i = i + 111 return bProf. Dr. Leandro Balby Marinho 37 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 13 Cont.Fatos do algoritmo:◮ i 0 = 2; i j = i j−1 + 1◮ a 0 = 0; a j = b j−1◮ b 0 = 1; b j = c j◮ c j = a j−1 + b j−1Invariante do Laço?Prof. Dr. Leandro Balby Marinho 38 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 13 Cont.Invariante do Laço: Depois da iteração j,i = j + 2a = f (j)b = f (j + 1)onde f (k) denota o k-ésimo número de Fibonacci.Prof. Dr. Leandro Balby Marinho 39 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 13 Cont.◮ Base: Para j = 0, i = 0 + 2 = 2, a = f (0) = 0 eb = f (1) = 1.Prof. Dr. Leandro Balby Marinho 40 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 13 Cont.◮ Base: Para j = 0, i = 0 + 2 = 2, a = f (0) = 0 eb = f (1) = 1.◮ Hip. Indutiva: Depois da k-ésima iteração,i := k + 2a := f (k)b := f (k + 1)Prof. Dr. Leandro Balby Marinho 40 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 13 Cont.◮ Base: Para j = 0, i = 0 + 2 = 2, a = f (0) = 0 eb = f (1) = 1.◮ Hip. Indutiva: Depois da k-ésima iteração,i := k + 2a := f (k)b := f (k + 1)◮ Mostre que depois da iteração k + 1,i = k + 3a = f (k + 1)b = f (k + 2)Prof. Dr. Leandro Balby Marinho 40 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 13 Cont.i k+1 := i k + 1:= (k + 2) + 1 (pela hip. indutiva):= k + 3a k+1 := b k:= f (k + 1) (pela hip. indutiva)b k+1 := c k+1:= a k + b k:= f (k) + f (k + 1) (pela hip. indutiva):= f (k + 2)Prof. Dr. Leandro Balby Marinho 41 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 13 Cont.Terminação: Mostrar que o algoritmo termina com b = f (n)◮ Depois de t iterações i = n + 1 e o algoritmo sai do laço.Prof. Dr. Leandro Balby Marinho 42 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 13 Cont.Terminação: Mostrar que o algoritmo termina com b = f (n)◮ Depois de t iterações i = n + 1 e o algoritmo sai do laço.◮ Como i t = t + 2, temos que t = n − 1Prof. Dr. Leandro Balby Marinho 42 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExemplo 13 Cont.Terminação: Mostrar que o algoritmo termina com b = f (n)◮ Depois de t iterações i = n + 1 e o algoritmo sai do laço.◮ Como i t = t + 2, temos que t = n − 1◮ Pelo IL, b t := f (t + 1) := f (n).Prof. Dr. Leandro Balby Marinho 42 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExercício 6Considere o seguinte algoritmo recursivo para calcular a soma dosprimeiros n cubos: S(n) = 1 3 + 2 3 + . . . + n 3 .S(n)// Entrada: Um inteiro positivo n// Saida: A soma dos n primeiros cubos1 i = 22 s = 13 while i ≤ n4 s = s + i 35 i = i + 16 return sAche o invariante do laço e prove que é verdadeiro na inicialização,manutenção e terminação usando indução matemática.Prof. Dr. Leandro Balby Marinho 43 / 44 <strong>UFCG</strong> CEEI


Introdução Indução Algoritmos Recursivos Algoritmos IterativosExercício 7Mostre que o algoritmo abaixo é correto usando invariância do laçoMaximo(A, n)1 m = A[1]2 i = 23 while i ≤ n4 if A[i] > m5 m = A[i]6 i = i + 17 return mProf. Dr. Leandro Balby Marinho 44 / 44 <strong>UFCG</strong> CEEI

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!