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 / 329
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 / 329
Agradecimentos (Cid e Cândida)
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 3 / 329
Divisão e Conquista
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 165 / 329
Projeto de Algoritmos por Divisão e Conquista
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 166 / 329
Projeto de Algoritmos por Divisão e Conquista
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 166 / 329
Projeto de Algoritmos por Divisão e Conquista
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 166 / 329
Projeto de Algoritmos por Divisão e Conquista
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 166 / 329
Projeto de Algoritmos por Divisão e Conquista
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 166 / 329
Projeto de Algoritmos por Divisão e Conquista
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 166 / 329
Algoritmo Genérico
Divisão-e-Conquista(x)
⊲ Entrada: A instância x
⊲ Saı́da: Solução y do problema em questão para x
1. se x é suficientemente pequeno
2. então devolva Solucao(x)
3. senão
4. decomponha x em instâncias menores x1 , x2 , · · · , xk
5. para i de 1 até k faça
6. yi ← Divisão-e-Conquista(xi )
7. combine as soluções yi para obter a solução y de x.
8. devolva y
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 167 / 329
Projeto por Divisão e Conquista - Exemplo 1
Exponenciação
Problema:
Calcular an , para todo real a e inteiro n ≥ 0.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 168 / 329
Projeto por Divisão e Conquista - Exemplo 1
Exponenciação
Problema:
Calcular an , para todo real a e inteiro n ≥ 0.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 168 / 329
Projeto por Divisão e Conquista - Exemplo 1
Exponenciação
Problema:
Calcular an , para todo real a e inteiro n ≥ 0.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 168 / 329
Projeto por Divisão e Conquista - Exemplo 1
Exponenciação
Problema:
Calcular an , para todo real a e inteiro n ≥ 0.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 168 / 329
Projeto por Divisão e Conquista - Exemplo 1
Exponenciação
Problema:
Calcular an , para todo real a e inteiro n ≥ 0.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 168 / 329
Exemplo 1 - Solução 1 - Algoritmo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 169 / 329
Exemplo 1 - Solução 1 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 170 / 329
Exemplo 1 - Solução 1 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 170 / 329
Exemplo 1 - Solução 1 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 170 / 329
Exemplo 1 - Solução 1 - Complexidade
T (n) = Θ(n).
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 170 / 329
Exemplo 1 - Solução 1 - Complexidade
T (n) = Θ(n).
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 170 / 329
Exemplo 1 - Solução 1 - Complexidade
T (n) = Θ(n).
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 170 / 329
Exemplo 1 - Solução 2 - Divisão e Conquista
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 171 / 329
Exemplo 1 - Solução 2 - Divisão e Conquista
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 171 / 329
Exemplo 1 - Solução 2 - Divisão e Conquista
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 171 / 329
Exemplo 1 - Solução 2 - Divisão e Conquista
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 171 / 329
Exemplo 1 - Solução 2 - Divisão e Conquista
seguinte forma:
³ n ´2
a⌊ 2 ⌋ , se n par;
an = ³ n ´2
a · a⌊ 2 ⌋ , se n ı́mpar.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 171 / 329
Exemplo 1 - Solução 2 - Algoritmo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 172 / 329
Exemplo 1 - Solução 2 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 173 / 329
Exemplo 1 - Solução 2 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 173 / 329
Exemplo 1 - Solução 2 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 173 / 329
Exemplo 1 - Solução 2 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 173 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
Problema:
Dados um vetor ordenado A com n números reais e um real x, determinar
a posição 1 ≤ i ≤ n tal que A[i] = x, ou que não existe tal i.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 174 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
Problema:
Dados um vetor ordenado A com n números reais e um real x, determinar
a posição 1 ≤ i ≤ n tal que A[i] = x, ou que não existe tal i.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 174 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
Problema:
Dados um vetor ordenado A com n números reais e um real x, determinar
a posição 1 ≤ i ≤ n tal que A[i] = x, ou que não existe tal i.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 174 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
Problema:
Sejam A[p . . r ] um vetor ordenado com n = r − p + 1 números reais e x
um número real. Queremos projetar um algoritmo que devolve um ı́ndice i
tal que p ≤ i ≤ r e A[i] = x, ou i = −1 se tal ı́ndice não existir.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 175 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
Problema:
Sejam A[p . . r ] um vetor ordenado com n = r − p + 1 números reais e x
um número real. Queremos projetar um algoritmo que devolve um ı́ndice i
tal que p ≤ i ≤ r e A[i] = x, ou i = −1 se tal ı́ndice não existir.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 175 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
Problema:
Sejam A[p . . r ] um vetor ordenado com n = r − p + 1 números reais e x
um número real. Queremos projetar um algoritmo que devolve um ı́ndice i
tal que p ≤ i ≤ r e A[i] = x, ou i = −1 se tal ı́ndice não existir.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 175 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
Problema:
Sejam A[p . . r ] um vetor ordenado com n = r − p + 1 números reais e x
um número real. Queremos projetar um algoritmo que devolve um ı́ndice i
tal que p ≤ i ≤ r e A[i] = x, ou i = −1 se tal ı́ndice não existir.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 175 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
Problema:
Sejam A[p . . r ] um vetor ordenado com n = r − p + 1 números reais e x
um número real. Queremos projetar um algoritmo que devolve um ı́ndice i
tal que p ≤ i ≤ r e A[i] = x, ou i = −1 se tal ı́ndice não existir.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 176 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
Problema:
Sejam A[p . . r ] um vetor ordenado com n = r − p + 1 números reais e x
um número real. Queremos projetar um algoritmo que devolve um ı́ndice i
tal que p ≤ i ≤ r e A[i] = x, ou i = −1 se tal ı́ndice não existir.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 176 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
Problema:
Sejam A[p . . r ] um vetor ordenado com n = r − p + 1 números reais e x
um número real. Queremos projetar um algoritmo que devolve um ı́ndice i
tal que p ≤ i ≤ r e A[i] = x, ou i = −1 se tal ı́ndice não existir.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 176 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
Problema:
Sejam A[p . . r ] um vetor ordenado com n = r − p + 1 números reais e x
um número real. Queremos projetar um algoritmo que devolve um ı́ndice i
tal que p ≤ i ≤ r e A[i] = x, ou i = −1 se tal ı́ndice não existir.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 176 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
Problema:
Sejam A[p . . r ] um vetor ordenado com n = r − p + 1 números reais e x
um número real. Queremos projetar um algoritmo que devolve um ı́ndice i
tal que p ≤ i ≤ r e A[i] = x, ou i = −1 se tal ı́ndice não existir.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 177 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
Problema:
Sejam A[p . . r ] um vetor ordenado com n = r − p + 1 números reais e x
um número real. Queremos projetar um algoritmo que devolve um ı́ndice i
tal que p ≤ i ≤ r e A[i] = x, ou i = −1 se tal ı́ndice não existir.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 177 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
Problema:
Sejam A[p . . r ] um vetor ordenado com n = r − p + 1 números reais e x
um número real. Queremos projetar um algoritmo que devolve um ı́ndice i
tal que p ≤ i ≤ r e A[i] = x, ou i = −1 se tal ı́ndice não existir.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 177 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 178 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 178 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 178 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 178 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 178 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 178 / 329
Projeto por Divisão e Conquista - Exemplo 2
Busca Binária
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 178 / 329
Exemplo 2 - Algoritmo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 179 / 329
Exemplo 2 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 180 / 329
Exemplo 2 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 180 / 329
Exemplo 2 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 180 / 329
Exemplo 2 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 180 / 329
Exemplo 2 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 180 / 329
Aplicações de busca binária
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 181 / 329
Exemplo 3 - Máximo e Mı́nimo
Problema:
Dado um conjunto S de n ≥ 2 números reais, determinar o maior e o
menor elemento de S.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 182 / 329
Exemplo 3 - Máximo e Mı́nimo
Problema:
Dado um conjunto S de n ≥ 2 números reais, determinar o maior e o
menor elemento de S.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 182 / 329
Exemplo 3 - Máximo e Mı́nimo
Problema:
Dado um conjunto S de n ≥ 2 números reais, determinar o maior e o
menor elemento de S.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 182 / 329
Exemplo 3 - Máximo e Mı́nimo
Problema:
Dado um conjunto S de n ≥ 2 números reais, determinar o maior e o
menor elemento de S.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 182 / 329
Exemplo 3 - Máximo e Mı́nimo
Problema:
Dado um conjunto S de n ≥ 2 números reais, determinar o maior e o
menor elemento de S.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 182 / 329
Exemplo 3 - Máximo e Mı́nimo
Problema:
Dado um conjunto S de n ≥ 2 números reais, determinar o maior e o
menor elemento de S.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 182 / 329
Exemplo 3 - Máximo e Mı́nimo
Problema:
Dado um conjunto S de n ≥ 2 números reais, determinar o maior e o
menor elemento de S.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 182 / 329
Exemplo 3 - Algoritmo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 183 / 329
Exemplo 3 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 184 / 329
Exemplo 3 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 184 / 329
Exemplo 3 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 184 / 329
Exemplo 3 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 184 / 329
Exemplo 3 - Complexidade
½
0, ¥ ¦ n = 1,
T (n) = n
§n¨
T ( 2 ) + T ( 2 ) + 2, n > 1.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 185 / 329
Exemplo 3 - Complexidade
½
0, ¥ ¦ n = 1,
T (n) = n
§n¨
T ( 2 ) + T ( 2 ) + 2, n > 1.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 185 / 329
Exemplo 3 - Complexidade
½
0, ¥ ¦ n = 1,
T (n) = n
§n¨
T ( 2 ) + T ( 2 ) + 2, n > 1.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 185 / 329
Exemplo 3 - Complexidade
½
0, ¥ ¦ n = 1,
T (n) = n
§n¨
T ( 2 ) + T ( 2 ) + 2, n > 1.
e o resultado segue.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 185 / 329
Exemplo 3 - Algoritmo
½
0, ¥ ¦ n = 1,
T (n) = n
§n¨
T ( 2 ) + T ( 2 ) + 2, n > 1,
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 186 / 329
Exemplo 3 - Algoritmo
½
0, ¥ ¦ n = 1,
T (n) = n
§n¨
T ( 2 ) + T ( 2 ) + 2, n > 1,
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 186 / 329
Exemplo 3 - Algoritmo
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 187 / 329
Exemplo 3 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 188 / 329
Exemplo 3 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 188 / 329
Exemplo 3 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 188 / 329
Exemplo 3 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 188 / 329
Exemplo 3 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 189 / 329
Exemplo 3 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 189 / 329
Exemplo 3 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 189 / 329
Exemplo 3 - Complexidade
T (n) = 2T ( n2 ) + 2
= 2( 43 n − 2) + 2 (por HI)
= 23 n − 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 189 / 329
Exemplo 3 - Complexidade
T (n) = 2T ( n2 ) + 2
= 2( 43 n − 2) + 2 (por HI)
= 23 n − 2.
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 189 / 329
Exemplo 3 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 190 / 329
Exemplo 3 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 190 / 329
Exemplo 3 - Complexidade
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 190 / 329
Leitura adicional
C.C. de Souza, C.N. da Silva, O. Lee MC458 — Projeto e Análise de Algoritmos I 191 / 329