Anda di halaman 1dari 27

Tcnicas de projeto de algoritmos: Induo

ACH2002 - Introduo Cincia da Computao II

Delano M. Beder
Escola de Artes, Cincias e Humanidades (EACH) Universidade de So Paulo dbeder@usp.br

08/2008

Material baseado em slides dos professores Marcos Chaim, Cid de Souza e Cndida da Silva

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

1/1

Induo Matemtica

Tcnica matemtica muito poderosa para provar asseres sobre nmeros naturais. Seja T um teorema que desejamos provar. Suponha que T tenha como parmetro um nmero natural n. Ao invs de provar diretamente que T vlido para todos os valores de n, basta provar as duas condies a seguir:
1

T vlido para n = 1 (passo base) Para todo n > 1, se T vlido para n - 1, ento T vlido para n (hiptese da induo ou passo indutivo).

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

2/1

Induo Matemtica
Normalmente, provar a condio 1 relativamente fcil. Provar a condio 2 mais fcil do que provar o teorema, pois pode-se utilizar do fato de que T vlido para n - 1. Por que a induo funciona? Por que as duas condies so sucientes?
As condies 1 e 2 implicam que T vlido para n = 2. Se vlido T vlido para n = 2, ento pela condio 2 implica que T tambm vlido para 3, e assim por diante.

O princpio da induo um axioma dos nmeros naturais.

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

3/1

Induo Matemtica
Exemplo 1 Considere a expresso de soma dos primeiros nmeros naturais n, isto , S(n) = 1 + 2 + + n. Provar por induo que S(n) = n(n+1) . 2

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

4/1

Induo Matemtica
Exemplo 1 Considere a expresso de soma dos primeiros nmeros naturais n, isto , S(n) = 1 + 2 + + n. Provar por induo que S(n) = n(n+1) . 2 Prova: Passo base: Para n = 1, S(1) = 1 (trivial).

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

4/1

Induo Matemtica
Exemplo 1 Considere a expresso de soma dos primeiros nmeros naturais n, isto , S(n) = 1 + 2 + + n. Provar por induo que S(n) = n(n+1) . 2 Prova: Passo base: Para n = 1, S(1) = 1 (trivial). Passo indutivo: Pelo princpio da induo matemtica podemos assumir S(n 1) = (n1)(n1+1) como vlido. 2 Mas S(n) = S(n 1) + n = (n1)(n1+1) + n = n(n+1) . 2 2 Assim, provamos o passo indutivo. Logo, S(n) = n(n+1) para todo n 1. 2

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

4/1

Induo Matemtica
Exemplo 2 Prove por induo que 2n > 2n1 + 2n2 + 2n3 + . . . + 20 , n 1.

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

5/1

Induo Matemtica
Exemplo 2 Prove por induo que 2n > 2n1 + 2n2 + 2n3 + . . . + 20 , n 1. Prova: Passo base: Para n = 1, 21 > 20 (trivial).

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

5/1

Induo Matemtica
Exemplo 2 Prove por induo que 2n > 2n1 + 2n2 + 2n3 + . . . + 20 , n 1. Prova: Passo base: Para n = 1, 21 > 20 (trivial). Passo indutivo: Pelo princpio da induo matemtica
2n1 > 2n2 + 2n3 + . . . + 20 verdadeiro

Somando 2n1 nos dois lados da inequao (lembrando que 2n1 positivo e por isso no altera o sinal da inequao) obtemos:
2.2n1 > 2n1 + 2n2 + 2n3 + . . . + 20 .

Portanto, 2n > 2n1 + 2n2 + 2n3 + . . . + 20 . O passo indutivo est provado. Logo, 2n > 2n1 + 2n2 + 2n3 + . . . + 20 para todo n 1.
Delano M. Beder (EACH - USP) Induo - Parte I ACH2002 5/1

Variaes
Variao 1
Caso base: n = 1 Provar que para n 2, se a propriedade vlida para n, ela valida para n + 1.

Variao 2
Caso base: n = 1, 2 e 3 Provar que para n 4, se a propriedade vlida para n, ela valida para n + 1.

Variao 3 (Induo forte)


Caso base: n = 1 Provar que para n 2, se a propriedade vlida para 1 m n, ela valida para n + 1.
Delano M. Beder (EACH - USP) Induo - Parte I ACH2002 6/1

Exerccios - Induo Matemtica


1 2 3 4 5 6 7 8

Prove que 12 + 22 + 32 + + n2 = Prove que 1 + 3 + 5 + + 2n 1 Prove que 13 + 33 + 53 + + (2n Prove que 13 + 23 + 33 + + n3 =

2n3 +3n2 +n , n 6 = n2 , n 1

1 1 n2 , n 1

n4 +2n3 +n2 , n 4 3 = 2n4 1)

Prove que 1 + 2 + 22 + 23 + + 2n = 2n+1 1, n 0 Prove que 2n n2 , n 4. Prove que


1 1

1 2

1 3

+ +

1 2n1

1 2n

1 n+1

1 n+2

+ +

1 2n

Prove a soma dos cubos de trs numeros naturais positivos sucessivos divisvel por 9. Prove que todo nmero natural n > 1 pode ser escrito como o produto de primos (induo forte). Prove que todo nmero natural positivo pode ser escrito como a soma de diferentes potncias de 2 (induo forte).
Induo - Parte I ACH2002 7/1

10

Delano M. Beder (EACH - USP)

Princpio da Recurso
Denies recursivas de mtodos so baseadas no princpio matemtico da induo. A ideia que a soluo de um problema pode ser apresentada da seguinte forma:
Primeiramente, denimos a soluo para os casos bsicos; Em seguida, denimos como resolver o problema para os demais casos, porm, de uma forma mais simples.

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

8/1

Usando Induo em Programao


Problema: denir a multiplicao de dois nmeros inteiros no negativos m e n, em termos da operao de adio Qual o caso base ?

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

9/1

Usando Induo em Programao


Problema: denir a multiplicao de dois nmeros inteiros no negativos m e n, em termos da operao de adio Qual o caso base ?
Se n igual a 0, ento a multiplicao 0.

Qual seria o passo indutivo

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

9/1

Usando Induo em Programao


Problema: denir a multiplicao de dois nmeros inteiros no negativos m e n, em termos da operao de adio Qual o caso base ?
Se n igual a 0, ento a multiplicao 0.

Qual seria o passo indutivo


Temos que expressar a soluo para n > 0, supondo que j sabemos a soluo para algum caso mais simples. m n = m + (m (n 1)).

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

9/1

Usando Induo em Programao


Problema: denir a multiplicao de dois nmeros inteiros no negativos m e n, em termos da operao de adio Qual o caso base ?
Se n igual a 0, ento a multiplicao 0.

Qual seria o passo indutivo


Temos que expressar a soluo para n > 0, supondo que j sabemos a soluo para algum caso mais simples. m n = m + (m (n 1)).

Portanto, a soluo do problema pode ser expressa:


m0=0 m n = m + (m (n 1))

Como programar esta soluo em Java?


Delano M. Beder (EACH - USP) Induo - Parte I ACH2002 9/1

Usando Induo em Programao

class Aritr { static int multr (int m, int n) { if(n == 0) { return 0; } else { return (m + multr(m, n-1)); } } }

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

10 / 1

Utilizando Recurso
Comando/ Expresso multr (3,2) ... n == 0 return m + multr (m,n-1) n == 0 return m + multr (m,n-1) n == 0 return 0 return m + 0 return m + 3 multr (3,2) 6 false ... false ... true Resultado (expresso) Estado (aps execuo/avaliao) m > 3 n > 2 m > 3 n > 2 m > 3 n > 2 m > 3 n > 2 m > 3 n > 2 m > 3 n > 2 m > 3 n > 2 m > 3 n > 2 m > 3 n > 1 m > 3 n > 1 m > 3 n > 1 m > 3 n > 1 m > 3 n > 1 m > 3 n > 0 m > 3 n > 0

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

11 / 1

Recurso
Para solucionar o problema, feita uma outra chamada para o prprio mtodo, por isso, este mtodo chamado recursivo. Recursividade geralmente permite uma descrio mais clara e concisa dos algoritmos, especialmente quando o problema recursivo por natureza. Cada chamada do mtodo multr cria novas variveis de mesmo nome m e n. Portanto, vrias variveis m e n podem existir em um dado momento. Em um dado instante, o nome (m ou n) refere-se varivel local ao corpo do mtodo que est sendo executado.
Delano M. Beder (EACH - USP) Induo - Parte I ACH2002 12 / 1

Recurso
As execues das chamadas de mtodos so feitas em uma estrutura de pilha. Pilha: estrutura na qual a insero (ou alocao) e a retirada (ou liberao) de elementos feita de maneira que o ltimo elemento inserido o primeiro a ser retirado. Assim, o ltimo conjunto de variveis alocadas na pilha corresponde s variveis e aos parmetros do ltimo mtodo chamado. O espao de variveis e parmetros alocado para um mtodo chamado de registro de ativao desse mtodo. O registro de ativao desalocado quando termina a execuo de um mtodo.
Delano M. Beder (EACH - USP) Induo - Parte I ACH2002 13 / 1

Recurso
Variveis que podem ser usadas no corpo de um mtodo:
variveis ou atributos de classe (static): criados uma nica vez; variveis ou atributos de instncia: criados quando criado um novo objeto (new); parmetros e variveis locais: criados cada vez que invocado o mtodo.

Na criao de uma varivel local a um mtodo, se no for especicado um valor inicial, o valor armazenado ser indeterminado.
Indeterminado = valor existente nos bytes alocados para essa varivel na pilha de chamada dos mtodos.

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

14 / 1

Iterao

class Aritr { static int multr (int m, int n) { int r = 0; for (int i = 1; i <= n; i++) { r += m; } return r; } }

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

15 / 1

Iterao
Comando/ Expresso multr (3,2) int r = 0 int i = 1 i <= n r+=m i++ i <= n r+=m i++ i <= n for ... return r mult(3,2) Resultado (expresso) ... ... true 3 2 true 6 3 false 6 6 Estado (aps execuo/avaliao) m > 3, n > 2 m > 3, n > 2, r > 0 m > 3, n > 2, r > 0, i > 1 m > 3, n > 2, r > 0, i > 1 m > 3, n > 2, r > 3, i > 1 m > 3, n > 2, r > 3, i > 2 m > 3, n > 2, r > 3, i > 2 m > 3, n > 2, r > 6, i > 2 m > 3, n > 2, r > 6, i > 3 m > 3, n > 2, r > 6, i > 3 m > 3, n > 2, r > 6 m > 3, n > 2, r > 6

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

16 / 1

Recurso x Iterao
Solues recursivas so geralmente mais concisas que as iterativas. Programas mais simples. Solues iterativas em geral tm a memria limitada enquanto as recursivas, no. Cpia dos parmetros a cada chamada recursiva um custo adicional para as solues recursivas. Programas recursivos que possuem chamadas no nal do cdigo so ditos terem recursividade de cauda. So facilmente transformveis em uma verso no recursiva. Projetista de algoritmos deve levar considerao a complexidade (temporal e espacial), bem como os outros custos (e.g., facilidade de manuteno) para decidir por qual soluo utilizar.
Delano M. Beder (EACH - USP) Induo - Parte I ACH2002 17 / 1

Exerccios
1

Fornea solues recursivas para os problemas abaixo


clculo do fatorial de um nmero. clculo do elemento n da srie de Fibonacci.
f0 = 0, f1 = 1, fn = fn1 + fn2 para n >= 2.

busca binria.
2

Como fao para calcular a complexidade (temporal ou espacial) de um algoritmo recursivo? Escreva um mtodo recursivo que calcule a soma dos elementos positivos do vetor de inteiros v [0..n 1]. O problema faz sentido quando n igual a 0? Quanto deve valer a soma nesse caso? (Retirado de [1]) Escreva um mtodo recursivo maxmin que calcule o valor de um elemento mximo e o valor de um elemento mnimo de um vetor v [0..n 1]. Quantas comparaes envolvendo os elementos do vetor a sua funo faz? (Retirado de [1])
Induo - Parte I ACH2002 18 / 1

Delano M. Beder (EACH - USP)

Exerccios
5

Escreva um mtodo recursivo que calcule a soma dos elementos positivos do vetor v [ini..m 1]. O problema faz sentido quando ini igual a m? Quanto deve valer a soma nesse caso? (Retirado de [1]) Escreva um mtodo recursivo que calcule a soma dos dgitos de um inteiro positivo n. A soma dos dgitos de 132, por exemplo, 6. (Retirado de [1]) Escreva um mtodo recursivo onde(). Ao receber um inteiro x, um vetor v e um inteiro n, o mtodo deve devolver j no intervalo fechado 0 . . . n 1 tal que v [j] == x. Se tal j no existe, o mtodo deve devolver -1. (Retirado de [1]) Escreva um mtodo recursivo que recebe um inteiro x, um vetor v e inteiros ini e m e devolve j tal que ini j m 1 e v [j] == x. Se tal j no existe ento devolve ini-1. (Retirado de [1])
Induo - Parte I ACH2002 19 / 1

Delano M. Beder (EACH - USP)

Referncias

Referncias utilizadas: [1] (Captulo 5) e [2] (pginas 35-42). [1] C. Camaro & L. Figueiredo. Programao de Computadores em Java. Livros Tcnicos e Cientcos Editora, 2003. [2] N. Ziviani. Projeto de Algoritmos com implementaes em C e Pascal. Editora Thomson, 2a. Edio, 2004.

Delano M. Beder (EACH - USP)

Induo - Parte I

ACH2002

20 / 1

Anda mungkin juga menyukai