Recorrências

Dividir e Conquistar

Para a disciplina de Matemática Finita por Ronan Soares

Motivação

$$\begin{align*} S(n) &= c S\left( \frac{n}{2} \right) + g(n)\\ S(1) &= 1 \end{align*}$$

A busca binária tem tempo de resolução dessa forma...

A ordenação tem tempo de resolução dessa forma...

Expandir Adivinhar Provar

Expandir os primeiros termos

Adivinhar a solução fechada

Provar que está certo

Exemplo

$$\begin{align*}T(1) &= 1\\T(n) &= T(n/2) + 1\end{align*}$$
$$\begin{align*} T(n) &= T(n/2) + 1\\ T(n) &= T(n/4) + 1 + 1\\ T(n) &= T(n/8) + 1 + 1 + 1 \end{align*}$$

Exemplo

$$\begin{align*}T(1) &= 0\\T(n) &= T(n/2) + 1\end{align*}$$

Parece que...

$$T(n) = T(n/2^i) + i$$

Exemplo

$$T(n) = T(n/2^i) + i$$

Queremos...

$$n/2^i = 1$$
$$n = 2^{\log_2 n}$$

Exemplo

$$T(n) = T(n/2^i) + i$$
$$T(n) = T(n/2^{\log_2 n}) + \log_2 n$$
$$T(n) = T(1) + \log_2 n$$
$$T(n) = \log_2 n$$

Exemplo

Agora tente provar por indução que isso está certo...

Outro Método

$$S(n) = c S\left( \frac{n}{2} \right) + g(n)$$

Assumindo que $n = 2^m$

$$S(2^m) = c S\left( 2^{m - 1} \right) + g(2^m)$$

Transformando em Linear...

Fazendo $T(m) = S(2^m)$...

$$S(2^m) = c S\left( 2^{m - 1} \right) + g(2^m)$$
$$T(m) = c T\left( m - 1 \right) + g(2^m)$$

Maravilha

$$T(m) = c T\left( m - 1 \right) + g(2^m)$$

É uma relação de recorrência linear de primeira órdem

Usando o que já sabemos

$$T(m) = c T\left( m - 1 \right) + g(2^m)$$
$$T(m) = c^{m - 1} T(1) + \sum_{i = 2}^m c^{m - 1} g(2^i)$$

Desfazendo a transformação

$$T(1) = c T(0) + g(2)$$
$$T(m) = c^{m - 1} T(1) + \sum_{i = 2}^m c^{m - 1} g(2^i)$$
$$T(m) = c^m T(0) + \sum_{i = 1}^m c^{m - 1} g(2^i)$$
$$S(2^m) = c^m S(2^0) + \sum_{i = 1}^m c^{m - 1} g(2^i)$$
$$S(n) = c^{\log_2 n} S(1) + \sum_{i = 1}^m c^{m - 1} g(2^i)$$

Resultado

$$S(n) = c S\left( \frac{n}{2} \right) + g(n)$$
$$S(n) = c^{\log_2 n} S(1) + \sum_{i = 1}^m c^{m - 1} g(2^i)$$

Fim