Análise e Técnicas de Algoritmos
Período 2003.1

Relação de Recorrência

Análise de Algoritmos Recursivos

Exemplo 1:

$T(1) = 1$ e

$T(n) = T(n-1) + 3n + 2$, para $n = 2, 3, 4,$ etc.

Para valores pequenos de $n$, temos os seguintes valores de T(n):


$n$ 1 2 3 4 5 6
$T(n)$ 1 9 20 34 51 71

Exemplo 2:

Considere a figura abaixo:

\begin{figure}\epsffile{pizza.eps}\end{figure}

Quantos pedaços obtemos com $N$ cortes na pizza?

É possível observar que o $N$-ésimo corte cria $N$ novas fatias. Logo, o número total de fatias obtido com $N$ cortes, denotado por $P(N)$, é dado pela seguinte relação de recorrência:

Derivando Relações 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:

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 $f(N)$ é recursivamente definida:

Exemplo 2: Torres de Hanoi

\begin{figure}\epsffile{hanoi.eps}\end{figure}

Exemplo 3: MergeSort

Resolvendo Relações de Recorrências

Método do Chute e Prova por Indução

Exemplo 1:

Seja a seguinte relação de recorrência, apresentada anteriormente:

A relação de recorrência é resolvida em duas partes:

  1. Chute: $T(n) = 3n^2/2 + 7n/2 - 4$.
  2. Prova:

Como a fórmula está correta, prova-se que $T(n) = O(n^2)$.

Exemplo 2:

Seja a seguinte relação de recorrência:

A relação de recorrência é resolvida em duas partes:

  1. Chute: $T(n) = n + nlogn$.
  2. Prova:

Como a fórmula está correta, prova-se que $T(n) = O(n.\mbox{log n})$.

Método da Árvore de Recursão

Exemplo: Mergesort: $T(n) = 2.T(n/2) + n$

\epsffile{recursiontree.eps}

A altura da árvore é $h = \mbox{log n}$. Logo, $O(n.\mbox{log n})$.

Método do Desdobramento

Esse método é o da árvore de recursão, representado de forma algébrica. Consiste em:

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:


\begin{algorithmic}
\STATE $f(n) = f(n - 1) + n$\STATE $f(n) = f(n - 2) + (n - 1...
...$...$\STATE $f(n) = f(n - i) + (n - i + 1) + ... + (n - 1) + n$\end{algorithmic}

O caso base é alcançado quando $i = n - 1$. Logo,


\begin{algorithmic}
\STATE $f(n) = 2 + 2 + 3 + ... + (n - 2) + (n - 1) + n$\STATE $f(n) = n.(n - 1)/2 + 1$\end{algorithmic}

Logo $f(n) = O(n^2)$.

Exemplo 2: Solução da recorrência do problema da Torre de Hanoi.

Solução por desdobramento:


\begin{algorithmic}
\STATE $T(n) = 2 (2.T(n - 2) + 1) + 1$\STATE \hspace{0.7 cm}...
...cm} $= 2^i.T(n - i) + 2^{i - 1} + 2i^{i - 2} + ... + 2^1 + 2^0$\end{algorithmic}

O caso base é alcançado quando $i = n - 1$. Logo,


\begin{algorithmic}
\STATE $T(n) = 2^{n - 1} + 2^{n - 2} + 2^{n - 3} + ... + 2^1 + 2^0$\end{algorithmic}

Isso é uma soma geométrica. Logo, $T(n) = 2^n - 1 = O(2^n)$

Exemplo 3: Mergesort.

Solução por desdobramento:


\begin{algorithmic}
\STATE $T(n) = 2.T(n/2) + d.n$\STATE \hspace{0.7 cm} $= 2.(2...
...d.n$\STATE $...$\STATE \hspace{0.7 cm} $= 2^i.T(n/2^i) + i.d.n$\end{algorithmic}

O caso base é alcançado quando $i = \mbox{log n}$. Logo,


\begin{algorithmic}
\STATE $T(n) = 2^{\mbox{log n}}.T(n/2^{\mbox{log n}}) + d.n.\mbox{log n}$\STATE \hspace{0.7 cm} $= d.n.\mbox{log n} + c.n$\end{algorithmic}

Portanto, $T(n) = O(n.\mbox{log n})$

Método Master

Exemplo: Mergesort: $T(n) = 2.T(n/2) + n$

Exemplo: $T(n) = 9.T(n/3) + n$



Jorge C. A. de Figueiredo 2003-05-13