Escolar Documentos
Profissional Documentos
Cultura Documentos
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 1 / 106
Antes de mais nada. . .
Uma versão anterior deste conjunto de slides foi preparada por Cid
Carvalho de Souza e Cândida Nunes da Silva para uma instância
anterior desta disciplina.
O que vocês tem em mãos é uma versão modificada preparada para
atender a meus gostos.
Nunca é demais enfatizar que o material é apenas um guia e não deve
ser usado como única fonte de estudo. Para isso consultem a
bibliografia (em especial o CLR ou CLRS).
Orlando Lee
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 2 / 106
Agradecimentos (Cid e Cândida)
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 3 / 106
Recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 47 / 106
Resolução de Recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 48 / 106
Resolução de Recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 48 / 106
Resolução de Recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 48 / 106
Mergesort
MergeSort(A, p, r )
1 se p < r
2 então q ← ⌊(p + r )/2⌋
3 MergeSort(A, p, q)
4 MergeSort(A, q + 1, r )
5 Intercala(A, p, q, r )
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 49 / 106
Mergesort
MergeSort(A, p, r )
1 se p < r
2 então q ← ⌊(p + r )/2⌋
3 MergeSort(A, p, q)
4 MergeSort(A, q + 1, r )
5 Intercala(A, p, q, r )
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 49 / 106
Mergesort
MergeSort(A, p, r )
1 se p < r
2 então q ← ⌊(p + r )/2⌋
3 MergeSort(A, p, q)
4 MergeSort(A, q + 1, r )
5 Intercala(A, p, q, r )
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 49 / 106
Complexidade do Mergesort
MergeSort(A, p, r )
1 se p < r
2 então q ← ⌊(p + r )/2⌋
3 MergeSort(A, p, q)
4 MergeSort(A, q + 1, r )
5 Intercala(A, p, q, r )
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 50 / 106
Complexidade do Mergesort
MergeSort(A, p, r )
1 se p < r
2 então q ← ⌊(p + r )/2⌋
3 MergeSort(A, p, q)
4 MergeSort(A, q + 1, r )
5 Intercala(A, p, q, r )
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 50 / 106
Resolução de recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 51 / 106
Resolução de recorrências
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + an + b para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 51 / 106
Resolução de recorrências
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + an + b para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 51 / 106
Resolução de recorrências
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + an + b para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 51 / 106
Resolução de recorrências
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + an + b para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 51 / 106
Resolução de recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 52 / 106
Resolução de recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 52 / 106
Algumas relações
Antes de vermos as técnicas, vamos relembrar alguns fatos que são úteis
quando lidamos com chão, teto e logaritmos:
⌈ n2 ⌉ + ⌊ n2 ⌋ = n para todo inteiro n ≥ 0,
⌊x⌋ ≤ x para todo número real x,
j k ¥ ¦
⌊x/a⌋ x
b = ab para quaisquer número real x ≥ 0 e inteiros a, b > 0,
l m § ¨
⌈x/a⌉ x
b = ab para quaisquer número real x ≥ 0 e inteiros a, b > 0,
⌈ n2 ⌉ ≤ n
2 + 1 (ou ⌈ n2 ⌉ ≤ n),
log(xy ) = log x + log y (qualquer base),
log( yx ) = log x − log y (qualquer base),
lg(⌊ n2 ⌋) ≤ lg n − 1 e
alogb n = nlogb a .
loga n
Observação: logb n = loga b . Isto implica que logb n ∈ Θ(loga n) para
quaisquer a, b > 0.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 53 / 106
Método da substituição
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 54 / 106
Método da substituição
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 54 / 106
Método da substituição
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 54 / 106
Método da substituição
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 54 / 106
Exemplo
Considere a recorrência:
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + n para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 55 / 106
Exemplo
Considere a recorrência:
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + n para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 55 / 106
Exemplo
Considere a recorrência:
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + n para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 55 / 106
Exemplo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 56 / 106
Exemplo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 57 / 106
Exemplo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 57 / 106
Exemplo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 57 / 106
Exemplo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 57 / 106
Exemplo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 57 / 106
Exemplo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 58 / 106
Exemplo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 58 / 106
Exemplo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 58 / 106
Exemplo
T (2) = 18 ≤ 10.2. lg 2
T (3) = T (1) + T (2) + 3 = 8 + 18 + 3 = 29 ≤ 10.3. lg 3
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 58 / 106
Exemplo
T (2) = 18 ≤ 10.2. lg 2
T (3) = T (1) + T (2) + 3 = 8 + 18 + 3 = 29 ≤ 10.3. lg 3
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 58 / 106
Como achar as constantes?
Tudo bem. Dá até para chutar que T (n) pertence a classe O(n lg n).
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 59 / 106
Como achar as constantes?
Tudo bem. Dá até para chutar que T (n) pertence a classe O(n lg n).
Mas como descobrir que T (n) ≤ 3n lg n? Como achar a constante 3?
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 59 / 106
Como achar as constantes?
Tudo bem. Dá até para chutar que T (n) pertence a classe O(n lg n).
Mas como descobrir que T (n) ≤ 3n lg n? Como achar a constante 3?
Eis um método simples: prove por indução que T (n) ≤ cn lg n para
n ≥ n0 onde c e n0 são constantes a serem determinadas para que as
contas funcionem.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 59 / 106
Descobrindo c
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 60 / 106
Completando o exemplo
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + n para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 61 / 106
Completando o exemplo
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + n para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 61 / 106
Completando o exemplo
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + n para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 61 / 106
Completando o exemplo
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + n para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 61 / 106
Como chutar?
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 62 / 106
Como chutar?
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 62 / 106
Como chutar?
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 62 / 106
Como chutar?
Ela é quase idêntica à anterior e podemos chutar que T (n) ∈ Θ(n lg n).
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 62 / 106
Como chutar?
Ela é quase idêntica à anterior e podemos chutar que T (n) ∈ Θ(n lg n).
Chuto que existem c, n0 tais que T (n) ≤ cn lg n para n ≥ n0 .
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 62 / 106
Como chutar?
T (n) = 2T (⌊n/2⌋) + n
≤ 2c⌊n/2⌋ lg(⌊n/2⌋) + n
≤ 2c(n/2) lg(n/2) + n
= cn lg n − cn lg 2 + n
= cn lg n − cn + n
≤ cn lg n,
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 63 / 106
Como chutar?
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 64 / 106
Como chutar?
T (1) = 1
T (n) = 2T (⌈n/2⌉) + n para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 64 / 106
Como chutar?
T (1) = 1
T (n) = 2T (⌈n/2⌉) + n para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 64 / 106
Como chutar?
T (1) = 1
T (n) = 2T (⌊n/2⌋ + 17) + n para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 65 / 106
Como chutar?
T (1) = 1
T (n) = 2T (⌊n/2⌋ + 17) + n para n ≥ 2.
Ela parece bem mais difı́cil por causa do “17” no lado direito.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 65 / 106
Como chutar?
T (1) = 1
T (n) = 2T (⌊n/2⌋ + 17) + n para n ≥ 2.
Ela parece bem mais difı́cil por causa do “17” no lado direito.
Intuitivamente, porém, isto não deveria afetar a solução. Para n grande a
diferença entre T (⌊n/2⌋) e T (⌊n/2⌋ + 17) não é tanta.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 65 / 106
Como chutar?
T (1) = 1
T (n) = 2T (⌊n/2⌋ + 17) + n para n ≥ 2.
Ela parece bem mais difı́cil por causa do “17” no lado direito.
Intuitivamente, porém, isto não deveria afetar a solução. Para n grande a
diferença entre T (⌊n/2⌋) e T (⌊n/2⌋ + 17) não é tanta.
Chuto então que T (n) ∈ Θ(n lg n). (Exercı́cio!)
Observação: será necessário fortalecer a hipótese de indução. Além disso,
a prova requer também alguns truques. . .
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 65 / 106
Truques e sutilezas
Algumas vezes adivinhamos corretamente a solução de uma recorrência,
mas as contas aparentemente não funcionam! Em geral, o que é
necessário é fortalecer a hipótese de indução.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 66 / 106
Truques e sutilezas
Algumas vezes adivinhamos corretamente a solução de uma recorrência,
mas as contas aparentemente não funcionam! Em geral, o que é
necessário é fortalecer a hipótese de indução.
Considere a recorrência
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + 1 para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 66 / 106
Truques e sutilezas
Algumas vezes adivinhamos corretamente a solução de uma recorrência,
mas as contas aparentemente não funcionam! Em geral, o que é
necessário é fortalecer a hipótese de indução.
Considere a recorrência
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + 1 para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 66 / 106
Truques e sutilezas
Algumas vezes adivinhamos corretamente a solução de uma recorrência,
mas as contas aparentemente não funcionam! Em geral, o que é
necessário é fortalecer a hipótese de indução.
Considere a recorrência
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + 1 para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 66 / 106
Truques e sutilezas
Algumas vezes adivinhamos corretamente a solução de uma recorrência,
mas as contas aparentemente não funcionam! Em geral, o que é
necessário é fortalecer a hipótese de indução.
Considere a recorrência
T (1) = 1
T (n) = T (⌈n/2⌉) + T (⌊n/2⌋) + 1 para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 67 / 106
Truques e sutilezas
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 67 / 106
Truques e sutilezas
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 67 / 106
Truques e sutilezas
Considere a recorrência
T (1) = 1
T (n) = T (⌈n/2⌉) + 1 para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 68 / 106
Truques e sutilezas
Considere a recorrência
T (1) = 1
T (n) = T (⌈n/2⌉) + 1 para n ≥ 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 68 / 106
Truques e sutilezas
Considere a recorrência
T (1) = 1
T (n) = T (⌈n/2⌉) + 1 para n ≥ 2.
T (n) = T (⌈n/2⌉) + 1
≤ c lg(⌈n/2⌉) + 1
≤ c lg(n/2 + 1) + 1
= c lg((n + 2)/2) + 1
= c lg(n + 2) − c lg 2 + 1
= c lg(n + 2) − c + 1.
(Humm, falhou. . . )
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 68 / 106
Truques e sutilezas
Tudo que conseguimos foi mostrar que T (n) ≤ c lg(n + 2).
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 69 / 106
Truques e sutilezas
Tudo que conseguimos foi mostrar que T (n) ≤ c lg(n + 2).
Vamos tentar nos livrar do termo +2 fortalecendo a hipótese de indução.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 69 / 106
Truques e sutilezas
Tudo que conseguimos foi mostrar que T (n) ≤ c lg(n + 2).
Vamos tentar nos livrar do termo +2 fortalecendo a hipótese de indução.
Vamos mostrar que T (n) ≤ c lg(n − 2) para alguma constante c > 0.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 69 / 106
Truques e sutilezas
Tudo que conseguimos foi mostrar que T (n) ≤ c lg(n + 2).
Vamos tentar nos livrar do termo +2 fortalecendo a hipótese de indução.
Vamos mostrar que T (n) ≤ c lg(n − 2) para alguma constante c > 0.
T (n) = T (⌈n/2⌉) + 1
≤ c lg(⌈n/2⌉ − 2) + 1
≤ c lg(n/2 + 1 − 2) + 1
= c lg(n/2 − 1) + 1
= c lg((n − 2)/2) + 1
= c lg(n − 2) − c lg 2 + 1
= c lg(n − 2) − c + 1
≤ c lg(n − 2)
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 70 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 70 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 70 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 70 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 70 / 106
Árvore de recorrência
Considere a recorrência
T (n) = Θ(1) para n = 1, 2, 3,
T (n) = 3T (⌊n/4⌋) + cn2 para n ≥ 4,
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 71 / 106
Árvore de recorrência
Considere a recorrência
T (n) = Θ(1) para n = 1, 2, 3,
T (n) = 3T (⌊n/4⌋) + cn2 para n ≥ 4,
CLRS costuma usar a notação T (n) = Θ(1) para indicar que T (n) é uma
constante.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 71 / 106
Árvore de recorrência
Simplificação
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 72 / 106
Árvore de recorrência
Simplificação
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 72 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 73 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 74 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 75 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 76 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 76 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 76 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 76 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 76 / 106
Árvore de recorrência
Logo,
µ ¶2 µ ¶3
3 2 2 3 2 3
T (n) = cn + cn + cn + cn2 + · · · +
16 16 16
µ ¶log4 n−1
3
+ cn2 + Θ(nlog4 3 )
16
" log n−1 µ ¶ #
X 4
3 i
= cn2 + Θ(nlog4 3 )
16
i=0
" ∞ µ ¶ #
X 3 i 16
≤ cn2 + Θ(nlog4 3 ) = cn2 + Θ(nlog4 3 ),
16 13
i=0
P∞ 1
e T (n) ∈ O(n2 ). Observação: i=0 q
i = 1−q para 0 < q < 1.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 77 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 78 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 78 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 78 / 106
Árvore de recorrência
Resumo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 79 / 106
Árvore de recorrência
Resumo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 79 / 106
Árvore de recorrência
Resumo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 79 / 106
Árvore de recorrência
Resumo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 79 / 106
Vamos tentar juntos?
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 80 / 106
Vamos tentar juntos?
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 80 / 106
Vamos tentar juntos?
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 80 / 106
Árvore de recorrência
cn
T (n/3) T (2n/3)
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 81 / 106
Árvore de recorrência
cn
c(n/3) c(2n/3)
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 82 / 106
Árvore de recorrência
cn cn
c(n/3) c(2n/3) cn
log3/2 n
c(n/9) c(2n/9) c(2n/9) c(4n/9) cn
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 83 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 84 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 84 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 84 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 84 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 84 / 106
Árvore de recorrência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 84 / 106
Recorrências com Θ, O, Ω à direita (CLRS)
Uma “recorrência”
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 85 / 106
Recorrências com Θ, O, Ω à direita (CLRS)
Uma “recorrência”
T (n) = a para n = 1, 2,
2
T (n) = 3T (⌊n/4⌋) + bn para n ≥ 3
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 85 / 106
Recorrências com Θ, O, Ω à direita (CLRS)
Uma “recorrência”
T (n) = a para n = 1, 2,
2
T (n) = 3T (⌊n/4⌋) + bn para n ≥ 3
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 85 / 106
Recorrências com Θ, O, Ω à direita (CLRS)
Uma “recorrência”
T (n) = a para n = 1, 2,
2
T (n) = 3T (⌊n/4⌋) + bn para n ≥ 3
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 85 / 106
Recorrências com Θ, O, Ω à direita (CLRS)
Uma “recorrência”
T (n) = a para n = 1, 2,
2
T (n) = 3T (⌊n/4⌋) + bn para n ≥ 3
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 86 / 106
Recorrência do Mergesort
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 86 / 106
Recorrência do Mergesort
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 86 / 106
Recorrência do Mergesort
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 86 / 106
Cuidados com a notação assintótica
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 87 / 106
Cuidados com a notação assintótica
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 87 / 106
Cuidados com a notação assintótica
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 87 / 106
Cuidados com a notação assintótica
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 87 / 106
Cuidados com a notação assintótica
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 88 / 106
Cuidados com a notação assintótica
T (n) = 2T (⌊n/2⌋) + n
≤ 2c⌊n/2⌋ + n
≤ cn + n
= O(n)
Cuidados com a notação assintótica
T (n) = 2T (⌊n/2⌋) + n
≤ 2c⌊n/2⌋ + n
≤ cn + n
= O(n) ⇐= ERRADO!!!
Por quê?
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 88 / 106
Cuidados com a notação assintótica
T (n) = 2T (⌊n/2⌋) + n
≤ 2c⌊n/2⌋ + n
≤ cn + n
= O(n) ⇐= ERRADO!!!
Por quê?
Não foi feito o passo indutivo, ou seja, não foi mostrado que T (n) ≤ cn.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 88 / 106
Teorema Master
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 89 / 106
Teorema Master
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 89 / 106
Teorema Master
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 89 / 106
Teorema Master
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 89 / 106
Teorema Master
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 89 / 106
Teorema Master
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 90 / 106
Teorema Master
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 90 / 106
Teorema Master
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 90 / 106
Teorema Master
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 90 / 106
Exemplos de Recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 91 / 106
Exemplos de Recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 91 / 106
Exemplos de Recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 91 / 106
Exemplos de Recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 91 / 106
Exemplos de Recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 92 / 106
Exemplos de Recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 92 / 106
Exemplos de Recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 92 / 106
Exemplos de Recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 92 / 106
Exemplos de Recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 92 / 106
Exemplos de Recorrências
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 92 / 106
Teorema Master Especializado
Então
Θ(nlogb a ) se a > b k ,
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 93 / 106
Exemplos de análise de complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 94 / 106
Exemplos de análise de complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 94 / 106
Exemplos de análise de complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 94 / 106
Análise de complexidade do Insertion-Sort
Insertion-Sort(A, n)
1 para j ← 2 até n faça
2 chave ← A[j]
3 ⊲ Insere A[j] no subvetor ordenado A[1 . . . j − 1]
4 i ←j −1
5 enquanto i ≥ 1 e A[i] > chave faça
6 A[i + 1] ← A[i]
7 i ←i −1
8 A[i + 1] ← chave
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 95 / 106
Insertion sort – iteração genérica
chave = 38
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 96 / 106
Insertion sort – iteração genérica
chave = 38
1 i j n
20 25 35 40 44 55 38 99 10 65 50
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 96 / 106
Insertion sort – iteração genérica
chave = 38
1 i j n
20 25 35 40 44 55 38 99 10 65 50
1 i j n
20 25 35 40 44 55 99 10 65 50
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 96 / 106
Insertion sort – iteração genérica
chave = 38
1 i j n
20 25 35 40 44 55 38 99 10 65 50
1 i j n
20 25 35 40 44 55 99 10 65 50
1 i j n
20 25 35 40 44 55 99 10 65 50
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 96 / 106
Insertion sort – iteração genérica
chave = 38
1 i j n
20 25 35 40 44 55 38 99 10 65 50
1 i j n
20 25 35 40 44 55 99 10 65 50
1 i j n
20 25 35 40 44 55 99 10 65 50
1 i j n
20 25 35 40 44 55 99 10 65 50
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 96 / 106
Insertion sort – iteração genérica
chave = 38
1 i j n
20 25 35 40 44 55 38 99 10 65 50
1 i j n
20 25 35 40 44 55 99 10 65 50
1 i j n
20 25 35 40 44 55 99 10 65 50
1 i j n
20 25 35 40 44 55 99 10 65 50
1 i j n
20 25 35 38 40 44 55 99 10 65 50
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 96 / 106
Insertion sort
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 97 / 106
Insertion sort
chave 1 j n
99 20 25 35 38 40 44 55 99 10 65 50
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 97 / 106
Insertion sort
chave 1 j n
99 20 25 35 38 40 44 55 99 10 65 50
chave 1 j n
99 20 25 35 38 40 44 55 99 10 65 50
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 97 / 106
Insertion sort
chave 1 j n
99 20 25 35 38 40 44 55 99 10 65 50
chave 1 j n
99 20 25 35 38 40 44 55 99 10 65 50
chave 1 j n
10 20 25 35 38 40 44 55 99 10 65 50
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 97 / 106
Insertion sort
chave 1 j n
99 20 25 35 38 40 44 55 99 10 65 50
chave 1 j n
99 20 25 35 38 40 44 55 99 10 65 50
chave 1 j n
10 20 25 35 38 40 44 55 99 10 65 50
chave 1 j n
10 10 20 25 35 38 40 44 55 99 65 50
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 97 / 106
Insertion sort
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 98 / 106
Insertion sort
chave 1 j n
65 10 20 25 35 38 40 44 55 99 65 50
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 98 / 106
Insertion sort
chave 1 j n
65 10 20 25 35 38 40 44 55 99 65 50
chave 1 j n
65 10 20 25 35 38 40 44 55 65 99 50
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 98 / 106
Insertion sort
chave 1 j n
65 10 20 25 35 38 40 44 55 99 65 50
chave 1 j n
65 10 20 25 35 38 40 44 55 65 99 50
chave 1 j
50 10 20 25 35 38 40 44 55 65 99 50
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 98 / 106
Insertion sort
chave 1 j n
65 10 20 25 35 38 40 44 55 99 65 50
chave 1 j n
65 10 20 25 35 38 40 44 55 65 99 50
chave 1 j
50 10 20 25 35 38 40 44 55 65 99 50
chave 1 j
50 10 20 25 35 38 40 44 50 55 65 99
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 98 / 106
Análise de complexidade do Insertion-Sort
Insertion-Sort(A, n) Tempo
1 para j ← 2 até n faça ?
2 chave ← A[j] ?
3 ⊲ Insere A[j] em A[1 . . j − 1] ?
4 i ←j −1 ?
5 enquanto i ≥ 1 e A[i] > chave faça ?
6 A[i + 1] ← A[i] ?
7 i ←i −1 ?
8 A[i + 1] ← chave ?
Total ?
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 99 / 106
Complexidade de InsertionSort
Insertion-Sort(A, n) Tempo
1 para j ← 2 até n faça Θ(n)
2 chave ← A[j] Θ(n)
3 ⊲ Insere A[j] em A[1 . . j − 1] 0
4 i ←j −1 Θ(n)
5 enquanto i ≥ 1 e A[i] > chave faça Θ(n).O(n)
6 A[i + 1] ← A[i] Θ(n).O(n)
7 i ←i −1 Θ(n).O(n)
8 A[i + 1] ← chave Θ(n)
Total O(n2 )
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 100 / 106
Complexidade de Potência
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 101 / 106
Complexidade de Potência
Potência(a, d) Tempo
1 y ← a, n ← d, x ← 1 ?
2 enquanto n > 0 faça ?
3 se n é ı́mpar então x ← xy ?
4 n ← ⌊n/2⌋ ?
5 y ← y2 ?
6 devolva x ?
Total ?
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 102 / 106
Complexidade de Potência
Potência(a, d) Tempo
1 y ← a, n ← d, x ← 1 ?
2 enquanto n > 0 faça ?
3 se n é ı́mpar então x ← xy ?
4 n ← ⌊n/2⌋ ?
5 y ← y2 ?
6 devolva x ?
Total ?
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 102 / 106
Complexidade de Potência
Potência(a, d) Tempo
1 y ← a, n ← d, x ← 1 Θ(1)
2 enquanto n > 0 faça Θ(lg d)
3 se n é ı́mpar então x ← xy Θ(lg d)
4 n ← ⌊n/2⌋ Θ(lg d)
5 y ← y2 Θ(lg d)
6 devolva x Θ(1)
Total Θ(lg d)
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 103 / 106
Complexidade de Mistério
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 104 / 106
Complexidade de Mistério
Mistério(A, p, r ) Tempo
1 n ←r −p+1 ?
2 se n ≥ 3 faça ?
3 q ← p + ⌊n/3⌋ ?
4 Arruma(A, p, q, r ) ?
5 Mistério(A, p, q − 1) ?
6 Mistério(A, q, r ) ?
Total ?
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 105 / 106
Complexidade de Mistério
Mistério(A, p, r ) Tempo
1 n ←r −p+1 Θ(1)
2 se n ≥ 3 faça Θ(1)
3 q ← p + ⌊n/3⌋ O(1)
4 Arruma(A, p, q, r ) O(n)
5 Mistério(A, p, q − 1) T (⌊n/3⌋)
6 Mistério(A, q, r ) T (⌈2n/3⌉)
T (n) = T (⌊n/3⌋) + T (⌈2n/3⌉) + O(n)
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 106 / 106