SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Técnicas de projeto de algoritmos: Indução
ACH2002 - Introdução à Ciência da Computação II
Delano M. Beder
Escola de Artes, Ciências e Humanidades (EACH)
Universidade de São Paulo
dbeder@usp.br
08/2008
Material baseado em slides dos professores Marcos Chaim, Cid de Souza e Cândida da Silva
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 1 / 1
Indução Matemática
Técnica matemática muito poderosa para provar asserções sobre
números naturais.
Seja T um teorema que desejamos provar. Suponha que T tenha
como parâmetro um número natural n.
Ao invés de provar diretamente que T é válido para todos os
valores de n, basta provar as duas condições a seguir:
1 T é válido para n = 1 (passo base)
2 Para todo n > 1, se T é válido para n - 1, então T é válido para n
(hipótese da indução ou passo indutivo).
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 2 / 1
Indução Matemática
Normalmente, provar a condição 1 é relativamente fácil.
Provar a condição 2 é mais fácil do que provar o teorema, pois
pode-se utilizar do fato de que T é válido para n - 1.
Por que a indução funciona? Por que as duas condições são
suficientes?
As condições 1 e 2 implicam que T é válido para n = 2.
Se válido T é válido para n = 2, então pela condição 2 implica que
T também é válido para 3, e assim por diante.
O princípio da indução é um axioma dos números naturais.
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 3 / 1
Indução Matemática
Exemplo 1
Considere a expressão de soma dos primeiros números naturais n,
isto é, S(n) = 1 + 2 + · · · + n.
Provar por indução que S(n) = n∗(n+1)
2 .
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 4 / 1
Indução Matemática
Exemplo 1
Considere a expressão de soma dos primeiros números naturais n,
isto é, S(n) = 1 + 2 + · · · + n.
Provar por indução que S(n) = n∗(n+1)
2 .
Prova:
Passo base: Para n = 1, S(1) = 1 (trivial).
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 4 / 1
Indução Matemática
Exemplo 1
Considere a expressão de soma dos primeiros números naturais n,
isto é, S(n) = 1 + 2 + · · · + n.
Provar por indução que S(n) = n∗(n+1)
2 .
Prova:
Passo base: Para n = 1, S(1) = 1 (trivial).
Passo indutivo:
Pelo princípio da indução matemática podemos assumir
S(n − 1) = (n−1)∗(n−1+1)
2 como válido.
Mas S(n) = S(n − 1) + n = (n−1)∗(n−1+1)
2 + n = n∗(n+1)
2 .
Assim, provamos o passo indutivo.
Logo, S(n) = n∗(n+1)
2 para todo n ≥ 1.
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 4 / 1
Indução Matemática
Exemplo 2
Prove por indução que 2n > 2n−1 + 2n−2 + 2n−3 + . . . + 20, n ≥ 1.
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 5 / 1
Indução Matemática
Exemplo 2
Prove por indução que 2n > 2n−1 + 2n−2 + 2n−3 + . . . + 20, n ≥ 1.
Prova:
Passo base: Para n = 1, 21 > 20 (trivial).
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 5 / 1
Indução Matemática
Exemplo 2
Prove por indução que 2n > 2n−1 + 2n−2 + 2n−3 + . . . + 20, n ≥ 1.
Prova:
Passo base: Para n = 1, 21 > 20 (trivial).
Passo indutivo: Pelo princípio da indução matemática
2n−1
> 2n−2
+ 2n−3
+ . . . + 20
é verdadeiro
Somando 2n−1 nos dois lados da inequação (lembrando que 2n−1 é
positivo e por isso não altera o sinal da inequação) obtemos:
2.2n−1
> 2n−1
+ 2n−2
+ 2n−3
+ . . . + 20
.
Portanto, 2n > 2n−1 + 2n−2 + 2n−3 + . . . + 20. O passo indutivo está
provado.
Logo, 2n > 2n−1 + 2n−2 + 2n−3 + . . . + 20 para todo n ≥ 1.
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 5 / 1
Variações
Variação 1
Caso base: n = 1
Provar que para ∀n ≥ 2, se a propriedade é válida para n, ela é
valida para n + 1.
Variação 2
Caso base: n = 1, 2 e 3
Provar que para ∀n ≥ 4, se a propriedade é válida para n, ela é
valida para n + 1.
Variação 3 (Indução forte)
Caso base: n = 1
Provar que para ∀n ≥ 2, se a propriedade é válida para
∀1 ≥ m ≥ n, ela é valida para n + 1.
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 6 / 1
Exercícios - Indução Matemática
1 Prove que 12 + 22 + 32 + · · · + n2 = 2n3+3n2+n
6 , ∀n ≥ 1
2 Prove que 1 + 3 + 5 + · · · + 2n − 1 = n2, ∀n ≥ 1
3 Prove que 13 + 23 + 33 + · · · + n3 = n4+2n3+n2
4 , ∀n ≥ 1
4 Prove que 13 + 33 + 53 + · · · + (2n − 1)3 = 2n4 − n2, ∀n ≥ 1
5 Prove que 1 + 2 + 22 + 23 + · · · + 2n = 2n+1 − 1, ∀n ≥ 0
6 Prove que 2n ≥ n2, ∀n ≥ 4.
7 Prove que 1
1 − 1
2 + 1
3 + · · · + 1
2n−1 − 1
2n = 1
n+1 + 1
n+2 + · · · + 1
2n
8 Prove a soma dos cubos de três numeros naturais positivos
sucessivos é divisível por 9.
9 Prove que todo número natural n > 1 pode ser escrito como o
produto de primos (indução forte).
10 Prove que todo número natural positivo pode ser escrito como a
soma de diferentes potências de 2 (indução forte).
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 7 / 1
Princípio da Recursão
Definições recursivas de métodos são baseadas no princípio
matemático da indução.
A ideia é que a solução de um problema pode ser apresentada da
seguinte forma:
Primeiramente, definimos a solução para os casos básicos;
Em seguida, definimos como resolver o problema para os demais
casos, porém, de uma forma mais simples.
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 8 / 1
Usando Indução em Programação
Problema: definir a multiplicação de dois números inteiros não
negativos m e n, em termos da operação de adição
Qual o caso base ?
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 9 / 1
Usando Indução em Programação
Problema: definir a multiplicação de dois números inteiros não
negativos m e n, em termos da operação de adição
Qual o caso base ?
Se n é igual a 0, então a multiplicação é 0.
Qual seria o passo indutivo
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 9 / 1
Usando Indução em Programação
Problema: definir a multiplicação de dois números inteiros não
negativos m e n, em termos da operação de adição
Qual o caso base ?
Se n é igual a 0, então a multiplicação é 0.
Qual seria o passo indutivo
Temos que expressar a solução para n > 0, supondo que já
sabemos a solução para algum caso mais simples.
m ∗ n = m + (m ∗ (n − 1)).
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 9 / 1
Usando Indução em Programação
Problema: definir a multiplicação de dois números inteiros não
negativos m e n, em termos da operação de adição
Qual o caso base ?
Se n é igual a 0, então a multiplicação é 0.
Qual seria o passo indutivo
Temos que expressar a solução para n > 0, supondo que já
sabemos a solução para algum caso mais simples.
m ∗ n = m + (m ∗ (n − 1)).
Portanto, a solução do problema pode ser expressa:
m ∗ 0 = 0
m ∗ n = m + (m ∗ (n − 1))
Como programar esta solução em Java?
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 9 / 1
Usando Indução em Programação
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) Indução - Parte I ACH2002 10 / 1
Utilizando Recursão
Comando/ Resultado Estado
Expressão (expressão) (após execução/avaliação)
multr (3,2) ... m —> 3
n —> 2
n == 0 false m —> 3
n —> 2
return m + multr (m,n-1) ... m —> 3 m —> 3
n —> 2 n —> 1
n == 0 false m —> 3 m —> 3
n —> 2 n —> 1
return m + multr (m,n-1) ... m —> 3 m —> 3 m —> 3
n —> 2 n —> 1 n —> 0
n == 0 true m —> 3 m —> 3 m —> 3
n —> 2 n —> 1 n —> 0
return 0 m —> 3 m —> 3
n —> 2 n —> 1
return m + 0 m —> 3
n —> 2
return m + 3
multr (3,2) 6
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 11 / 1
Recursão
Para solucionar o problema, é feita uma outra chamada para o
próprio método, por isso, este método é chamado recursivo.
Recursividade geralmente permite uma descrição mais clara e
concisa dos algoritmos, especialmente quando o problema é
recursivo por natureza.
Cada chamada do método multr cria novas variáveis de mesmo
nome m e n.
Portanto, várias variáveis m e n podem existir em um dado
momento.
Em um dado instante, o nome (m ou n) refere-se à variável local
ao corpo do método que está sendo executado.
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 12 / 1
Recursão
As execuções das chamadas de métodos são feitas em uma
estrutura de pilha.
Pilha: estrutura na qual a inserção (ou alocação) e a retirada (ou
liberação) de elementos é feita de maneira que o último elemento
inserido é o primeiro a ser retirado.
Assim, o último conjunto de variáveis alocadas na pilha
corresponde às variáveis e aos parâmetros do último método
chamado.
O espaço de variáveis e parâmetros alocado para um método é
chamado de registro de ativação desse método.
O registro de ativação é desalocado quando termina a execução
de um método.
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 13 / 1
Recursão
Variáveis que podem ser usadas no corpo de um método:
variáveis ou atributos de classe (static): criados uma única vez;
variáveis ou atributos de instância: criados quando é criado um
novo objeto (new);
parâmetros e variáveis locais: criados cada vez que é invocado o
método.
Na criação de uma variável local a um método, se não for
especificado um valor inicial, o valor armazenado será
indeterminado.
Indeterminado = valor existente nos bytes alocados para essa
variável na pilha de chamada dos métodos.
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 14 / 1
Iteração
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) Indução - Parte I ACH2002 15 / 1
Iteração
Comando/ Resultado Estado
Expressão (expressão) (após execução/avaliação)
multr (3,2) ... m —> 3, n —> 2
int r = 0 ... m —> 3, n —> 2, r —> 0
int i = 1 m —> 3, n —> 2, r —> 0, i —> 1
i <= n true m —> 3, n —> 2, r —> 0, i —> 1
r+=m 3 m —> 3, n —> 2, r —> 3, i —> 1
i++ 2 m —> 3, n —> 2, r —> 3, i —> 2
i <= n true m —> 3, n —> 2, r —> 3, i —> 2
r+=m 6 m —> 3, n —> 2, r —> 6, i —> 2
i++ 3 m —> 3, n —> 2, r —> 6, i —> 3
i <= n false m —> 3, n —> 2, r —> 6, i —> 3
for ... m —> 3, n —> 2, r —> 6
return r 6 m —> 3, n —> 2, r —> 6
mult(3,2) 6
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 16 / 1
Recursão x Iteração
Soluções recursivas são geralmente mais concisas que as
iterativas. Programas mais simples.
Soluções iterativas em geral têm a memória limitada enquanto as
recursivas, não.
Cópia dos parâmetros a cada chamada recursiva é um custo
adicional para as soluções recursivas.
Programas recursivos que possuem chamadas no final do código
são ditos terem recursividade de cauda. São facilmente
transformáveis em uma versão não recursiva.
Projetista de algoritmos deve levar consideração a complexidade
(temporal e espacial), bem como os outros custos (e.g., facilidade
de manutenção) para decidir por qual solução utilizar.
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 17 / 1
Exercícios
1 Forneça soluções recursivas para os problemas abaixo
cálculo do fatorial de um número.
cálculo do elemento n da série de Fibonacci.
f0 = 0, f1 = 1,
fn = fn−1 + fn−2 para n >= 2.
busca binária.
2 Como faço para calcular a complexidade (temporal ou espacial)
de um algoritmo recursivo?
3 Escreva um método 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])
4 Escreva um método recursivo maxmin que calcule o valor de um
elemento máximo e o valor de um elemento mínimo de um vetor
v[0..n − 1]. Quantas comparações envolvendo os elementos do
vetor a sua função faz? (Retirado de [1])
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 18 / 1
Exercícios
5 Escreva um método recursivo que calcule a soma dos elementos
positivos do vetor v[ini..fim − 1]. O problema faz sentido quando
ini é igual a fim? Quanto deve valer a soma nesse caso?
(Retirado de [1])
6 Escreva um método recursivo que calcule a soma dos dígitos de
um inteiro positivo n. A soma dos dígitos de 132, por exemplo, é
6. (Retirado de [1])
7 Escreva um método recursivo onde(). Ao receber um inteiro x,
um vetor v e um inteiro n, o método deve devolver j no intervalo
fechado 0 . . . n − 1 tal que v[j] == x. Se tal j não existe, o método
deve devolver -1. (Retirado de [1])
8 Escreva um método recursivo que recebe um inteiro x, um vetor v
e inteiros ini e fim e devolve j tal que ini ≤ j ≤ fim − 1 e v[j] == x.
Se tal j não existe então devolve ini-1. (Retirado de [1])
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 19 / 1
Referências
Referências utilizadas: [1] (Capítulo 5) e [2] (páginas 35-42).
[1] C. Camarão & L. Figueiredo. Programação de Computadores em
Java. Livros Técnicos e Científicos Editora, 2003.
[2] N. Ziviani. Projeto de Algoritmos com implementações em C e
Pascal. Editora Thomson, 2a. Edição, 2004.
Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 20 / 1

Mais conteúdo relacionado

Mais procurados

Função de duas variáveis, domínios e imagem
Função de duas variáveis, domínios e imagemFunção de duas variáveis, domínios e imagem
Função de duas variáveis, domínios e imagemIsadora Toledo
 
Casos notáveis [ matemática ]
Casos notáveis [ matemática ]Casos notáveis [ matemática ]
Casos notáveis [ matemática ]Alex Faria
 
Show do Milhão com Polinômios
Show do Milhão com PolinômiosShow do Milhão com Polinômios
Show do Milhão com PolinômiosLuiz Silva
 
Prova de matemática 2ª fase ufpe ufrpe-2009
Prova de matemática 2ª fase ufpe ufrpe-2009Prova de matemática 2ª fase ufpe ufrpe-2009
Prova de matemática 2ª fase ufpe ufrpe-2009mariainesmachado
 
Curvas de nível
Curvas de nívelCurvas de nível
Curvas de nívelfernando-tn
 
Edo
EdoEdo
Edowvnf
 
Multiplicação e divisão de inteiros
Multiplicação e divisão  de inteirosMultiplicação e divisão  de inteiros
Multiplicação e divisão de inteirosProfessora Andréia
 
Transformações de funções
Transformações de funçõesTransformações de funções
Transformações de funçõesbeatrizs1998
 
Aula 20: O átomo de hidrogênio
Aula 20: O átomo de hidrogênioAula 20: O átomo de hidrogênio
Aula 20: O átomo de hidrogênioAdriano Silva
 
34 nucleo e imagem de uma transformacao linear
34 nucleo e imagem de uma transformacao linear34 nucleo e imagem de uma transformacao linear
34 nucleo e imagem de uma transformacao linearAndressa Leite Rodrigues
 
5 membrana plasmática
5   membrana  plasmática5   membrana  plasmática
5 membrana plasmáticamargaridabt
 
Extração do ADN / DNA do kiwi - Relatório biologia 11º
Extração do ADN / DNA do kiwi - Relatório biologia 11ºExtração do ADN / DNA do kiwi - Relatório biologia 11º
Extração do ADN / DNA do kiwi - Relatório biologia 11ºFrancisco Palaio
 
Reações de Ácidos Carboxílicos e Derivados
Reações de Ácidos Carboxílicos e DerivadosReações de Ácidos Carboxílicos e Derivados
Reações de Ácidos Carboxílicos e DerivadosJosé Nunes da Silva Jr.
 
Simulado de Geometria Analítica Plana: Pontos
Simulado de Geometria Analítica Plana: PontosSimulado de Geometria Analítica Plana: Pontos
Simulado de Geometria Analítica Plana: Pontosanaflaviagreco
 

Mais procurados (20)

Função de duas variáveis, domínios e imagem
Função de duas variáveis, domínios e imagemFunção de duas variáveis, domínios e imagem
Função de duas variáveis, domínios e imagem
 
Casos notáveis [ matemática ]
Casos notáveis [ matemática ]Casos notáveis [ matemática ]
Casos notáveis [ matemática ]
 
Show do Milhão com Polinômios
Show do Milhão com PolinômiosShow do Milhão com Polinômios
Show do Milhão com Polinômios
 
Prova de matemática 2ª fase ufpe ufrpe-2009
Prova de matemática 2ª fase ufpe ufrpe-2009Prova de matemática 2ª fase ufpe ufrpe-2009
Prova de matemática 2ª fase ufpe ufrpe-2009
 
Curvas de nível
Curvas de nívelCurvas de nível
Curvas de nível
 
Exercicios resolvidos
Exercicios resolvidosExercicios resolvidos
Exercicios resolvidos
 
Edo
EdoEdo
Edo
 
Multiplicação e divisão de inteiros
Multiplicação e divisão  de inteirosMultiplicação e divisão  de inteiros
Multiplicação e divisão de inteiros
 
Transformações de funções
Transformações de funçõesTransformações de funções
Transformações de funções
 
Pequeno teorema de fermat
Pequeno teorema de fermatPequeno teorema de fermat
Pequeno teorema de fermat
 
Aula 20: O átomo de hidrogênio
Aula 20: O átomo de hidrogênioAula 20: O átomo de hidrogênio
Aula 20: O átomo de hidrogênio
 
34 nucleo e imagem de uma transformacao linear
34 nucleo e imagem de uma transformacao linear34 nucleo e imagem de uma transformacao linear
34 nucleo e imagem de uma transformacao linear
 
5 membrana plasmática
5   membrana  plasmática5   membrana  plasmática
5 membrana plasmática
 
Função algébrica
Função algébricaFunção algébrica
Função algébrica
 
Extração do ADN / DNA do kiwi - Relatório biologia 11º
Extração do ADN / DNA do kiwi - Relatório biologia 11ºExtração do ADN / DNA do kiwi - Relatório biologia 11º
Extração do ADN / DNA do kiwi - Relatório biologia 11º
 
Inequacoes1
Inequacoes1Inequacoes1
Inequacoes1
 
8 oxidacao reducao
8  oxidacao reducao8  oxidacao reducao
8 oxidacao reducao
 
Reações de Ácidos Carboxílicos e Derivados
Reações de Ácidos Carboxílicos e DerivadosReações de Ácidos Carboxílicos e Derivados
Reações de Ácidos Carboxílicos e Derivados
 
Simulado de Geometria Analítica Plana: Pontos
Simulado de Geometria Analítica Plana: PontosSimulado de Geometria Analítica Plana: Pontos
Simulado de Geometria Analítica Plana: Pontos
 
10ºano: A célula
10ºano: A célula10ºano: A célula
10ºano: A célula
 

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

Aula 9 inducao matematica ii
Aula 9   inducao matematica iiAula 9   inducao matematica ii
Aula 9 inducao matematica iiwab030
 
PARTE 2 - Progressao Aritmetica
PARTE 2 - Progressao AritmeticaPARTE 2 - Progressao Aritmetica
PARTE 2 - Progressao AritmeticaEstatisticas Ciepe
 
Relações de recorrência
Relações de recorrênciaRelações de recorrência
Relações de recorrênciaPablo Silva
 
Lista de exercícios 1
Lista de exercícios 1Lista de exercícios 1
Lista de exercícios 1Carlos Campani
 
Modelagem matematica aplicada a engenharia quimica
Modelagem matematica aplicada a engenharia quimicaModelagem matematica aplicada a engenharia quimica
Modelagem matematica aplicada a engenharia quimicaVinicius Chacon
 
Artigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdfArtigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdfItaloRainier1
 
19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracaoRicardo Bolanho
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasDelacyr Ferreira
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmosRicardo Bolanho
 
Apostila de potenciacao 001
Apostila de potenciacao  001Apostila de potenciacao  001
Apostila de potenciacao 001con_seguir
 
Sequencias e mf 2016
Sequencias e mf 2016Sequencias e mf 2016
Sequencias e mf 2016ProfessoraIve
 
Apostila matemática básica 2
Apostila matemática básica 2Apostila matemática básica 2
Apostila matemática básica 2waynemarques
 
Apostila de matemática; fatorial triangulo de pascal-binomio de newton
Apostila de matemática; fatorial triangulo de pascal-binomio de newtonApostila de matemática; fatorial triangulo de pascal-binomio de newton
Apostila de matemática; fatorial triangulo de pascal-binomio de newtonAndré Gustavo Santos
 
Prova Comentada de Estatística - TCU 2015
Prova Comentada de Estatística - TCU 2015Prova Comentada de Estatística - TCU 2015
Prova Comentada de Estatística - TCU 2015Estratégia Concursos
 
Coment obf nivel3_3fase
Coment obf nivel3_3faseComent obf nivel3_3fase
Coment obf nivel3_3faseThommas Kevin
 

Semelhante a Técnicas de projeto de algoritmos: Indução (20)

Função Exponencial
Função ExponencialFunção Exponencial
Função Exponencial
 
Aula 9 inducao matematica ii
Aula 9   inducao matematica iiAula 9   inducao matematica ii
Aula 9 inducao matematica ii
 
PARTE 2 - Progressao Aritmetica
PARTE 2 - Progressao AritmeticaPARTE 2 - Progressao Aritmetica
PARTE 2 - Progressao Aritmetica
 
Relações de recorrência
Relações de recorrênciaRelações de recorrência
Relações de recorrência
 
Lista de exercícios 1
Lista de exercícios 1Lista de exercícios 1
Lista de exercícios 1
 
Modelagem matematica aplicada a engenharia quimica
Modelagem matematica aplicada a engenharia quimicaModelagem matematica aplicada a engenharia quimica
Modelagem matematica aplicada a engenharia quimica
 
Artigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdfArtigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdf
 
19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracao
 
Aula 1 a 15 vol1
Aula 1 a 15 vol1Aula 1 a 15 vol1
Aula 1 a 15 vol1
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de Recorrências
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmos
 
Apostila de potenciacao 001
Apostila de potenciacao  001Apostila de potenciacao  001
Apostila de potenciacao 001
 
Sequencias e mf 2016
Sequencias e mf 2016Sequencias e mf 2016
Sequencias e mf 2016
 
mtmbasica.pdf
mtmbasica.pdfmtmbasica.pdf
mtmbasica.pdf
 
622 apostila01 mb
622 apostila01 mb622 apostila01 mb
622 apostila01 mb
 
Apostila matemática básica 2
Apostila matemática básica 2Apostila matemática básica 2
Apostila matemática básica 2
 
Apostila de matemática; fatorial triangulo de pascal-binomio de newton
Apostila de matemática; fatorial triangulo de pascal-binomio de newtonApostila de matemática; fatorial triangulo de pascal-binomio de newton
Apostila de matemática; fatorial triangulo de pascal-binomio de newton
 
Prova Comentada de Estatística - TCU 2015
Prova Comentada de Estatística - TCU 2015Prova Comentada de Estatística - TCU 2015
Prova Comentada de Estatística - TCU 2015
 
Tnotas
TnotasTnotas
Tnotas
 
Coment obf nivel3_3fase
Coment obf nivel3_3faseComent obf nivel3_3fase
Coment obf nivel3_3fase
 

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

  • 1. Técnicas de projeto de algoritmos: Indução ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 08/2008 Material baseado em slides dos professores Marcos Chaim, Cid de Souza e Cândida da Silva Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 1 / 1
  • 2. Indução Matemática Técnica matemática muito poderosa para provar asserções sobre números naturais. Seja T um teorema que desejamos provar. Suponha que T tenha como parâmetro um número natural n. Ao invés de provar diretamente que T é válido para todos os valores de n, basta provar as duas condições a seguir: 1 T é válido para n = 1 (passo base) 2 Para todo n > 1, se T é válido para n - 1, então T é válido para n (hipótese da indução ou passo indutivo). Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 2 / 1
  • 3. Indução Matemática Normalmente, provar a condição 1 é relativamente fácil. Provar a condição 2 é mais fácil do que provar o teorema, pois pode-se utilizar do fato de que T é válido para n - 1. Por que a indução funciona? Por que as duas condições são suficientes? As condições 1 e 2 implicam que T é válido para n = 2. Se válido T é válido para n = 2, então pela condição 2 implica que T também é válido para 3, e assim por diante. O princípio da indução é um axioma dos números naturais. Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 3 / 1
  • 4. Indução Matemática Exemplo 1 Considere a expressão de soma dos primeiros números naturais n, isto é, S(n) = 1 + 2 + · · · + n. Provar por indução que S(n) = n∗(n+1) 2 . Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 4 / 1
  • 5. Indução Matemática Exemplo 1 Considere a expressão de soma dos primeiros números naturais n, isto é, S(n) = 1 + 2 + · · · + n. Provar por indução que S(n) = n∗(n+1) 2 . Prova: Passo base: Para n = 1, S(1) = 1 (trivial). Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 4 / 1
  • 6. Indução Matemática Exemplo 1 Considere a expressão de soma dos primeiros números naturais n, isto é, S(n) = 1 + 2 + · · · + n. Provar por indução que S(n) = n∗(n+1) 2 . Prova: Passo base: Para n = 1, S(1) = 1 (trivial). Passo indutivo: Pelo princípio da indução matemática podemos assumir S(n − 1) = (n−1)∗(n−1+1) 2 como válido. Mas S(n) = S(n − 1) + n = (n−1)∗(n−1+1) 2 + n = n∗(n+1) 2 . Assim, provamos o passo indutivo. Logo, S(n) = n∗(n+1) 2 para todo n ≥ 1. Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 4 / 1
  • 7. Indução Matemática Exemplo 2 Prove por indução que 2n > 2n−1 + 2n−2 + 2n−3 + . . . + 20, n ≥ 1. Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 5 / 1
  • 8. Indução Matemática Exemplo 2 Prove por indução que 2n > 2n−1 + 2n−2 + 2n−3 + . . . + 20, n ≥ 1. Prova: Passo base: Para n = 1, 21 > 20 (trivial). Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 5 / 1
  • 9. Indução Matemática Exemplo 2 Prove por indução que 2n > 2n−1 + 2n−2 + 2n−3 + . . . + 20, n ≥ 1. Prova: Passo base: Para n = 1, 21 > 20 (trivial). Passo indutivo: Pelo princípio da indução matemática 2n−1 > 2n−2 + 2n−3 + . . . + 20 é verdadeiro Somando 2n−1 nos dois lados da inequação (lembrando que 2n−1 é positivo e por isso não altera o sinal da inequação) obtemos: 2.2n−1 > 2n−1 + 2n−2 + 2n−3 + . . . + 20 . Portanto, 2n > 2n−1 + 2n−2 + 2n−3 + . . . + 20. O passo indutivo está provado. Logo, 2n > 2n−1 + 2n−2 + 2n−3 + . . . + 20 para todo n ≥ 1. Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 5 / 1
  • 10. Variações Variação 1 Caso base: n = 1 Provar que para ∀n ≥ 2, se a propriedade é válida para n, ela é valida para n + 1. Variação 2 Caso base: n = 1, 2 e 3 Provar que para ∀n ≥ 4, se a propriedade é válida para n, ela é valida para n + 1. Variação 3 (Indução forte) Caso base: n = 1 Provar que para ∀n ≥ 2, se a propriedade é válida para ∀1 ≥ m ≥ n, ela é valida para n + 1. Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 6 / 1
  • 11. Exercícios - Indução Matemática 1 Prove que 12 + 22 + 32 + · · · + n2 = 2n3+3n2+n 6 , ∀n ≥ 1 2 Prove que 1 + 3 + 5 + · · · + 2n − 1 = n2, ∀n ≥ 1 3 Prove que 13 + 23 + 33 + · · · + n3 = n4+2n3+n2 4 , ∀n ≥ 1 4 Prove que 13 + 33 + 53 + · · · + (2n − 1)3 = 2n4 − n2, ∀n ≥ 1 5 Prove que 1 + 2 + 22 + 23 + · · · + 2n = 2n+1 − 1, ∀n ≥ 0 6 Prove que 2n ≥ n2, ∀n ≥ 4. 7 Prove que 1 1 − 1 2 + 1 3 + · · · + 1 2n−1 − 1 2n = 1 n+1 + 1 n+2 + · · · + 1 2n 8 Prove a soma dos cubos de três numeros naturais positivos sucessivos é divisível por 9. 9 Prove que todo número natural n > 1 pode ser escrito como o produto de primos (indução forte). 10 Prove que todo número natural positivo pode ser escrito como a soma de diferentes potências de 2 (indução forte). Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 7 / 1
  • 12. Princípio da Recursão Definições recursivas de métodos são baseadas no princípio matemático da indução. A ideia é que a solução de um problema pode ser apresentada da seguinte forma: Primeiramente, definimos a solução para os casos básicos; Em seguida, definimos como resolver o problema para os demais casos, porém, de uma forma mais simples. Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 8 / 1
  • 13. Usando Indução em Programação Problema: definir a multiplicação de dois números inteiros não negativos m e n, em termos da operação de adição Qual o caso base ? Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 9 / 1
  • 14. Usando Indução em Programação Problema: definir a multiplicação de dois números inteiros não negativos m e n, em termos da operação de adição Qual o caso base ? Se n é igual a 0, então a multiplicação é 0. Qual seria o passo indutivo Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 9 / 1
  • 15. Usando Indução em Programação Problema: definir a multiplicação de dois números inteiros não negativos m e n, em termos da operação de adição Qual o caso base ? Se n é igual a 0, então a multiplicação é 0. Qual seria o passo indutivo Temos que expressar a solução para n > 0, supondo que já sabemos a solução para algum caso mais simples. m ∗ n = m + (m ∗ (n − 1)). Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 9 / 1
  • 16. Usando Indução em Programação Problema: definir a multiplicação de dois números inteiros não negativos m e n, em termos da operação de adição Qual o caso base ? Se n é igual a 0, então a multiplicação é 0. Qual seria o passo indutivo Temos que expressar a solução para n > 0, supondo que já sabemos a solução para algum caso mais simples. m ∗ n = m + (m ∗ (n − 1)). Portanto, a solução do problema pode ser expressa: m ∗ 0 = 0 m ∗ n = m + (m ∗ (n − 1)) Como programar esta solução em Java? Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 9 / 1
  • 17. Usando Indução em Programação 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) Indução - Parte I ACH2002 10 / 1
  • 18. Utilizando Recursão Comando/ Resultado Estado Expressão (expressão) (após execução/avaliação) multr (3,2) ... m —> 3 n —> 2 n == 0 false m —> 3 n —> 2 return m + multr (m,n-1) ... m —> 3 m —> 3 n —> 2 n —> 1 n == 0 false m —> 3 m —> 3 n —> 2 n —> 1 return m + multr (m,n-1) ... m —> 3 m —> 3 m —> 3 n —> 2 n —> 1 n —> 0 n == 0 true m —> 3 m —> 3 m —> 3 n —> 2 n —> 1 n —> 0 return 0 m —> 3 m —> 3 n —> 2 n —> 1 return m + 0 m —> 3 n —> 2 return m + 3 multr (3,2) 6 Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 11 / 1
  • 19. Recursão Para solucionar o problema, é feita uma outra chamada para o próprio método, por isso, este método é chamado recursivo. Recursividade geralmente permite uma descrição mais clara e concisa dos algoritmos, especialmente quando o problema é recursivo por natureza. Cada chamada do método multr cria novas variáveis de mesmo nome m e n. Portanto, várias variáveis m e n podem existir em um dado momento. Em um dado instante, o nome (m ou n) refere-se à variável local ao corpo do método que está sendo executado. Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 12 / 1
  • 20. Recursão As execuções das chamadas de métodos são feitas em uma estrutura de pilha. Pilha: estrutura na qual a inserção (ou alocação) e a retirada (ou liberação) de elementos é feita de maneira que o último elemento inserido é o primeiro a ser retirado. Assim, o último conjunto de variáveis alocadas na pilha corresponde às variáveis e aos parâmetros do último método chamado. O espaço de variáveis e parâmetros alocado para um método é chamado de registro de ativação desse método. O registro de ativação é desalocado quando termina a execução de um método. Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 13 / 1
  • 21. Recursão Variáveis que podem ser usadas no corpo de um método: variáveis ou atributos de classe (static): criados uma única vez; variáveis ou atributos de instância: criados quando é criado um novo objeto (new); parâmetros e variáveis locais: criados cada vez que é invocado o método. Na criação de uma variável local a um método, se não for especificado um valor inicial, o valor armazenado será indeterminado. Indeterminado = valor existente nos bytes alocados para essa variável na pilha de chamada dos métodos. Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 14 / 1
  • 22. Iteração 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) Indução - Parte I ACH2002 15 / 1
  • 23. Iteração Comando/ Resultado Estado Expressão (expressão) (após execução/avaliação) multr (3,2) ... m —> 3, n —> 2 int r = 0 ... m —> 3, n —> 2, r —> 0 int i = 1 m —> 3, n —> 2, r —> 0, i —> 1 i <= n true m —> 3, n —> 2, r —> 0, i —> 1 r+=m 3 m —> 3, n —> 2, r —> 3, i —> 1 i++ 2 m —> 3, n —> 2, r —> 3, i —> 2 i <= n true m —> 3, n —> 2, r —> 3, i —> 2 r+=m 6 m —> 3, n —> 2, r —> 6, i —> 2 i++ 3 m —> 3, n —> 2, r —> 6, i —> 3 i <= n false m —> 3, n —> 2, r —> 6, i —> 3 for ... m —> 3, n —> 2, r —> 6 return r 6 m —> 3, n —> 2, r —> 6 mult(3,2) 6 Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 16 / 1
  • 24. Recursão x Iteração Soluções recursivas são geralmente mais concisas que as iterativas. Programas mais simples. Soluções iterativas em geral têm a memória limitada enquanto as recursivas, não. Cópia dos parâmetros a cada chamada recursiva é um custo adicional para as soluções recursivas. Programas recursivos que possuem chamadas no final do código são ditos terem recursividade de cauda. São facilmente transformáveis em uma versão não recursiva. Projetista de algoritmos deve levar consideração a complexidade (temporal e espacial), bem como os outros custos (e.g., facilidade de manutenção) para decidir por qual solução utilizar. Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 17 / 1
  • 25. Exercícios 1 Forneça soluções recursivas para os problemas abaixo cálculo do fatorial de um número. cálculo do elemento n da série de Fibonacci. f0 = 0, f1 = 1, fn = fn−1 + fn−2 para n >= 2. busca binária. 2 Como faço para calcular a complexidade (temporal ou espacial) de um algoritmo recursivo? 3 Escreva um método 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]) 4 Escreva um método recursivo maxmin que calcule o valor de um elemento máximo e o valor de um elemento mínimo de um vetor v[0..n − 1]. Quantas comparações envolvendo os elementos do vetor a sua função faz? (Retirado de [1]) Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 18 / 1
  • 26. Exercícios 5 Escreva um método recursivo que calcule a soma dos elementos positivos do vetor v[ini..fim − 1]. O problema faz sentido quando ini é igual a fim? Quanto deve valer a soma nesse caso? (Retirado de [1]) 6 Escreva um método recursivo que calcule a soma dos dígitos de um inteiro positivo n. A soma dos dígitos de 132, por exemplo, é 6. (Retirado de [1]) 7 Escreva um método recursivo onde(). Ao receber um inteiro x, um vetor v e um inteiro n, o método deve devolver j no intervalo fechado 0 . . . n − 1 tal que v[j] == x. Se tal j não existe, o método deve devolver -1. (Retirado de [1]) 8 Escreva um método recursivo que recebe um inteiro x, um vetor v e inteiros ini e fim e devolve j tal que ini ≤ j ≤ fim − 1 e v[j] == x. Se tal j não existe então devolve ini-1. (Retirado de [1]) Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 19 / 1
  • 27. Referências Referências utilizadas: [1] (Capítulo 5) e [2] (páginas 35-42). [1] C. Camarão & L. Figueiredo. Programação de Computadores em Java. Livros Técnicos e Científicos Editora, 2003. [2] N. Ziviani. Projeto de Algoritmos com implementações em C e Pascal. Editora Thomson, 2a. Edição, 2004. Delano M. Beder (EACH - USP) Indução - Parte I ACH2002 20 / 1