Análise e Técnicas de Algoritmos
Período 2003.1
Relação de Recorrência
- A análise de um algoritmo recursivo requer a resolução de
uma recorrência.
- Uma recorrência é um algoritmo recursivo que calcula o valor
de uma função em um ponto dado.
- Uma recorrência define T(n) em termos de T(n-1), T(n-2), etc.
Exemplo 1:
e
, para
etc.
Para valores pequenos de
, temos os seguintes valores de T(n):
|
1 |
2 |
3 |
4 |
5 |
6 |
|
1 |
9 |
20 |
34 |
51 |
71 |
Exemplo 2:
Considere a figura abaixo:
Quantos pedaços obtemos com
cortes na pizza?
É possível observar que o
-ésimo corte cria
novas fatias. Logo,
o número total de fatias obtido com
cortes, denotado por
, é
dado pela seguinte relação de recorrência:
Como proceder para derivar uma relação de recorrência para a análise
do tempo de execução de um algoritmo:
- Determinar qual o tamanho
do problema.
- Verificar que valor de
é usado como base da recursão.
Em geral é um valor único (
, por exemplo), mas pode
ser valores múltiplos. Vamos considerar esse valor como
.
- Determinar
. Pode-se usar uma constante
, mas, em
muitos, casos um número específico é necessário.
é definido como uma soma de várias ocorrências de
(chamadas recursivas), mais a soma de outras instruções
efetuadas. Em geral, as chamadas recursivas estão relacionadas
com
subproblemas do mesmo tamanho
, definindo um termo
na relação de recorrência.
Logo, a relação de recorrência é definida como:
Exemplo 1: O problema do corte das pizzas
No problema do corte das pizzas, a relação de recorrência
é
recursivamente definida:
(caso base)
-
, para
(caso recursivo)
Exemplo 2: Torres de Hanoi
Exemplo 3: MergeSort
- Objetivo: Ordenar uma lista
de
elementos.
- Algoritmo
- Relação de Recorrência:
- Resolver uma relação de recorrência nem sempre é fácil.
- Resolvendo uma relação de recorrência, determina-se o tempo
de execução do algoritmo recursivo correspondente.
- Relação de recorrência:
.
- Em geral, os
subproblemas têm o mesmo tamanho que é uma
fração de
, digamos
.
- A fórmula pode ser generalizada como:
- Por exemplo, no caso do mergesort,
e
.
- Como resolver uma relação de recorrência:
- Método do chute e prova por indução.
- Método da árvore de recursão.
- Método do desdobramento ou iterativo.
- Método master.
Exemplo 1:
Seja a seguinte relação de recorrência, apresentada anteriormente:
A relação de recorrência é resolvida em duas partes:
- Chute:
.
- Prova:
Como a fórmula está correta, prova-se que
.
Exemplo 2:
Seja a seguinte relação de recorrência:
A relação de recorrência é resolvida em duas partes:
- Chute:
.
- Prova:
- Caso base:
.
- Passo indutivo:
Como a fórmula está correta, prova-se que
.
- Talvez o método mais intuitivo.
- Consiste em desenhar uma árvore cujos nós representam os tamanhos
dos correspondentes problemas.
- Cada nível
contém todos os subproblemas de profundidade
.
- Dois aspectos importantes:
- A altura da árvore.
- O número de passos executados de cada nível.
- A solução da recorrência (tempo de execução do algoritmo) é a
soma de todos os passos de todos os níveis.
- No caso particular em que o total de passos de cada nível é o mesmo,
por exemplo, a solução é:
, onde
é a
altura da árvore.
Exemplo: Mergesort:
A altura da árvore é
. Logo,
.
Esse método é o da árvore de recursão, representado de forma algébrica.
Consiste em:
- Usar (algumas poucas) substituições repetidamente até encontrar um padrão.
- Escrever uma fórmmula em termos de
e o número de substituições
.
- Escolher
de tal forma que todas as referências a
sejam
referências ao caso base.
- Resolver a fórmula.
Exemplo 1: Solução da recorrência do problema da pizza.
Vamos considerar novamente o exemplo do corte das pizzas.
A relação de recorrência é resolvida fazendo repetidas substituições:
O caso base é alcançado quando
. Logo,
Logo
.
Exemplo 2: Solução da recorrência do problema da Torre
de Hanoi.
-
.
Solução por desdobramento:
O caso base é alcançado quando
. Logo,
Isso é uma soma geométrica. Logo,
Exemplo 3: Mergesort.
-
.
Solução por desdobramento:
O caso base é alcançado quando
. Logo,
Portanto,
- Teorema que resolve quase todas as recorrências.
é da forma
,
.
- Casos:
- se
, para algum
, temos que
.
- se
, temos que
.
- se
, para
algum
, e se
para algum
, e
suficientemente grande,
temos que
.
- A prova do teorema é complexa.
- Esse método é fácil de usar. Entretanto, muitos casos são casca de
banana e podemos cometer erros.
Exemplo: Mergesort:
-
.
. Logo caímos no segundo caso.
-
Exemplo:
-
.
. O segundo caso não pode ser aplicado.
-
, se
.
Logo caímos no caso 1.
-
Jorge C. A. de Figueiredo
2003-05-13