Buscar

26 terminacao

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Projeto de Algoritmos com Recursão
Generativa
INF05008 - Fundamentos de algoritmos
Instituto de Informática
Universidade Federal do Rio Grande do Sul
Porto Alegre, Brasil
http://www.inf.ufrgs.br
2011/2
Projetando Algoritmos
I Análise e definição de dados:
I A escolha de representação dos dados para um problema afeta
a nossa forma de pensar sobre o processo
I Às vezes, a descrição de um processo sugere uma
representação específica para os dados
I Em outras situações, é possível, e até recomendável, explorar
alternativas
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 2/15
Projetando Algoritmos
I Contrato, propósito e cabeçalho:
I O passo generativo não tem conexão com a estrutura da
definição de dados
I Logo, além de dizer o quê a função faz, também devemos
explicar, em geral, como ela o faz
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 3/15
Érika
Realce
Érika
Realce
Projetando Algoritmos
I Exemplos:
I Antes, bastava relação entre entrada e saída nos exemplos
I Agora, devem ilustrar como a função trabalha com uma
entrada específica
I Para algumas funções, isso é fácil de se fazer (função que
movimenta bola, por exemplo)
I Para outras, o processo é baseado em uma idéia que não é
trivial (explicação baseada em um bom exemplo - como uma
figura para o quick sort)
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 4/15
Érika
Realce
Projetando Algoritmos
I Template:
(define (função-generativa-recursiva problema)
(cond
[(solução-trivial-existe? problema)
(determinar-solução problema)]
[else
(combinar-soluções
... reduzir problema e resolver subproblemas...
(função-generativa-recursiva
(gen-prob-1 problema))
...
(função-generativa-recursiva
(gen-prob-n problema)))]))
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 5/15
Projetando Algoritmos
I Definição: cada função que aparece no template tem o propósito de
nos lembrar que devemos considerar as seguintes questões:
1. O quê é um problema de solução trivial? Qual é a solução
correspondente?
2. Como dividimos um problema original em novos problemas, os
quais são resolvidos mais facilmente do que o problema original?
Quantos novos problemas devem ser gerados?
3. A solução do problema dado é a mesma solução para o(s) novo(s)
subproblema(s)? Ou temos de combinar as soluções para criar a
solução do problema original? E se for o caso, precisamos de algo
do problema original?
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 6/15
Projetando Algoritmos
I Definição: cada função que aparece no template tem o propósito de
nos lembrar que devemos considerar as seguintes questões:
1. O quê é um problema de solução trivial? Qual é a solução
correspondente?
2. Como dividimos um problema original em novos problemas, os
quais são resolvidos mais facilmente do que o problema original?
Quantos novos problemas devem ser gerados?
3. A solução do problema dado é a mesma solução para o(s) novo(s)
subproblema(s)? Ou temos de combinar as soluções para criar a
solução do problema original? E se for o caso, precisamos de algo
do problema original?
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 6/15
Projetando Algoritmos
I Definição: cada função que aparece no template tem o propósito de
nos lembrar que devemos considerar as seguintes questões:
1. O quê é um problema de solução trivial? Qual é a solução
correspondente?
2. Como dividimos um problema original em novos problemas, os
quais são resolvidos mais facilmente do que o problema original?
Quantos novos problemas devem ser gerados?
3. A solução do problema dado é a mesma solução para o(s) novo(s)
subproblema(s)? Ou temos de combinar as soluções para criar a
solução do problema original? E se for o caso, precisamos de algo
do problema original?
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 6/15
Projetando Algoritmos
I Definição: cada função que aparece no template tem o propósito de
nos lembrar que devemos considerar as seguintes questões:
1. O quê é um problema de solução trivial? Qual é a solução
correspondente?
2. Como dividimos um problema original em novos problemas, os
quais são resolvidos mais facilmente do que o problema original?
Quantos novos problemas devem ser gerados?
3. A solução do problema dado é a mesma solução para o(s) novo(s)
subproblema(s)? Ou temos de combinar as soluções para criar a
solução do problema original? E se for o caso, precisamos de algo
do problema original?
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 6/15
Projetando Algoritmos
I Definição: cada função que aparece no template tem o propósito de
nos lembrar que devemos considerar as seguintes questões:
1. O quê é um problema de solução trivial? Qual é a solução
correspondente?
2. Como dividimos um problema original em novos problemas, os
quais são resolvidos mais facilmente do que o problema original?
Quantos novos problemas devem ser gerados?
3. A solução do problema dado é a mesma solução para o(s) novo(s)
subproblema(s)? Ou temos de combinar as soluções para criar a
solução do problema original? E se for o caso, precisamos de algo
do problema original?
As respostas a essas perguntas são dadas em termos da
representação de dados escolhida!
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 6/15
Érika
Realce
Érika
Realce
Projetando Algoritmos
I Testes:
I Depois de termos uma definição completa, devemos testá-la
I Lembre-se de que testes geralmente não garantem que a
função funciona corretamente para todas as possíveis
entradas!
I Mas devemos selecionar testes que aumentem a confiança no
correto funcionamento do programa
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 7/15
Exercícios
1. Responda às questões anteriores para o problema de modelar
o movimento de uma bola sobre uma tela até que ela saia dos
limites
2. Responda às questões anteriores para o problema quick-sort
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 8/15
Terminação
I Em recursão estrutural, cada chamada recursiva opera com
uma parte do dado original (menor, portanto). Dessa forma,
em algum momento, a função consome um dado atômico
e pode parar
I Em recursão generativa, cada chamada recursiva opera com
um problema obtido a partir do problema original (que é
um novo dado)
I A análise de terminação deve ser mais cuidadosa!
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 9/15
Érika
Realce
Érika
Realce
Érika
Realce
Exemplo de Erro de Terminação
;; menores : lista-de-números número
;; -> lista-de-números
;; Cria lista com todos os elementos de ldn que
;; são menores ou iguais a n
(define (menores n ldn)
(cond
[(empty? ldn) empty]
[else
(cond
[(<= (first ldn) n)
(cons (first ldn)
(menores n (rest ldn)))]
[else (menores n (rest ldn))])]))
Pequeno erro na geração de problema pode levar a não-terminação:
por exemplo, <= no lugar de <
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 10/15
Exemplo de Erro de Terminação
;; menores : lista-de-números número
;; -> lista-de-números
;; Cria lista com todos os elementos de ldn que
;; são menores ou iguais a n
(define (menores n ldn)
(cond
[(empty? ldn) empty]
[else
(cond
[(<= (first ldn) n)
(cons (first ldn)
(menores n (rest ldn)))]
[else (menores n (rest ldn))])]))
Pequeno erro na geração de problema pode levar a não-terminação:
por exemplo, <= no lugar de <
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 10/15
Terminação
I Essa função produz (list 5) quando aplicada aos
parâmetros 5 e (list 5)
I Se quick-sort for chamada para resolver o problema (list
5), a execução de (menores 5 (list 5)) produzirá o
mesmo problema original, o qualé passado na recursão
generativa
I Dessa forma, quick-sort não produz resultado algum!
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 11/15
Terminação
(quick-sort (list 5))
= (append (quick-sort (menores 5 (list 5)))
(list 5)
(quick-sort (maiores 5 (list 5))))
= (append (quick-sort (list 5))
(list 5)
(quick-sort (maiores 5 (list 5))))
...
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 12/15
Terminação
I O projeto de algoritmos deste tipo precisa incluir mais um
passo: um argumento para terminação
I Ele explica por quê o processo sempre produz uma saída para
qualquer entrada e como a função implementa essa ideia
I Ou então avisa as situações nas quais a função não termina
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 13/15
Terminação
I Para quick-sort (com função auxiliar menores original), o
argumento pode ser o seguinte:
O caso base é quando a lista é vazia. A cada passo, o
quick-sort particiona a lista em duas sub-listas usando as
funções menores e maiores. Cada função auxiliar produz uma
lista que tem menos elementos do que o número de elementos
da entrada. Assim, cada chamada recursiva de quick-sort
consome uma lista estritamente menor que a lista dada, se
aproximando do caso base.
I Sem esse argumento, o algoritmo pode ser considerado
incompleto
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 14/15
Exercícios
1. Desenvolva a função mdc-e que, dados dois números positivos
maiores que zero, retorna o máximo divisor comum (MDC)
entre eles. Use recursão estrutural.
2. Desenvolva a função mdc-g que, dados dois números positivos
maiores que zero, retorna o MDC entre eles, usando recursão
generativa.
Um insight matemático para achar o MDC de dois números:
(MDC menor maior) = (MDC menor (remainder maior menor))
INF05008 Cap. 26 - Proj. de algoritmos com rec. generativa 15/15

Outros materiais