Algoritmos
Algoritmos
Notas de aula
Marcus Ritt
Luciana S. Buriol
com contribuicoes de
Edson Prestes
5 de Maio de 2011
Conte
udo
I.
An
alise de algoritmos
1. Introduc
ao e conceitos b
asicos
1.1. Notac
ao assint
otica . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
21
27
27
2. An
alise de complexidade
2.1. Introduc
ao . . . . . . . . . . .
2.2. Complexidade pessimista . .
2.2.1. Metodologia de an
alise
2.2.2. Exemplos . . . . . . .
2.3. Complexidade media . . . . .
2.4. Outros tpos de an
alise . . . .
2.4.1. An
alise agregada . . .
2.4.2. An
alise amortizada . .
2.5. Notas . . . . . . . . . . . . .
2.6. Exerccios . . . . . . . . . . .
31
31
35
35
41
47
61
61
64
66
66
. . . . . . . . . .
. . . . . . . . . .
de complexidade
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
71
3. Introduc
ao
73
4. Algoritmos gulosos
4.1. Introduc
ao . . . . . . . . . . . . . .
4.2. Algoritmos em grafos . . . . . . . .
4.2.1. Arvores
espalhadas mnimas
4.2.2. Caminhos mais curtos . . .
4.3. Algoritmos de seq
uenciamento . .
4.4. T
opicos . . . . . . . . . . . . . . .
4.5. Notas . . . . . . . . . . . . . . . .
4.6. Exerccios . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
75
75
79
79
84
85
89
94
94
Conte
udo
5. Programac
ao din
amica
5.1. Introduc
ao . . . . . . . . . . . . . . . . . .
5.2. Comparac
ao de sequencias . . . . . . . . .
5.2.1. Subsequencia Comum Mais Longa
5.2.2. Similaridade entre strings . . . . .
5.3. Problema da Mochila . . . . . . . . . . . .
5.4. Multiplicac
ao de Cadeias de Matrizes . . .
5.5. T
opicos . . . . . . . . . . . . . . . . . . .
5.5.1. Algoritmo de Floyd-Warshall . . .
5.5.2. Caixeiro viajante . . . . . . . . . .
5.5.3. Arvore
de busca bin
aria
otima . .
5.5.4. Caminho mais longo . . . . . . . .
5.6. Exerccios . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
95
95
99
99
104
108
109
113
113
115
116
120
121
6. Divis
ao e conquista
6.1. Introduc
ao . . . . . . . . . . . . . . . .
6.2. Resolver recorrencias . . . . . . . . . .
6.2.1. Metodo da substituic
ao . . . .
6.2.2. Metodo da
arvore de recurs
ao .
6.2.3. Metodo Mestre . . . . . . . . .
6.2.4. Um novo metodo Mestre . . . .
6.3. Algoritmos usando divis
ao e conquista
6.3.1. O algoritmo de Strassen . . . .
6.3.2. Menor dist
ancia . . . . . . . .
6.3.3. Selec
ao . . . . . . . . . . . . .
6.3.4. Convoluc
oes . . . . . . . . . . .
6.4. Notas . . . . . . . . . . . . . . . . . .
6.5. Exerccios . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
123
123
125
126
131
134
139
141
141
142
144
146
150
150
7. Arvores
de busca, backtracking e branch-and-bound
7.1. Backtracking . . . . . . . . . . . . . . . . . . . .
7.1.1. Exemplo: Cobertura por vertices . . . . .
7.2. Branch-and-bound . . . . . . . . . . . . . . . . .
7.3. An
alisar
arvores de busca . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
153
153
158
163
174
8. Algoritmos de aproximac
ao
8.1. Introduc
ao . . . . . . . . . . . . .
8.2. Aproximac
oes com randomizac
ao
8.3. Aproximac
oes gulosas . . . . . .
8.4. Esquemas de aproximac
ao . . . .
8.5. Exerccios . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
177
177
184
185
192
194
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Conte
udo
III. Algoritmos
195
9. Algoritmos em grafos
9.1. Fluxos em redes . . . . . . . . . . . . . . . . . . . .
9.1.1. Algoritmo de Ford-Fulkerson . . . . . . . .
9.1.2. O algoritmo de Edmonds-Karp . . . . . . .
9.1.3. Variacoes do problema . . . . . . . . . . . .
9.1.4. Aplicac
oes . . . . . . . . . . . . . . . . . . .
9.1.5. Outros problemas de fluxo . . . . . . . . . .
9.2. Emparelhamentos . . . . . . . . . . . . . . . . . . .
9.2.1. Aplicac
oes . . . . . . . . . . . . . . . . . . .
9.2.2. Grafos bi-partidos . . . . . . . . . . . . . .
9.2.3. Emparelhamentos em grafos n
ao-bipartidos
9.2.4. Exerccios . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
197
198
199
203
205
209
212
214
217
217
227
228
10.Algoritmos de aproximac
ao
10.1. Aproximac
ao para o problema da
arvore
10.2. Aproximac
oes para o PCV . . . . . . . .
10.3. Algoritmos de aproximac
ao para cortes .
10.4. Exerccios . . . . . . . . . . . . . . . . .
mnima
. . . . .
. . . . .
. . . . .
.
.
.
.
.
.
.
.
229
229
231
232
236
de Steiner
. . . . . .
. . . . . .
. . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
237
251
251
253
257
13.Teoria de NP-completude
13.1. Caracterizac
oes e problemas em NP . . . . . . . . . . . . . . .
13.2. Reduc
oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.3. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
259
259
261
271
14.Fora do NP
273
14.1. De P ate PSPACE . . . . . . . . . . . . . . . . . . . . . . . . . . 275
14.2. De PSPACE ate ELEMENTAR . . . . . . . . . . . . . . . . . . . 280
14.3. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Conte
udo
15.Complexidade de circuitos
A. Conceitos matem
aticos
A.1. Func
oes comuns . . . .
A.2. Somat
orio . . . . . . .
A.3. Induc
ao . . . . . . . .
A.4. Limites . . . . . . . .
A.5. Probabilidade discreta
A.6. Grafos . . . . . . . . .
B. Soluc
oes dos exerccios
285
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
293
293
298
301
302
303
304
307
Conte
udo
Essas notas servem como suplemento `
a material do livro Complexidade de
algoritmos de Toscani/Veloso e o material did
atico da disciplina Complexidade de algoritmos da UFRGS.
Vers
ao 3772 do 2011-05-05, compilada em 5 de Maio de 2011. A obra esta licenciada sob uma Licenca Creative Commons (Atribuicao-Uso Nao-ComercialN
ao a obras derivadas 2.5 Brasil).
Parte I.
An
alise de algoritmos
1. Introduc
ao e conceitos b
asicos
A teoria da computac
ao comecou com a pergunta Quais problemas sao efetivamente comput
aveis? e foi estudada por matem
aticos como Post, Church,
Kleene e Turing. Intuitivamente, computadores diferentes, por exemplo um
PC ou um Mac, possuem o mesmo poder computacional. Mas e possvel
que um outro tipo de m
aquina e mais poderosa que as conhecidas? Uma
m
aquina, cujos programas nem podem ser implementadas num PC ou Mac?
N
ao e f
acil responder essa pergunta, porque a resposta depende das possibilidades computacionais do nosso universo, e logo do nosso conhecimento da
fsica. Matem
aticos definiram diversos modelos de computacao, entre eles o
c
alculo lambda, as func
oes parcialmente recursivas, a maquina de Turing e a
m
aquina de RAM, e provaram que todos s
ao (polinomialmente) equivalentes
em poder computacional, e s
ao considerados como maquinas universais.
Nossa pergunta e mais especfica: Quais problemas sao eficientemente comput
aveis?. Essa pergunta e motivada pela observacao de que alguns problemas que, mesmo sendo efetivamente comput
aveis, s
ao tao complicados, que a
solucao deles para inst
ancias do nosso interesse e impraticavel.
Exemplo 1.1
N
ao existe um algoritmo que decide o seguinte: Dado um programa arbitrario
(que podemos imaginar escrito em qualquer linguagem de programacao como
C ou Miranda) e as entradas desse programa. Ele termina? Esse problema e
conhecido como problema de parada.
Vis
ao geral
Objetivo: Estudar a an
alise e o projeto de algoritmos.
Parte 1: An
alise de algoritmos, i.e. o estudo teorico do desempenho e
uso de recursos.
Ela e pre-requisito para o projeto de algoritmos.
Parte 2: As principais tecnicas para projetar algoritmos.
1. Introduc
ao e conceitos b
asicos
Introduc
ao
Um algoritmo e um procedimento que consiste em um conjunto de regras
n
ao ambguas as quais especificam, para cada entrada, uma sequencia
finita de operac
oes, terminando com uma sada correspondente.
Um algoritmo resolve um problema quando, para qualquer entrada, produz uma resposta correta, se forem concedidos tempo e memoria suficientes para a sua execuc
ao.
Motivac
ao
Na teoria da computac
ao perguntamos Quais problemas sao efetivamente comput
aveis?
No projeto de algoritmos, a pergunta e mais especfica: Quais problemas s
ao eficientemente comput
aveis?
Para responder, temos que saber o que eficiente significa.
Uma definic
ao razo
avel e considerar algoritmos em tempo polinomial
como eficiente (tese de Cobham-Edmonds).
Custos de algoritmos
Tambem temos que definir qual tipo de custo interessa.
Uma execuc
ao tem v
arios custos associados:
Tempo de execuc
ao, uso de espaco (cache, memoria, disco), energia consumida, energia dissipada, ...
Existem caractersticas e medidas que sao importantes em contextos
diferentes
Linhas de c
odigo fonte (LOC), legibilidade, manutenabilidade, corretude, custo de implementac
ao, robustez, extensibilidade,...
A medida mais importante: tempo de execucao.
A complexidade pode ser vista como uma propriedade do problema
Mesmo um problema sendo comput
avel, n
ao significa que existe um algoritmo
que vale a pena aplicar. O problema
10
es regulares com 2
Expresso
Inst
ancia Uma express
ao regular e com operac
oes (uniao), (fecho de
2
Kleene), (concatenac
ao) e (quadratura) sobre o alfabeto =
{0, 1}.
Decis
ao L(e) 6= ?
2 10102
11
1. Introduc
ao e conceitos b
asicos
(Os dados correspondem ao consenso cientfico no momento; obviamente novos
descobrimentos podem os mudar Wilkinson Microwave Anisotropy Probe [71],
Lloyd [50])
M
etodos para resolver um sistema de equaco
es lineares Como resolver um
sistema quadr
atico de equac
oes lineares
a11 x1 + a12 x2 + + a1n xn = b1
a21 x1 + a22 x2 + + a2n xn = b2
det(Ai )
det(A)
1in
(sendo Aij a matriz A sem linha a i e sem a coluna j). O trabalho Tn nesse
caso e dado pelo recorrencia
Tn = n(A + M + Tn1 );
12
T1 = 1
cuja soluc
ao e
X
1/i! 1
Tn = n! 1 + (A + M )
1i<n
Exemplo 1.3
Para resolver
1
4
7
2
5
8
3
x1
2
7 x2 = 4
9
x3
6
1 2
4 5
7 8
1 n!
1i<n
matriz aumentada
3 2
7 4
9 6
13
1. Introduc
ao e conceitos b
asicos
obtendo
1
0
0
2
3
6
3
5
12
2
4 ;
8
1
0
0
2
3
0
3
5
2
2
4
0
operac
oes de ponto flutuante, que e (exceto valores de n bem pequenos) consideravelmente melhor que os resultados com n! operacoes acima2 .
Observe que esse metodo tambem fornece o determinante do matriz: ela e o
produto dos elementos na diagonal! De fato, o metodo e um dos melhores para
calcular o determinante. Observe tambem que ela nao serve para melhorar o
metodo de Cramer, porque a soluc
ao do problema original ja vem junto.
Qual o melhor algoritmo?
Para um dado problema, existem diversos algoritmos com desempenhos
diferentes.
Queremos resolver um sistema de equacoes lineares de tamanho n.
O metodo de Cramer precisa 6n! operacoes de ponto flutuante (OPF).
O metodo de Gauss precisa n3 n OPF.
Usando um computador de 3 GHz que e capaz de executar um OPF por
ciclo temos
n
2
3
4
5
10
20
2O
14
Cramer
4 ns
12 ns
48 ns
240ns
7.3ms
152 anos
Gauss
2 ns
8 ns
20 ns
40 ns
330 ns
2.7 s
Motivac
ao para algoritmos eficientes
N
umero de operac
oes
log2 n
n
n log2 n
n2
n3
2n
3n
M
aquina rapida
N 10
10N
10N
(N grande)
10N 3.2N
3
10N 2.2N
N + log2 10 N + 3.3
N + log3 10 N + 2.1
Exemplo 1.4
Esse exemplo mostra como calcular os dados da tabela acima. Dado um
algoritmo que precisa f (n) passos de execuc
ao numa determinada maquina.
Qual o tamanho de problema n0 que podemos resolver numa maquina c vezes
mais r
apido?
A quantidade n0 satisfaz f (n0 ) = cf (n). Para funcoes que possuam uma
inversa (por exemplo func
oes monot
onicas) obtemos n0 = f 1 (cf (n)). Por
exemplo para f (n) = log2 n e c = 10 (exemplo acima), temos log2 n0 =
10 log2 n n0 = n10 .
Crescimento de func
oes
15
1. Introduc
ao e conceitos b
asicos
x3
10x3
4x -3x +2x-1
3
1.2x109
1.0x109
Complexidade
8.0x108
6.0x108
4.0x108
2.0x10
0.0x100
100
200
300
Tamanho do problema
400
500
Crescimento de func
oes
n=
log2 n
n
n log2 n
n2
n3
2n
101
3
101
33
102
103
103
102
7
102
6.6 102
104
106
1.3 1030
103
10
103
104
106
109
1.1 10301
104
13
104
1.3 105
108
1012
2 103010
105
17
105
1.7 106
1010
1015
1030103
106
20
106
2 107
1012
1018
10301030
Comparar efici
encias
Como comparar eficiencias? Uma medida concreta do tempo depende
do tipo da m
aquina usada (arquitetura, cache, memoria, ...)
16
17
1. Introduc
ao e conceitos b
asicos
Complexidade de algoritmos
Considere dois algoritmos A e B com tempo de execucao O(n2 ) e O(n3 ),
respectivamente. Qual deles e o mais eficiente ?
Considere dois programas A e B com tempos de execucao 100n2 milisegundos,e 5n3 milisegundos, respectivamente, qual e o mais eficiente?
Exemplo 1.5
Considerando dois algoritmos com tempo de execucao O(n2 ) e O(n3 ) esperamos que o primeiro seja mais eficiente que o segundo. Para n grande, isso e
verdadeiro, mas o tempo de execuc
ao atual pode ser 100n2 no primeiro e 5n3
no segundo caso. Logo para n < 20 o segundo algoritmo e mais rapido.
Comparac
ao de tempo de execuc
ao
Assintoticamente consideramos um algoritmo com complexidade O(n2 )
melhor que um algoritmo com O(n3 ).
De fato, para n suficientemente grande O(n2 ) sempre e melhor.
Mas na pr
atica, n
ao podemos esquecer o tamanho do problema real.
100000
80000
60000
40000
20000
0
0
10
15
20
25
30
x
n^2
n^3
Exemplo 1.6
Considere dois computadores C1 e C2 que executam 107 e 109 operacoes por
segundo (OP/s) e dois algoritmos de ordenacao A e B que necessitam 2n2 e
50n log10 n operac
oes com entrada de tamanho n, respectivamente. Qual o
tempo de execuc
ao de cada combinac
ao para ordenar 106 elementos?
18
Algoritmo
Comp. C1
2(106 )2 OP
107 OP/s
Comp. C2
= 2 105 s
= 30s
2(106 )2 OP
109 OP/s
= 2 103 s
= 0.3s
19
1. Introduc
ao e conceitos b
asicos
Problemas super-polinomiais?
Consideramos a classe P de problemas com solucao em tempo polinomial
trat
avel.
NP e outra classe importante que contem muitos problemas praticos (e
a classe P).
N
ao se sabe se todos possuem algoritmo eficiente.
Problemas NP-completos s
ao os mais complexos do NP: Se um deles
tem uma soluc
ao eficiente, toda classe tem.
V
arios problemas NP-completos s
ao parecidos com problemas que tem
algoritmos eficientes.
Soluc
ao eficiente conhecida Soluc
ao eficiente improvavel
Ciclo euleriano
Ciclo hamiltoniano
Caminho mais curto
Caminho mais longo
Satisfatibilidade 2-CNF
Satisfatibilidade 3-CNF
Ciclo euleriano
Inst
ancia Um grafo n
ao-direcionado G = (V, E).
Decis
ao Existe um ciclo euleriano, i.e. um caminho v1 , v2 , . . . , vn tal que
v1 = vn que usa todos arcos exatamente uma vez?
decidvel em tempo linear usando o teorema de Euler: um
Coment
ario E
grafo conexo contem um ciclo euleriano sse o grau de cada no e
par [19, Teorema 1.8.1]). No caso de um grafo direcionado tem um
teorema correspondente: um grafo fortemente conexo contem um
ciclo euleriano sse cada n
o tem o mesmo n
umero de arcos entrantes
e saintes.
Ciclo hamiltoniano
Inst
ancia Um grafo n
ao-direcionado G = (V, E).
Decis
ao Existe um ciclo hamiltanio, i.e. um caminho v1 , v2 , . . . , vn tal
que v1 = vn que usa todos n
os exatamente uma u
nica vez?
20
1.1. Notac
ao assint
otica
O an
alise de algoritmos considera principalmente recursos como tempo e
espaco. Analisando o comportamento de um algoritmo em termos do tamanho da entrada significa achar uma func
ao c : N R+ , que associa com
todos entradas de um tamanho n um custo (medio,maximo) c(n). Observe,
que e suficiente trabalhar com func
oes positivas (com co-domnio R+ ), porque os recursos de nosso interesse s
ao positivos. A seguir, supomos que todas
func
oes s
ao dessa forma.
Notac
ao assint
otica: O
Freq
uentemente nosso interesse e o comportamento assint
otico de uma
func
ao f (n) para n .
Por isso, vamos introduzir classes de crescimento.
O primeiro exemplo e a classe de func
oes que crescem menos ou igual
que g(n)
O(g(n)) = {f : N R+ | (c > 0)n0 (n > n0 ) : f (n) cg(n)}
A definic
ao do O (e as outras definic
oes em seguido) podem ser generalizadas
para qualquer func
ao com domnio R.
Notac
ao assint
otica: O
21
1. Introduc
ao e conceitos b
asicos
Notac
ao assint
otica
Com essas classes podemos escrever por exemplo
4n2 + 2n + 5 O(n2 )
Outra notac
ao comum que usa a identidade e
4n2 + 2n + 5 = O(n2 )
Observe que essa notac
ao e uma equacao sem volta (ingles: one-way
equation);
O(n2 ) = 4n2 + 2n + 5
n
ao e definido.
Para f O(g) leia: f e do ordem de g; para f = O(g) leiamos as vezes
simplesmente f e O de g. Observe que numa equacao como 4n2 = O(n2 ),
as express
oes 4n2 e n2 denotam func
oes, n
ao valores3 .
Caso f O(g) com constante c = 1, digamos que g e uma cota assint
otica
superior de f [64, p. 15]. Em outras palavras, O define uma cota assintotica
superior a menos de constantes.
O: Exemplos
5n2 + n/2 O(n3 )
5n2 + n/2 O(n2 )
sin(n) O(1)
Exemplo 1.8
Mais exemplos
n2 O(n3 log2 n)
3
32n O(n )
10n n2 6 O(n2n )
c = 1; n0 = 2
c = 32; n0 = 1
c = 4; n0 = 1
3 Mais
22
(1.1)
Prova.
X
i
ai n
|p(n)| =
0im
|ai |ni
Corol
ario A.1
0im
|ai |nm = nm
0im
|ai |
0im
Notac
ao assint
otica: Outras classes
Func
oes que crescem (estritamente) menos que g(n)
o(g(n)) = {f : N R+ | (c > 0)n0 (n > n0 ) : f (n) cg(n)} (1.2)
Func
oes que crescem mais ou igual `
a g(n)
(g(n)) = {f : N R+ | (c > 0)n0 (n > n0 ) : f (n) cg(n)} (1.3)
Func
oes que crescem (estritamente) mais que g(n)
(g(n)) = {f : N R+ | (c > 0)n0 (n > n0 ) : f (n) cg(n)} (1.4)
Func
oes que crescem igual `
a g(n)
(g(n)) = O(g(n)) (g(n))
(1.5)
23
1. Introduc
ao e conceitos b
asicos
Conven
c
ao 1.1
Se o contexto permite, escrevemos f O(g) ao inves de f (n) O(g(n)),
f cg ao inves de f (n) cg(n) etc.
Proposi
c
ao 1.2 (Caracteriza
c
ao alternativa)
Caracterizac
oes alternativas de O, o, e s
ao
f (n)
<
n g(n)
f (n)
f (n) o(g(n)) lim
=0
n g(n)
f (n)
f (n) (g(n)) lim inf
>0
n g(n)
f (n)
=
f (n) (g(n)) lim
n g(n)
Prova. Exerccio.
(1.6)
(1.7)
(1.8)
(1.9)
Conven
c
ao 1.2
Escrevemos f, g, . . . para func
oes f (n), g(n), . . . caso nao tem ambig
uedade no
contexto.
Operac
oes
As notac
oes assint
oticas denotam conjuntos de funcoes.
Se um conjunto ocorre em uma f
ormula, resulta o conjunto de todas
combinac
oes das partes.
Exemplos: nO(1) , log O(n2 ), n1+o(1) , (1 o(1)) ln n
Em uma equac
ao o lado esquerdo e (implicitamente) quantificado universal, e o lado direto existencial.
Exemplo: n2 + O(n) = O(n4 ) Para todo f O(n), existe um g O(n4 )
tal que n2 + f = g.
Exemplo 1.9
nO(1) denota
{nf (n) | c f (n) c} {f (n) | cn0 n > n0 f (n) nc }
o conjunto das func
oes que crescem menos que um polinomio.
24
Uma notac
ao assint
otica menos comum e f = O(g)
que e uma abreviacao para
f = O(f )
(1.10)
cO(f ) = O(f )
(1.11)
(1.12)
O(O(f )) = O(f )
O(f )O(g) = O(f g)
(1.13)
(1.14)
O(f g) = f O(g)
(1.15)
Prova. Exerccio.
Exemplo 1.10
Por exemplo, (1.12) implica que para f = O(h) e g = O(h) temos f +g = O(h).
As mesmas caractersticas s
ao verdadeiras para (prova? veja exerccio 1.6).
E para o, e ?
Caractersticas: Princpio de absorc
ao [64, p. 35]
g = O(f ) f + g = (f )
Relac
oes de crescimento Uma vantagem da notacao O e que podemos usala em f
ormulas como m + O(n). Em casos em que isso nao for necessario,
e queremos simplesmente comparar func
oes, podemos introduzir relacoes de
crescimento entre funcoes, obtendo uma notac
ao mais comum. Uma definicao
natural e
25
1. Introduc
ao e conceitos b
asicos
Relac
oes de crescimento
Defini
c
ao 1.1 (Rela
c
oes de crescimento)
f g f o(g)
(1.16)
f g f O(g)
(1.17)
f g f (g)
(1.18)
f g f (g)
(1.19)
f g f (g)
(1.20)
Essas relac
oes s
ao chamadas notac
ao de Vinogradov4 .
Caso f g digamos as vezes f e absorvido pela g. Essas relacoes satisfazem
as caractersticas b
asicas esperadas.
Caractersticas das relac
oes de crescimento
Proposi
c
ao 1.3 (Caractersticas das rela
c
oes de crescimento)
Sobre o conjunto de func
oes [N R+ ]
1. f g g f ,
2. e s
ao ordenac
oes parciais (reflexivas, transitivas e anti-simetricas
em relac
ao de ),
3. f g g f ,
4. e s
ao transitivas,
5. e uma relac
ao de equivalencia.
Prova. Exerccio.
Observe que esses resultados podem ser traduzidos para a notacao O. Por
exemplo, como e uma relac
ao de equivalencia, sabemos que tambem
satisfaz
f (f )
f (g) g (f )
f (g) g (h) f (h)
A notac
ao com relac
oes e sugestiva e freq
uentemente mais facil de usar, mas
nem todas as identidades que ela sugere s
ao validas, como a seguinte proposic
ao mostra.
4 Uma
notac
ao alternativa
e para e para . Infelizmente a notac
ao n
ao
e padronizada.
26
1.2. Notas
Identidades falsas das relac
oes de crescimento
Proposi
c
ao 1.4 (Identidades falsas das rela
c
oes de crescimento)
verdadeiro que
E
f g f 6 g
(1.21)
f g f 6 g
(1.22)
(Tricotomia)
Prova. Exerccio.
Considerando essas caractersticas, a notac
ao tem que ser usada com cuidado.
Uma outra abordagem e definir O etc. diferente, tal que outras relacoes acima
sao verdadeiras. Mas parece que isso n
ao e possvel, sem perder outras [68].
1.2. Notas
Alan Turing provou em 1936 que o problema de parada nao e decidvel.
O estudo da complexidade de algoritmos comecou com o artigo seminal de
Hartmanis e Stearns [35].
O estudo da complexidade de calcular a determinante tem muito mais aspectos
interessantes. Um deles e que o metodo de Gauss pode produzir resultados
intermedi
arios cuja representac
ao precisa um n
umero exponencial de bits em
func
ao do tamanho da entrada. Portanto, o metodo de Gauss formalmente nao
tem complexidade O(n3 ). Resultados atuais mostram que uma complexidade
de operac
oes de bits n3.2 log kAk1+o(1) e possvel [40].
Nossa discuss
ao da regra de Cramer usa dois metodos naivos para calcular
determinantes. Habgood e Arel [34] mostram que existe um algoritmo que
resolve um sistema de equac
oes lineares usando a regra de Cramer em tempo
O(n3 ).
1.3. Exerccios
(Solucoes a partir da p
agina 307.)
Exerccio 1.1
Quais func
oes s
ao contidos nos conjuntos O(1), o(1), (1), (1)?
27
1. Introduc
ao e conceitos b
asicos
Exerccio 1.2
Prove as equivalencias (1.6), (1.7), (1.8) e (1.9).
Exerccio 1.3
Prove as equac
oes (1.10) ate (1.15).
Exerccio 1.4
Prove a proposic
ao (1.3).
Exerccio 1.5
Prove a proposic
ao (1.4).
Exerccio 1.6
Prove as caractersticas 1.10 ate 1.15 (ou caractersticas equivalentes caso alguma n
ao se aplica) para .
Exerccio 1.7
Prove ou mostre um contra-exemplo. Para qualquer constante c R, c > 0
f O(g) f + c O(g)
(1.23)
Exerccio 1.8
Prove ou mostre um contra-exemplo.
1. log(1 + n) = O(log n)
2. log O(n2 ) = O(log n)
3. log log n = O(log n)
Exerccio 1.9
Considere a func
ao definido pela recorrencia
fn = 2fn1 ;
f0 = 1.
Professor Veloz afirme que fn = O(n), e que isso pode ser verificado simplesmente da forma
fn = 2fn1 = 2O(n 1) = 2O(n) = O(n)
Mas sabendo que a soluc
ao dessa recorrencia e fn = 2n duvidamos que 2n =
O(n). Qual o erro do professor Veloz?
28
1.3. Exerccios
Exerccio 1.10
Mostre que a definic
ao
o(g(n)) = {f : N R+ | (c > 0)n0 (n > n0 ) : f (n) < cg(n)}
(denotado com o para diferenciar da definic
ao o) e equivalente com a definicao
1.2 para func
oes g(n) que s
ao diferente de 0 a partir de um n0 .
Exerccio 1.11
Mostre que o n
umeros Fibonacci
(
n
fn =
fn2 + fn1
se 0 n 1
se n 2
5)/2.
Exerccio 1.12
Prove a seguinte variac
ao do princpio de absorc
ao para g : N R+ :
g o(f ) f g (f ).
Exerccio 1.13
Prove que
f g O(f ) = O(g).
Exerccio 1.14
Prove que (f ) = O(f ), mas o contr
ario O(f ) = (f ) nao e correto.
Exerccio 1.15
Para qualquer par das seguintes func
oes, analisa a complexidade mutual.
n3 , n3 log1/3 log n/log 1/3 n, n3 log1/2 log n/log 1/2 n, n3 log1/2 ,
n3 log5/7 log n/log 5/7 n, n3 log2 log n/logn, n3 log1/2 log n/logn,
n3 log n, n3 log5/4 log n/log 5/4 n, n3 log3 log n/log 2 n
Exerccio 1.16
Prove: 2m = 1 + O(m1 ).
Exerccio 1.17
1. Suponha que f e g s
ao func
oes polinomiais de N para N com f (n)
(nr ) e g(n) (ns ). O que se pode afirmar sobre a funcao composta
g(f (n))?
29
1. Introduc
ao e conceitos b
asicos
2. Classifique as func
oes f (n) = 5 2n + 3 e g(n) = 3 n2 + 5 n como
f O(g), f (g) ou f (g).
3. Verifique se 2n n (2n ) e se 2n+1 (2n ).
Exerccio 1.18
Mostra que log n O(n ) para todo > 0.
Exerccio 1.19 (Levin [49])
Duas func
oes f (n) e g(n) s
ao compar
aveis caso existe um k tal que
f (n) (g(n) + 2)k ;
30
2. An
alise de complexidade
2.1. Introduc
ao
Para analisar a eficiencia de algoritmos faz pouco sentido medir os recursos gastos em computadores especficos, porque devido a diferentes conjuntos
de instruc
oes, arquiteturas e desempenho dos processadores, as medidas sao
difceis de comparar. Portanto, usamos um modelo de uma maquina que reflita as caractersticas de computadores comuns, mas e independente de uma
implementac
ao concreta. Um modelo comum e a m
aquina de RAM com as
seguintes caractersticas:
um processador com um ou mais registros, e com apontador de instruc
oes,
uma mem
oria infinita de n
umeros inteiros e
um conjunto de instruc
oes elementares que podem ser executadas em
tempo O(1) (por exemplo func
oes b
asicas sobre n
umeros inteiros e de
ponto flutuante, acesso `
a mem
oria e transferencia de dados); essas operacoes
refletem operac
oes tpicas de m
aquinas concretas.
Observe que a escolha de um modelo abstrato n
ao e totalmente trivial. Conhecemos v
arios modelos de computadores, cuja poder computacional nao e equivalente em termos de complexidade (que n
ao viola a tese de Church-Turing).
Mas todos os modelos encontrados (fora da computacao quantica) sao polinomialmente equivalentes, e portanto, a noc
ao de eficiencia fica a mesma. A
tese que todos modelos computacionais s
ao polinomialmente equivalentes as
vezes est
a chamado tese de Church-Turing estendida.
O plano
Uma hierarquia de abstrac
oes:
Tempo de
execucao [s]
N
/ umero de
operac
oes
oes no
/ Operac
caso pessimista
Complexidade
/ pessimista
assintotica
Custos de execuc
oes
Seja E o conjunto de sequencias de operac
oes fundamentais.
31
2. An
alise de complexidade
Para um algoritmo A, com entradas D seja
exec[A] : D E
a func
ao que fornece a sequencia de instrucoes executadas exec[A](d)
para cada entrada d D.
Se atribumos custos para cada operac
ao basica, podemos calcular tambem
o custo de uma execuc
ao
custo : E R+
e o custo da execuc
ao do algoritmo a depende da entrada d
desemp[A] : D R+ = custo exec[A]
Defini
c
ao 2.1
O smbolo denota a composic
ao de func
oes tal que
(f g)(n) = f (g(n))
(leia: f depois g).
Em geral, n
ao interessam os custos especficos para cada entrada, mas o comportamento do algoritmo. Uma medida natural e como os custos crescem com
o tamanho da entrada.
Condensac
ao de custos
Queremos condensar os custos para uma u
nica medida.
Essa medida depende somente do tamanho da entrada
tam : D N
O objetivo e definir uma func
ao
aval[A](n) : N R+
que define o desempenho do algoritmo em relacao ao tamanho.
Como, em geral, tem v
arias entradas d tal que tam(d) = n temos que
definir como condensar a informac
ao de desemp[A](d) delas.
32
2.1. Introducao
Condensac
ao
Entrada
?>=<
89:;
@ABC
D desemp/ GFED
R+
O
tam
Tamanho
?>=<
89:;
N
aval
@ABC
/ GFED
R+
Custo da instancia
Condensac
ao
Na pr
atica, duas medidas condensadas s
ao de interesse particular
A complexidade pessimista
Cp= [A](n) = max{desemp[A](d) | d D, tam(d) = n}
A complexidade media
Cm [A](n) =
P (d) desemp[A](d)
tam(d)=n
33
2. An
alise de complexidade
Uma definic
ao alternativa e
Cp [A](n) = max{desemp[A](d) | d D, tam(d) n}
onica e temos
Cp e monot
Cp= [A](n) Cp [A](n)
onica as definic
oes sao equivalentes
Caso Cp= seja monot
Cp= [A](n) = Cp [A](n)
Cp= [A](n) Cp [A](n) e uma consequencia da observacao que
{desemp[A](d) | d D, tam(d) = n} {desemp[A](d) | d D, tam(d) n}
Analogamente, se A B tem-se que max A max B.
Exemplo 2.1
Vamos aplicar essas noc
oes num exemplo de um algoritmo simples. Queremos
e decidir se uma sequencia de n
umeros naturais contem o n
umero 1.
34
custo : E R+ : e 7 |e|.
Por exemplo custo((f or, f or, if, return)) = 4. As entradas desse algoritmo sao
sequencias de n
umeros naturais, logo, D = N e como tamanho da entrada
escolhemos
tam : D N : (a1 , . . . , an ) 7 n.
A func
ao de execuc
ao atribui a sequencia de operac
oes executadas a qualquer
entrada. Temos
exec[Busca1](d) : D E :
(
(f or, if )i return
(a1 , . . . , an ) 7
(f or, if )n return
35
2. An
alise de complexidade
1. Atribuic
ao: v:=e
2. Sequencia: c1;c2
3. Condicional: se b ent
ao c1 sen
ao c2
4. Iterac
ao definida: para i de j ate m faca c
5. Iterac
ao indefinida: enquanto b faca c
A forma se b ent
ao c1 vamos tratar como abreviacao de se b entao c1 senao skip
com comando skip de custo 0.
Observe que a metodologia n
ao implica que tem um algoritmo que, dado um
algoritmo como entrada, computa a complexidade dele. Este problema nao e
comput
avel (por que?).
Conven
c
ao 2.1
A seguir vamos entender implicitamente todas operacoes sobre funcoes pontualmente, i.e. para alguma operac
ao , e funcoes f, g com dom(f ) = dom(g)
temos
d dom(f ) (f g) = f (d) g(d).
Componentes
A complexidade de um algoritmo pode ser analisada em termos de suas
componentes (princpio de composicionalidade).
Pode-se diferenciar dois tipos de componentes: componentes conjuntivas
e componentes disjuntivas.
Objetivo: Analisar as componentes independentemente (como sub-algoritmos)
e depois compor as complexidades delas.
Composic
ao de componentes
Cuidado: Na composic
ao de componentes o tamanho da entrada pode
mudar.
Exemplo: Suponha que um algoritmo A produz, a partir de uma lista
de tamanho n, uma lista de tamanho n2 em tempo (n2 ).
/A
/ n2
/A
/ n4
n
A sequencia A; A, mesmo sendo composta pelos dois algoritmos com
(n2 ) individualmente, tem complexidade (n4 ).
36
Exemplo 2.2
Considere a sequencia S v := ordena(u); w := soma(u) com complexidades
cp [v := ordena(u)](n) = n2 e cp [w := soma(u)](n) = n. Entao cp [S] =
(n2 + n) = (n2 ).
37
2. An
alise de complexidade
Exemplo 2.3
Considere uma partic
ao das entradas do tamanho n tal que {d D | tam(d) =
.
n} = D1 (n) D2 (n) e dois algoritmos A1 e A2 , A1 precisa n passos para
inst
ancias em D1 , e n2 para inst
ancias em D2 . A2 , contrariamente, precisa n2
para inst
ancias em D1 , e n passos para inst
ancias em D2 . Com isso obtemos
cp [A1 ] = n2 ;
cp [A2 ] = n2 ;
cp [A1 ; A2 ] = n2 + n
e portanto
max(cp [A1 ], cp [A2 ]) = n2 < cp [A1 ; A2 ] = n2 + n < cp [A1 ] + cp [A2 ] = 2n2
A atribuic
ao: Exemplos
Considere os seguintes exemplos.
Inicializar ou atribuir vari
aveis tem complexidade O(1)
i := 0;
j := i
Calcular o m
aximo de n elementos tem complexidade O(n)
m := max(v)
Invers
ao de uma lista u e atribuic
ao para w tem complexidade 2n O(n)
w := reversa(u)
A atribuic
ao
Logo, a atribuic
ao depende dos custos para a avaliacao do lado direito
e da atribuic
ao, i.e.
desemp[v := e] = desemp[e] + desemp[e ]
Ela se comporta como uma sequencia desses dois componentes:
cp [v := e] = (cp [e] + cp [e ])
Freq
uentemente cp [e ] e absorvida pelo cp [e] e temos
cp [v := e] = (cp [e])
38
Iterac
ao definida
Seja C =para i de j ate m faca c
O n
umero de iterac
oes e fixo, mas j e m dependem da entrada d.
Seja N (n) = maxd {m(d)j(d)+1 | tam(d) n} e N (n) = max{N (n), 0}.
N (n) e o m
aximo de iterac
oes para entradas de tamanho ate n.
Tendo N , podemos tratar a iterac
ao definida como uma sequencia
c; c; ; c
| {z }
N (n) vezes
que resulta em
cp [C] N cp [c]
Iterac
ao indefinida
Seja C =enquanto b faca c
Para determinar a complexidade temos que saber o n
umero de iteracoes.
Seja H(d) o n
umero da iterac
ao (a partir de 1) em que a condicao e falsa
pela primeira vez
e h(n) = max{H(d) | tam(d) n} o n
umero maximo de iteracoes com
entradas ate tamanho n.
Em analogia com a iterac
ao definida temos uma sequencia
b; c; b; c; ; b; c; b
|
{z
}
h(n)1 vezes
e portanto
cp [C] (h 1)cp [c] + hcp [b]
Caso o teste b e absorvido pelo escopo c temos
cp [C] (h 1)cp [c]
Observe que pode ser difcil determinar o n
umero de iteracoes H(d); em geral
a quest
ao n
ao e decidvel.
39
2. An
alise de complexidade
Componentes disjuntivas
Componentes disjuntivas
Suponha um algoritmo c que consiste em duas componentes disjuntivas
c1 e c2 . Logo,
desemp[c] max(desemp[c1 ], desemp[c2 ])
e temos
cp [A] max(cp [c1 ], cp [c2 ])
Caso a express
ao para o m
aximo de duas funcoes for difcil, podemos simplificar
cp [A] max(cp [c1 ], cp [c2 ]) = O(max(cp [c1 ], cp [c2 ])).
O condicional
Seja C =se b ent
ao c1 sen
ao c2
O condicional consiste em
uma avaliac
ao da condic
ao b
uma avaliac
ao do comando c1 ou c2 (componentes disjuntivas).
Aplicando as regras para componentes conjuntivas e disjuntivas obtemos
cp [C] cp [b] + max(cp [c1 ], cp [c2 ])
Para se b ent
ao c1 obtemos com cp [skip] = 0
cp [C] cp [b] + cp [c1 ]
Exemplo 2.5
Considere um algoritmo a que, dependendo do primeiro elemento de uma lista
u, ordena a lista ou determina seu somat
orio:
Exemplo
1
2
3
4
s e hd(u) = 0 e n t
ao
v := ordena(u)
sen
ao
s := soma(u)
40
2.2.2. Exemplos
Exemplo 2.6 (Bubblesort)
Nesse exemplo vamos estudar o algoritmo Bubblesort de ordenacao.
Bubblesort
Bubblesort: Complexidade
A medida comum para algoritmos de ordenacao: o n
umero de comparac
oes (de chaves).
41
2. An
alise de complexidade
Qual a complexidade pessimista?
X
X
1 = n(n 1)/2.
1in 1jni
2in
42
Algoritmo 2.4 (M
aximo)
Entrada Uma sequencia de n
umeros a1 , . . . , an com n > 0.
Sada O m
aximo m = maxi ai .
1 m := a1
2 f o r i := 2, . . . , n do
3
i f ai > m then
4
m := ai
5
end i f
6 end f o r
7 return m
Para a an
alise supomos que toda operac
ao b
asica (atribuicao, comparacao,
aritmetica) tem um custo constante. Podemos obter uma cota superior simples
de O(n) observando que o laco sempre executa um n
umero fixo de operacoes
(ao m
aximo dois no corpo). Para uma an
alise mais detalhada vamos denotar
o custo em n
umeros de operac
oes de cada linha como li e supomos que toda
operac
ao b
asico custa 1 e a linha 2 do laco custa dois (l2 = 2, para fazer um
teste e um incremento), ent
ao temos
l1 + (n 1)(l2 + l3 ) + kl4 + l7 = 3n + k 1
com um n
umero de execuc
oes da linha 4 ainda n
ao conhecido k. No melhor
caso temos k = 0 e custos de 3n 1. No pior caso m = n 1 e custos de
f
4n 2. E
acil ver que assintoticamente todos os casos, inclusive o caso medio,
tem custo (n).
43
2. An
alise de complexidade
Busca seq
uencial
Fora do laco nas linhas 15 temos uma contribuicao constante.
Caso a sequencia n
ao contem a chave c, temos que fazer n iteracoes.
Logo temos complexidade pessimista (n).
Counting-Sort
44
f o r i := 1, . . . , k do
ci := 0
end f o r
f o r i := 1, . . . , n do
cai := cai + 1
end f o r
f o r i := 2, . . . , k do
8
9
10
11
12
13
14
ci := ci + ci1
end f o r
f o r i := n, . . . , 1 do
bcai := ai
cai := cai 1
end f o r
return b1 , . . . , bn
Loteria Esportiva
Busca Bin
aria
45
2. An
alise de complexidade
i := 1
f := nj
m :=
f i
2
+i
while i f do
i f am = x then return m
i f am < x then f := m 1
e l s e ji :=km + 1
m :=
f i
2
+i
9 end while
10 return 1
A busca bin
aria e usada para encontrar um dado elemento numa sequencia
ordenada de n
umeros com gaps. Ex: 3,4,7,12,14,18,27,31,32...n. Se os n
umeros
n
ao estiverem ordenados um algoritmo linear resolveria o problema, e no caso
de n
umeros ordenados e sem gaps (nenhum n
umero faltante na sequencia, um
algoritmo constante pode resolver o problema. No caso da busca binaria, o
pior caso acontece quando o u
ltimo elemento que for analisado e o procurado.
Neste caso a sequencia de dados e dividida pela metade ate o termino da
busca, ou seja, no m
aximo log2 n = x vezes, ou seja 2x = n. Neste caso
X
Cp [A] =
c = O(log2 n)
1ilog2 n
X
1jn
46
aij bjk
1 i m; 1 k o.
2.3. Complexidade m
edia
Nesse captulo, vamos estudar algumas tecnicas de analise da complexidade
media.
Motivac
ao
A complexidade pessimista e pessimista demais?
Imagin
avel: poucas inst
ancias representam o pior caso de um algoritmo.
Isso motiva a estudar a complexidade media.
Para tamanho n, vamos considerar
O espaco amostral Dn = {d D | tam(d) = n}
Uma distribuic
ao de probabilidade Pr sobre Dn
1 Tamb
em
47
2. An
alise de complexidade
A vari
avel aleat
oria desemp[A]
O custo medio
Cm [A](n) = E[desemp[A]] =
P (d) desemp[A](d)
dDn
Tratabilidade?
Possibilidade: Problemas intrat
aveis viram trataveis?
Exemplos de tempo esperado:
Caminho Hamiltoniano: linear!
o-determinstico em k passos: fica NP-completo.
Parada na
(Resultados citados: [33, 20] (Caminho Hamiltanio), [70] (Parada em k passos).)
Criptografia
Alguns metodos da Criptografia dependem da existencia de funcoes
sem volta (ingles: one-way functions).
Uma funcao sem volta f : {0, 1} {0, 1} e tal que
dado x, computar f (x) e f
acil (eficiente)
dada f (x) achar um x0 tal que f (x0 ) = f (x) e difcil
M
etodo
[69]
48
iterac
oes e uma complexidade media de (n).
Exemplo 2.13
(Continuando o exemplo 2.1.)
Neste exemplo vamos analisar o algoritmo considerando que a ocorrencia dos
n
umeros siga uma outra distribuic
ao que n
ao a uniforme. Ainda, considere o
caso em que n
ao h
a n
umeros repetidos no conjunto. Seja n um tamanho fixo.
Para Busca1 temos o espaco amostral Dn = {(a1 , . . . , an ) | a1 1, . . . , an
1}. Supomos que os n
umeros sigam uma distribuic
ao na qual cada elemento da
sequencia e gerado independentemente
com
a
probabilidade
Pr[ai = n] = 2n
P
i
(que e possvel porque 1i 2 = 1).
Com isso temos
Y
Pr[(a1 , . . . , an )] =
2ai
1in
49
2. An
alise de complexidade
A complexidade media calcula-se como
cp [A](n) = E[desemp[A]] = E[2p + 1] = 2E[p] + 1
X
X
E[p] =
Pr[p = i]i = 2n n +
2n n
i0
n
=2
1in
n
n+22
cp [A](n) = 5 2
2n
(n + 2) = 2 21n
(A.39)
= O(1)
j/i = (i + 1)/2
1ji
comparac
oes em media.
Logo o n
umero esperado de comparac
oes e
X
X
(i + 1)/2 = 1/2
i = 1/2 ((n + 1)(n + 2)/2 3) = (n2 )
2in
3in+1
50
2.5x104
Quantidade
2.0x104
1.5x104
1.0x10
5.0x103
10
15
20
25
30
35
Nmero de transposies
Exemplos
tal que
Permutaca
o
123
132
213
231
312
321
ai > aj .
#Invers
oes
0
1
1
2
2
3
51
2. An
alise de complexidade
Freq
uentemente o n
umero de invers
oes facilita a analise de algoritmos
de ordenac
ao.
Em particular para algoritmos com transposicoes de elementos adjacentes:
#Transposic
oes = # Inversoes
N
umero m
edio de transposic
oes
Considere o conjunto de todas permutacoes Sn sobre [1, n].
Denota-se por inv() o n
umero de inversoes de uma permutacao.
Para cada permutac
ao existe uma permutacao correspondente com
ordem inversa:
35124;
42153
Cada invers
ao em n
ao e invers
ao em e vice versa:
inv() + inv( ) = n(n 1)/2.
N
umero m
edio de transposic
oes
O n
umero medio de invers
oes e
!
1/n!
inv() = 1/(2n!)
Sn
inv() +
Sn
Sn
inv()
!
= 1/(2n!)
Sn
inv() +
inv( )
Sn
!
= 1/(2n!)
n(n 1)/2
Sn
= n(n 1)/4
Logo, a complexidade media (de transposicoes) e (n2 ).
Exemplo 2.16 (M
aximo)
(Continuando exemplo 2.8.)
Queremos analisar o n
umero medio de atribuicoes no calculo do maximo, i.e.
o n
umero de atualizac
oes do m
aximo.
52
b1
2
b2
3
b3
1
b4
1
b5
0
Os bi obedecem 0 bi n i.
Tabelas de invers
oes
Observac
ao: Cada tabela de invers
oes corresponde a uma permutacao e
vice versa.
Exemplo: A permutac
ao correspondente com
b1
3
b2
1
b3
2
b4
1
b5
0
Vantagem para a an
alise: Podemos escolher os bi independentemente.
Observac
ao, na busca do m
aximo i e m
aximo local se todos n
umeros no
seu esquerdo s
ao menores, i.e. se todos n
umeros que sao maiores sao no
seu direito, i.e. se bi = 0.
N
umero esperado de atualizac
oes
Seja Xi a vari
avel aleat
oria Xi = [i e m
aximo local].
Temos Pr[Xi = 1] = Pr[bi = 0] = 1/(n i + 1).
P
O n
umero de m
aximos locais e X = 1in Xi .
Portanto, o n
umero esperado de m
aximos locais e
X
X
E[X] = E
Xi =
E[Xi ]
1in
X
1in
Pr[Xi ] =
1in
X
1in
X 1
1
=
= Hn
ni+1
i
1in
Contando atualizac
oes: tem uma a menos que os maximos locais Hn 1.
53
2. An
alise de complexidade
Particionar
54
e s c o l h e um p i v o
ap
t r o c a ap e ar
i := l 1 { u
ltimo ndice menor que piv
o }
f o r j := l t o r 1 do
i f aj ar then
i := i +1
t r o c a ai e aj
end i f
end f o r
t r o c a ai+1 e ar
return i + 1
O tamanho da entrada e n = r l + 1
Dependendo da escolha do piv
o: precisa nenhuma ou uma comparacao.
O laco nas linhas 49 tem n 1 iterac
oes.
O trabalho no corpo do laco e 1 = (1) (uma comparacao)
Portanto temos a complexidade pessimista
cp [Partition] = n 1 = (n)
cp [Partition] = n 1 + 1 = n = (n)
(Primeiro elemento)
(Maior de dois).
Quicksort
55
2. An
alise de complexidade
1 i f l < r then
2
m := P a r t i t i o n ( l , r , a ) ;
3
Quicksort (l ,m 1 ,a ) ;
4
Quicksort (m + 1 ,r ,a ) ;
5 end i f
se l r
Complexidade pessimista
Qual a complexidade pessimista?
Para entrada d = (a1 , . . . , an ), sejam dl = (al , . . . , am1 ) e dr = (am+1 , . . . , ar )
cp [QS](n) = max desemp[P ](d) + desemp[QS](dl ) + desemp[QS](dr )
dDn
cp [QS](0) = cp [QS](1) = 0
Esse an
alise e v
alida para escolha do maior entre os dois primeiros elementos
como piv
o. Tambem vamos
ltimo passo na analise acima com
S justificar o u
mais detalhes. Seja Dn = i Dni uma partic
ao das entradas com tamanho n
tal que para d Dni temos |dl |= i 1 (e conseq
uentemente |dr |= n i).
Ent
ao
max desemp[QS](dl ) + desemp[QS](dr )
dDn
56
separando Dn
Caso i = n/2
cp [QS](n) = n + 2cp [QS](n/2) = n 1 + 2((n 1)/2 + cp (n/4))
= = (n log2 n)
Logo, no pior caso, Quicksort precisa (n2 ) comparacoes.
No caso bem balanceado: (n log2 n) comparacoes.
Complexidade m
edia
Seja X a vari
avel aleat
oria que denota a posic
ao (ingles: rank) do pivo
am na sequencia.
Vamos supor que todos elementos ai s
ao diferentes (e, sem perda da
generalidade, uma permutac
ao de [1, n]).
cm [QS](n) =
Pr[d] desemp[QS](d)
dDn
dDn
=n+
Pr[d](desemp[QS](dl ) + desemp[QS](dr ))
dDn
=n+
1in
57
2. An
alise de complexidade
Novamente, o u
ltimo passo e o mais difcil de justificar. A mesma particao
que aplicamos acima leva a
X
Pr[d](desemp[QS](dl ) + desemp[QS](dr ))
dDn
X X
Pr[d](desemp[QS](dl ) + desemp[QS](dr ))
i
1in dDn
X
1in
dDn
|Dni |
X
1in
1 X
(desemp[QS](dl ) + desemp[QS](dr ))
|D|
i
|D|
1in
e o pen
ultimo passo e correto, porque a media do desempenho sobre as permutac
oes dl e dr e a mesma que sobre as permutacoes com i 1 e n i
elementos: toda permutac
ao ocorre com a mesma probabilidade e o mesmo
n
umero de vezes (Knuth [43, p. 119] tem mais detalhes).
Se denotamos o desempenho com Tn = cm [QS](n), obtemos a recorrencia
Tn = n +
1in
Ti
0i<n
para an
alise que todos elementos s
ao diferentes. Um algoritmo pr
atico tem que
considerar o caso que um ou mais elementos s
ao iguais [64, p. 72].
58
Tn = n + 2/(n(n 1))
(i 1) (Ti1 + Tni )
1in
= n + 2/(n(n 1))
i (Ti + Tni1 )
0i<n
= n + 2/(n(n 1))
iTi +
0i<n
= n + 2/(n(n 1))
X
0i<n
= n + 2/n
iTni1
0i<n
iTi +
(n i 1)Ti
0i<n
Ti
0i<n
Recorr
encia
A soluc
ao final depende da escolha do piv
o.
Dois exemplos
Escolhe o primeiro elemento: Pr[X = i] = 1/n.
Escolhe o maior dos primeiros dois elementos diferentes: Pr[X =
i] = 2(i 1)/(n(n 1)).
Denota Tn = cm [QS](n)
Ambas soluc
oes chegam (quase) na mesma equacao recorrente
X
Tn = n + 2/n
Ti
0i<n
Exemplo 2.18
Vamos determinar a probabilidade de escolher o piv
o Pr[X = i] no caso n = 3
explicitamente, se o maior dos dois primeiros elementos e o pivo:
Permutac
ao
123
132
213
231
312
321
Piv
o
2
3
2
3
3
3
59
2. An
alise de complexidade
Logo temos as probabilidades
Piv
oi
Pr[X = i]
1
0
2
1/3
3
2/3
Resolver a equac
ao
A soluc
ao da recorrencia
X
Tn = n + 1 + 2/n
Ti
0i<n
e Tn = (n ln n).
Logo, em ambos casos temos a complexidade media de (n ln n).
Tn = n + 1 + 2/n
Ti
para n > 0
0i<n
nTn = n2 + n + 2
Ti
0i<n
a mesmo equac
ao para n 1 e
(n 1)Tn1 = (n 1)2 + n 1 + 2
Ti
para n > 1
0i<n1
nTn = (n + 1)Tn1 + 2n
multiplicando por 2/(n(n + 1))
2
4
2
Tn = Tn1 +
n+1
n
n+1
60
X
2
4
=
n+1
i+1
1in
e portanto
X
Tn = 2(n + 1)
1in
= 2(n + 1)(Hn
1
i+1
n
)
n+1
= (n ln n)
Busca em Largura
ds := 0
du = , u V {s}
Q :=
Enqueue(Q, s)
while Q 6=
u := Dequeue(Q)
61
2. An
alise de complexidade
7
f o r cada v N (u)
8
i f dv = then
9
dv = du + 1
10
Enqueue(Q, v)
11
end i f
12
end f o r
13 end while
Uma an
alise simples observa que o laco while nas linhas 713 executa no
m
aximo |V | iterac
oes, uma para cada n
o do grafo. O laco for interior nas
linhas 712 executa du iterac
oes, sendo du o grau do no u. No caso pessimista
du = |V | 1, portanto esta an
alise resulta numa complexidade pessimista
O(|V |2 ), supondo que Enqueue e Dequeue tem complexidade O(1).
Uma an
alise agregada sepera a an
alise do laco exterior, que tem complexidade
pessimista O(|V |), da an
alise do laco interior. O laco P
interior, tem, agregado
sobre todas iterac
oes do laco exterior, complexidade uV du 2|E|. Portanto essa an
alise resulta numa complexidade pessimista O(|V | + |E|).
Exemplo 2.20
62
ds := 0; dv := , v V \ {s}
visited(v) := false, v V
Q :=
insert(Q, (s, 0))
while Q 6= do
v := deletemin(Q)
visited(v) := true
f o r u N + (v) do
i f not visited(u) then
i f du = then
11
12
13
14
15
16
17
18
19
du := dv + dvu
insert(Q, (u, du ))
e l s e i f dv + dvu < du
du := dv + dvu
update(Q, (u, du ))
end i f
end i f
end f o r
end while
63
2. An
alise de complexidade
Com isso temos dui v < minj:j<i duj v , i.e., dui v e um mnimo local na sequencia
dos pesos dos k arcos. Pela an
alise no exemplo 2.16 sabemos que o n
umero
esperado de m
aximos locais de permutac
ao aleatoria e Hk 1 ln k e considerando as permutac
oes inversas, temos o mesmo n
umero de mnimos locais.
Como k (v) temos um limite superior para o n
umero de operacoes update
em todos vertices de
X
X
X
ln (v) = n
(1/n) ln (v) n ln
(1/n) (v) = n ln m/n.
vV
vV
vV
|11 {z
p bits um
q bits um
|00 {z
0
64
Resumindo: Dado um P
serie de operac
oes com custos c1 , . . . , cn o custo amortizado dessa operac
ao e 1in ci /n. Se temos m operacoes diferentes,
o custo
P
amortizado da operac
ao que ocorre nos ndices J [1, m] e iJ ci /|J|.
As somas podem ser difceis de avaliar diretamente. Um metodo para simplificar o c
alculo do custo amortizado e o metodo potencial. Acha uma func
ao
potencial que atribui cada estrutura de dados antes da operacao i um valor n
ao-negativo i 0 e normaliza ela tal que 1 = 0. Atribui um custo
amortizado
ai = ci i + i+1
a cada operac
ao. A soma dos custos n
ao ultrapassa os custos originais, porque
X
X
X
X
ai =
ci i + i+1 = n+1 1 +
ci
ci
Portanto,
ao J [1, m] o custo amorP podemos atribuir a cada tipo de operac
tizado iJ ai /|J|. Em particular, se cada operac
ao individual i J tem
custo amortizado ai F , o custo amortizado desse tipo de operacao e F .
Exemplo 2.22
Queremos implementar uma tabela din
amica para um n
umero desconhecido
de elementos. Uma estrategia e reserver espaco para n elementos, manter a
u
ltima posic
ao livre p, e caso p > n alocara uma nova tabela de tamanho
maior. Uma implementac
ao dessa ideia e
1
2
3
4
5
6
7
8
i n s e r t ( x):=
i f p > n then
a l o c a nova t a b e l a de tamanho t = max{2n, 1}
c o p i a o s e l e m e n t o s xi , 1 i < p para nova t a b e l a
n := t
end i f
xp := x
p := p + 1
com valores iniciais n := 0 e p := 0. O custo de insert e O(1) caso existe ainda
espaco na tabela, mas O(n) no pior caso.
Uma an
alise amortizada mostra que a complexidade amortizada de uma operacao
e O(1). Seja Cn o custo das linhas 35 e D o custo das linhas 78. Escolhe a
65
2. An
alise de complexidade
func
ao potencial (n) = 2Cp Dn. A func
ao e satisfaz os criterios de um
potencial, porque p n/2, e inicialmente temos (0) = 0. Com isso o custo
amortizado caso tem espaco na tabela e
ai = ci (i 1) + (i)
= D (2C(p 1) Dn) + (2Cp Dn) = C + 2C = O(1).
Caso temos que alocar uma nova tabela o custo e
ai = ci (i 1) + (i) = D + Cn (2C(p 1) Dn) + (2Cp 2Dn)
= C + Dn + 2C Dn = O(1).
2.5. Notas
O algoritmo 2.9 para multiplicac
ao de matrizes nao e o melhor possvel: Temos o algoritmo de Strassen que precisa somente nlog2 7 n2.807 multiplicacoes
(o algoritmo est
a detalhado no captulo 6.3) e o algoritmo de CoppersmithWinograd com n2.376 multiplicac
oes [14]. Ambas sao pouco usadas na pratica
porque o desempenho real e melhor somente para n grande (no caso de Strassen n 700; no caso de Coppersmith-Winograd o algoritmo nao e praticavel).
A conjetura atual e que existe um algoritmo (otimo) de O(n2 ).
2.6. Exerccios
(Soluc
oes a partir da p
agina 312.)
Exerccio 2.1
Qual a complexidade pessimista dos seguintes algoritmos?
66
2.6. Exerccios
67
2. An
alise de complexidade
Exerccio 2.2
Tentando resolver a recorrencia
Tn = n 1 + 2/n
Ti
0i<n
que ocorre na an
alise do Quicksort (veja exemplo 2.17), o aluno J. Rapidez
chegou no seguinte resultado: Supondo que Tn = O(n) obtemos
X
Tn = n 1 + 2/n
O(i)
0i<n
i6C
68
2.6. Exerccios
Exerccio 2.5
Qual o n
umero medio de atualizac
oes no algoritmo
1 s := 0
2 for i = 1, . . . , n do
3
i f i > bn/2c then
4
s := s+i
5
end i f
6 end for
Exerccio 2.6
Qual o n
umero medio de atualizac
oes k := k + 1, supondo que todo valor em
cada posic
ao da sequencia tem a mesma probabilidade? Qual o n
umero medio
com a distribuic
ao P [1] = 1/2, P [2] = P [3] = P [4] = P [5] = P [6] = 1/10?
Exerccio 2.7
Suponha um conjunto de chaves numa
arvore bin
aria completa de k nveis e
suponha uma busca bin
aria tal que cada chave da
arvore esta buscada com
a mesma probabilidade (em particular n
ao vamos considerar o caso que uma
chave buscada n
ao pertence `
a
arvore.). Tanto n
os quanto folhas contem chaves.
Qual o n
umero medio de comparac
oes numa busca?
Exerccio 2.8
Usando a tecnica para resolver a recorrencia (veja p. 60)
X
Tn = n + 1 + 2/n
Ti
0i<n
69
2. An
alise de complexidade
resolve as recorrencias
Tn = n + 2/n
Ti
0i<n
Tn = n 1 + 2/n
Ti
0i<n
explicitamente.
Exerccio 2.9
Considere a seguinte implementac
ao de uma fila usando duas pilhas. Uma
pilha serve como pilha de entrada: um novo elemento sempre e inserido no
topo dessa pilha. Outra pilha serve como pilha da sada: caso queremos
remover um elemento da fila, removemos o topo da pilha de sada. Caso a
pilha de sada e vaiza, copiamos toda pilha de entrada para pilha de sada,
elemento por elemento. (Observe que desta forma os elementos ficam na ordem
reversa na pilha de sada).
1. Qual e a complexidade pessimista das operacoes enqueue (inserir um
elemento a fila) e dequeue (remover um elemento da fila)?
2. Mostra que a complexidade amortizada de cada operacao e O(1).
70
Parte II.
Projeto de algoritmos
71
3. Introduc
ao
Resolver problemas
Modelar o problema
Simplificar e abstrair
Comparar com problemas conhecidos
Inventar um novo algoritmo
Ganhar experiencia com exemplos
Aplicar ou variar tecnicas conhecidas (mais comum)
Resolver problemas
Provar a corretude do algoritmo
Testar s
o n
ao vale
Pode ser informal
Analisar a complexidade
Aplicar e validar
Implementar, testar e verificar
Adaptar ao problema real
Avaliar o desempenho
73
4. Algoritmos gulosos
Radix omnium malorum est cupiditas.
(Seneca)
4.1. Introduc
ao
(Veja [64, cap. 5.1.3].)
Algoritmos gulosos
Algoritmos gulosos se aplicam a problemas de otimizacao.
Ideia principal: Decide localmente.
Um algoritmo guloso constr
oi uma soluc
ao de um problema
Comeca com uma soluc
ao inicial.
Melhora essa soluc
ao com uma decis
ao local (gulosamente!).
Nunca revisa uma decis
ao.
Por causa da localidade: Algoritmos gulosos freq
uentemente sao apropriados para processamento online.
Trocar moedas
Troca mnima
Inst
ancia Valores (de moedas ou notas) v1 > v2 > > vn = 1, uma
soma s.
P
Soluc
ao N
umeros c1 , . . . , cn tal que s = 1in ci vi
P
Objetivo Minimizar o n
umero de unidades 1in ci .
75
4. Algoritmos gulosos
A abordagem gulosa
1 fo r
2
ci
3
s
4 end
i:=1, . . . , n do
:= bs/vi c
:= s ci vi
for
Exemplo
Exemplo 4.1
Com v1 = 500, v2 = 100, v3 = 25, v4 = 10, v5 = 1 e s = 3.14, obtemos
c1 = 0, c2 = 3, c3 = 0, c4 = 1, c5 = 4.
Com v1 = 300, v2 = 157, v3 = 1, obtemos v1 = 1, v2 = 0, v3 = 14.
No segundo exemplo, existe uma soluc
ao melhor: v1 = 0, v2 = 2, v3 = 0.
No primeiro exemplo, parece que a abordagem gulosa acha a melhor solucao.
Qual a diferenca?
Uma condic
ao simples e que todos valores maiores sao m
ultiplos inteiros dos
menores; essa condic
ao n
ao e necess
aria, porque o algoritmo guloso tambem
acha soluc
oes para outros sistemas de moedas, por exemplo no primeiro sistema do exemplo acima.
Lema 4.1
A soluc
ao do algoritmo guloso e a u
nica que satisfaz
X
ci vi < vm1
i[m,n]
76
4.1. Introducao
que pode causar um aumento de unidades em total). Logo ci fi1 1 e
temos
X
X
ci vi
(fi1 1)vi
i[m,n]
i[m,n]
fi1 vi
i[m,n]
X
i[m,n]
vi
i[m,n]
vi1
vi
i[m,n]
4.2
caminhos (simples) em grafos. O caminho mais curto v1 v2 . . . vn
vertices v1 e vn tem subestrutura
otima, porque um subcaminho
mais curto (sen
ao seria possvel de obter um caminho ainda mais
77
4. Algoritmos gulosos
Do outro lado, o caminho mais longo entre dois vertices v1 . . . vn nao tem
subestrutura
otima: o subcaminho v2 . . . vn , por exemplo, nao precisa ser o
caminho mais longo. Por exemplo no grafo
1
j
i//
//
//
//
/
1
1 //
//
//
k
o caminho mais longo entre i e j e ikj, mas o subcaminho kj nao e o subcaminho mais longo entre k e j.
r e s o l v e ( I ):=
S := n i l
{ melhor solu
c
ao }
f o r t o d o s subproblemas I 0 de I do
S 0 := r e s o l v e ( I 0 )
e s t e n d e S 0 para uma s o l u c a o S de I
i f S 0 e a melhor s o l u c
a o then
S := S
end i f
end f o r
leva a soluc
ao
otima atraves de uma regra simples. Portanto, o algoritmo
guloso evite resolver todos subproblemas.
78
4.2.1. Arvores
espalhadas mnimas
Motivac
ao
Pontes para Polin
esia Francesa!
Arvores
espalhadas mnimas (AEM)
Arvore
espalhada mnima (AEM)
Inst
ancia Grafo conexo n
ao-direcionado G = (V, E), pesos c : E R+ .
Soluc
ao Um subgrafo H = (VH , EH ) conexo.
P
Objetivo Minimiza os custos eEH c(e).
Um subgrafo conexo com custo mnimo deve ser uma arvore (por que?).
Grafo n
ao conexo: Busca uma
arvore em todo componente (floresta
mnima).
79
4. Algoritmos gulosos
Aplicac
oes
Redes eletricas
Sistemas de estradas
Pipelines
Caixeiro viajante
Linhas telef
onicas alugadas
Resolver AEM
O n
umero de
arvores espalhadas pode ser exponencial.
Como achar uma soluc
ao
otima?
Observac
ao importante
Lema 4.2 (Corte)
Considere um corte V = S V \ S (com S 6= , V \ S 6= ). O arco
mnimo entre S e V \ S faz parte de qualquer AEM.
Prova. Na prova vamos supor, que todos pesos sao diferentes.
Suponha um corte S tal que o arco mnimo e = {u, v} entre S e V \ S nao faz
parte de um AEM T . Em T existe um caminho de u para v que contem ao
menos um arco e0 que cruza o corte. Nossa afirmacao: Podemos substituir e0
com e, em contradic
ao com a minimalidade do T .
Prova da afirmac
ao: Se substituirmos e0 por e obtemos um grafo T 0 . Como e
e mnimo, ele custa menos. O novo grafo e conexo, porque para cada par de
n
os ou temos um caminho j
a em T que n
ao faz uso de e0 ou podemos obter, a
0
partir de um caminho em T que usa e um novo caminho que usa um desvio
sobre e. Isso sempre e possvel, porque h
a um caminho entre u e v sem e, com
dois sub-caminhos de u para u0 e de v 0 para v, ambos sem usar e0 . O novo
grafo tambem e uma
arvore, porque ele n
ao contem um ciclo. O u
nico ciclo
possvel e o caminho entre u e v em T com o arco e, porque T e uma arvore.
80
Resolver AEM
A caracterstica do corte possibilita dois algoritmos simples:
1. Comeca com algum n
o e repetidamente adicione o no ainda nao
alcanc
avel com o arco de custo mnimo de algum no ja alcancavel:
algoritmo de Prim.
2. Comeca sem arcos, e repetidamente adicione o arco com custo
mnimo que n
ao produz um ciclo: algoritmo de Kruskal.
81
4. Algoritmos gulosos
1 V 0 := {v} para um v V
2 ET :=
3 while V 0 6= V do
4
e s c o l h e e = {u, v} com c u s t o mnimo
5
e n t r e V 0 e V \ V 0 ( com u V 0 )
0
6
V := V 0 {v}
7
ET := ET {e}
8 end while
ET :=
while (V, ET ) n
a o e conexo do
e s c o l h a e com c u s t o mnimo que n
a o produz c c l o
ET := ET {e}
end while
Exemplo 4.3
Resultado dos algoritmos de Prim e Kruskal para Polinesia Francesa:
O mesmo!
82
ET :=
Q := {((v, u), c(v, u)) | u N (v)} { n
o s alcanc
a veis }
Q := Q {((u, u), ) | u V \ N (v) \ {v}} { n
o s restantes }
while Q 6= do
((u, v), c) := Q. min() { (u, v)
e arco mnimo }
f o r w N (v) do
Q.atualiza((v, w), c(v, w))
end f o r
ET := ET {{u, v}}
end while
83
4. Algoritmos gulosos
Algoritmo de Prim
Complexidade do algoritmo com o refinamento acima:
O laco 49 precisa n 1 iterac
oes.
O laco 68 precisa no total menos que m iteracoes.
cp [AEM-Prim] = O(n log n + m log n) = O(m log n)
Uma implementac
ao do algoritmo de Kruskal em tempo O(m log n) tambem
e possvel. Para esta implementac
ao e necessario de manter conjuntos que
representam n
os conectados de maneira eficiente. Isso leva a uma estrutura
de dados conhecida como Union-Find que tem as operacoes
C := cria(e): cria um conjunto com u
nico elemento e.
uni
ao(C1 , C2 ): junta os conjuntos C1 e C2 .
C := busca(e): retorna o conjunto do elemento e.
Essas operac
oes podem ser implementados em tempo O(1), O(1) e O(log n)
(para n elementos) respectivamente.
4.2.2. Caminhos mais curtos
Caminhos mais curtos
Problema freq
uente: Encontra caminhos mais curtos em um grafo.
Variac
oes: Caminho mais curto
entre dois n
os.
entre um n
o e todos outros (ingles: single-source shortest paths,
SSSP).
entre todas pares (ingles: all pairs shortest paths, APSP).
Caminhos mais curtos
Caminhos mais curtos
Inst
ancia Um grafo direcionado G = ({v1 , . . . , vn }, E) com funcao de
custos c : E R+ e um n
o inicial s V .
Soluc
ao Uma atribuic
ao d : V R+ da distancia do caminho mais curto
d(t) de s para t.
84
Como resolver?
Qual seria uma boa estrategia gulosa para resolver o problema?
Sempre selecionada o intervalo que
que comeca mais cedo?
que termina mais cedo?
que comeca mais tarde?
que termina mais tarde?
mais curto?
tem menos conflitos?
85
4. Algoritmos gulosos
Implementac
ao
enciamento
Seja C = ([c1 , f1 ], . . . , [cn , fn ]) o resultado do algoritmo Sequ
0
de intervalos e O = ([c01 , f10 ], . . . , [c0m , fm
]) seq
uenciamento maximo, ambos
em ordem crescente.
Proposi
c
ao 4.2
Para todo 1 i n temos fi fi0 .
Prova. Como O e
otimo, temos n m. Prova por inducao. Base: Como o
algoritmo guloso escolhe o intervalo cujo terminacao e mnima, temos f1 f10 .
Passo: Seja fi fi0 com i < n. O algoritmo guloso vai escolher entre os intervalos que comecam depois fi o com terminacao mnima. O proximo intervalo
[c0i+1 , m0i+1 ] do seq
uenciamento
otimo est
a entre eles, porque ele comeca depois
fi0 e fi0 fi . Portanto, o pr
oximo intervalo escolhido pelo algoritmo guloso
0
0
termina antes de fi+1
, i.e. fi+1 fi+1
.
Proposi
c
ao 4.3
O seq
uenciamento do algoritmo guloso e
otimo.
Prova. Suponha que o algoritmo guloso retorna menos intervalos C que um
seq
uenciamento otimo O. Pela proposic
ao 4.2, o u
ltimo (n-esimo) intervalo do
C termina antes do u
ltimo intervalo de O. Como O tem mais intervalos, existe
mais um intervalo que poderia ser adicionado ao conjunto C pelo algoritmo
guloso, uma contradic
ao com o fato, que o algoritmo somente termina se nao
sobram intervalos compatveis.
86
Grafos de intervalo
Uma inst
ancia S de seq
uenciamento de intervalos define um grafo naodirecionado G = (V, E) com
V = S;
E = {{i1 , i2 } | i1 , i2 S, i1 i2 6= }
Grafos que podem ser obtidos pelo intervalos sao grafos de intervalo.
Um conjunto compatvel de intervalos corresponde com um conjunto
independente nesse grafo.
Portanto, resolvemos CIM para grafos de intervalo!
Sem restric
oes, CIM e NP-completo.
87
4. Algoritmos gulosos
Variac
ao do problema
enciamento de intervalos:
Considere uma variac
ao de Sequ
Particionamento de intervalos
Inst
ancia Um conjunto de intervalos S = {[ci , fi ], 1 i n}, cada com
comeco ci e fim fi tal que ci < fi .
Soluc
ao Uma atribuic
ao de r
otulos para intervalos tal que cada conjunto
de intervalos com a mesma r
otula e compatvel.
Objetivo Minimiza o n
umero de r
otulos diferentes.
Observac
ao
Uma superposic
ao de k intervalos implica uma cota inferior de k rotulos.
Seja d o maior n
umero de intervalos super-posicionados (a profundidade
do problema).
possvel atingir o mnimo d?
E
Algoritmo
88
4.4. Topicos
Corretude
Com profundidade d o algoritmo precisa ao menos d rotulos.
De fato ele precisa exatamente d r
otulos. Por q
ue?
Qual a complexidade dele?
Observac
oes: (i) Suponha que o algoritmo precise mais que d rotulos. Entao
existe um intervalo tal que todos n
umeros em [1, d] estao em uso pelo intervalos
conflitantes, uma contradic
ao com o fato que a profundidade e d. (ii) Depois da
ordenacao em O(n log n) a varredura pode ser implementada em O(n) passos.
Portanto a complexidade e O(n log n).
Colorac
ao de grafos
Considere o problema
o mnima
Colorac
a
Inst
ancia Um grafo n
ao-direcionado G = (V, E).
Soluc
ao Uma colorac
ao de G, i.e. uma atribuic
ao de cores c : V C tal
que c(v1 ) 6= c(v2 ) para {v1 , v2 } E.
Objetivo Minimiza o n
umero de cores |C|.
o
Particionamento de intervalos resolve o problema Colorac
a
mnima para grafos de intervalo.
o mnima para grafos sem restric
Colorac
a
oes e NP-completo.
4.4. T
opicos
Compress
ao de dados
Sequencia genetica (NM 005273.2, Homo sapiens guanine nucleotide binding protein)
GAT CCCT CCGCT CT GGGGAGGCAGCGCT GGCGGCGG . . .
com 1666bp1 .
1 bp
e a abreviac
ao do ingl
es base pair (par de bases)
89
4. Algoritmos gulosos
Como comprimir?
Com c
odigo fixo:
A = 00;
G = 01;
T = 10;
C = 11.
G
.30
T
.16
C
.36
C
odigos: Exemplos
Tentativa 1
T = 0;
G = 01;
A = 1;
C = 10
Desvantagem: Ambguo! 01 = T A ou 01 = G?
Tentativa 2
C = 0;
A = 110;
G = 10;
T = 111
90
4.4. Topicos
| BBB1B
|
|
|
~
C
0 ~~ >>>1
>
~~~
>
G
>>1
0
>
A
T
0
Cada c
odigo livre de prefixo pode ser representado usando uma arvore binaria:
Comecando com a raiz, o sub-
arvore da esquerda representa os codigos que
comecam com 0 e a sub-
arvore da direita representa os codigos que comecam
com 1. Esse processo continua em cada sub-
arvore considerando os demais
bits. Caso todos bits de um c
odigo foram considerados, a arvore termina nessa
posicao com uma folha para esse c
odigo.
Essas considerac
oes levam diretamente a um algoritmo. Na seguinte implementacao, vamos representar
arvores bin
arias como estrutura da dados abstrata que satisfaz
BinTree ::= Nil | Node(BinTree,Bintree)
uma folha sendo um n
o sem filhos. Vamos usar a abreviacao
Leaf ::= Node(Nil,Nil).
91
4. Algoritmos gulosos
Proposi
c
ao 4.4
O conjunto das folhas de cada
arvore bin
aria corresponde com um codigo livre
de prefixo.
Prova. Dado uma
arvore bin
aria com as folhas representando codigos, nenhum c
odigo pode ser prefixo de outro: sen
ao ocorreria como no interno.
Qual o melhor c
odigo?
A teoria de informac
ao (Shannon) fornece um limite.
A quantidade de informac
ao contido num smbolo que ocorre com freq
uencia
f e
log2 f ,
logo o n
umero medio de bits transmitidos (para um n
umero grande de
smbolos) e
X
H=
fi log2 fi .
H e um limite inferior para qualquer c
odigo.
Nem sempre e possvel atingir esse limite. Com
A = 1/3, B = 2/3;
H 0.92b
mas o c
odigo
otimo precisa ao menos 1b por smbolo.
Nosso exemplo: H 1.92.
@
@
@@1
@@1
0 ~ @@1
@
~
~
@
0 ~
@@1
~~
Observac
ao 2: Em uma soluc
ao
otima, os dois smbolos com menor
freq
uencia ocorrem como irm
aos no nvel mais alto. Logo: Podemos
substituir eles com um n
o cujo freq
uencia e a soma dos dois.
92
4.4. Topicos
B1
BBB
!
0
fi
?
??1
fj
II
II1
$
fi + fj
Algoritmo
Exemplo 4.4
Saccharomyces cerevisiae
Considere a sequencia genetica do Saccharomyces cerevisiae (ingles: bakers
yeast)
M SIT N GT SRSV SAM GHP AV ERY T P GHIV CV GT HKV EV V . . .
com 2900352bp. O alfabeto nessa caso s
ao os 20 amino-acidos
S = {A, C, D, E, F, G, H, I, K, L, M, N, P, Q, R, S, T, V, W, Y }
que ocorrem com as freq
uencias
A
0.055
M
0.021
C
0.013
N
0.061
D
0.058
P
0.043
E
0.065
Q
0.039
F
0.045
R
0.045
G
0.050
S
0.090
H
0.022
T
0.059
I
0.066
V
0.056
K
0.073
W
0.010
L
0.096
Y
0.034
93
4. Algoritmos gulosos
Resultados
O algoritmo Huffman resulta em
A
0010
M
000111
C
100110
N
1011
D
1110
P
11011
E
0101
Q
01011
F
0000
R
10111
G
1000
S
1111
H
100111
T
0001
I
1101
V
1010
K
0011
W
000110
L
100
Y
10110
4.5. Notas
O algoritmo guloso para sistemas de moedas Magazine, Nemhauser e Trotter [51] d
ao criterios necess
arios e suficientes para uma solucao gulosa do
problema de troca ser
otima. Dado um sistema de moedas, Pearson [56] apresentou um algoritmo que descobre em tempo O(n3 log2 c1 ), se o sistema e
guloso. Um sistema de moedas tal que todo sufixo e guloso se chama totalmente guloso. Cowen et al. [16] estudam sistemas de moedas totalmente
gulosos.
4.6. Exerccios
(Soluc
oes a partir da p
agina 315.)
Exerccio 4.1 (An
alise de series)
Suponha uma serie de eventos, por exemplo, as transacoes feitos na bolsa de
forma
compra Dell, vende HP, compra Google, . . .
Uma certa ac
ao pode acontecer mais que uma vez nessa sequencia. O problema: Dado uma outra sequencia, decida o mais rapido possvel se ela e uma
subsequencia da primeira.
Achar um algoritmo eficiente (de complexidade O(m + n) com sequencia de
tamanho n e m), prova a corretude a analise a complexidade dele.
(Fonte: [42]).
Exerccio 4.2 (Comunica
c
ao)
Imagine uma estrada comprida (pensa em uma linha) com casas ao longo
dela. Suponha que todas casas querem acesso ao comunicacao com celular. O
problema: Posiciona o n
umero mnimo de bases de comunicacao ao longo da
estrada, com a restrica
o que cada casa tem quer ser ao maximo 4 quilometros
distante de uma base.
Inventa um algoritmo eficiente, prova a corretude e analise a complexidade
dele.
(Fonte: [42]).
94
5. Programac
ao din
amica
5.1. Introduc
ao
Temos um par de coelhos recem-nascidos. Um par recem-nascido se torna fertil
depois um mes. Depois ele gera um outro par a cada mes seguinte. Logo, os
primeiros descendentes nascem em dois meses. Supondo que os coelhos nunca
morrem, quantos pares temos depois de n meses?
n
#
0
1
1
1
2
2
3
3
4
5
5
8
6
13
Fn1
| {z }
popula
ca
o antiga
Fn2
| {z }
descendentes
caso n 2
caso n {0, 1}
Os n
umeros definidos por essa recorrencia s
ao conhecidos como so n
umeros
Fibonacci. Uma implementac
ao recursiva simples para calcular um n
umero
de Fibonacci e
1 f i b ( n ) :=
2
i f n 1 then
3
return 1
4
else
5
return f i b ( n 1)+ f i b ( n 2 )
6
end i f
7 end
Qual a complexidade dessa implementac
ao? Temos a recorrencia de tempo
(
T (n 1) + T (n 2) + (1) caso n 2
T (n) =
(1)
caso contrario.
95
5. Programac
ao din
amica
simples de ver (induc
E
ao!) que T (n) Fn , e sabemos que Fn = (2n ) (outra
induc
ao), portanto a complexidade e exponencial. (A formula exata e
Fn =
n
1+ 5
2
n
n
1+ 5
12 5
2
1
=
+
2
5
5
Fn1
%
Fn2
B
Fn3
9
%
Fn4
B
:
!
mas somente um n
umero polinomial de valores diferentes! Ideia: usar uma
cache!
1
2
3
4
5
6
7
8
9
10
f0 := 1
f1 := 1
fi := para i 2
f i b ( n ) :=
i f fn = then
fn := f i b ( n 1)+ f i b ( n 2 )
end i f
return fn
end
Exemplo de uma execuc
ao:
4 : f5D
DD
vv
v
DD
vv
DD
v
zv
"
f3
3 : f4H
HH
v
v
HH
v
HH
vv
H$
zvv
2 : f3H
f2
HH
vv
H
v
HH
vv
HH
zvv
$
1 : f2H
f1
HH
zz
H
z
HH
zz
HH
|zz
$
f1
f0
96
5.1. Introducao
f5 f4 f3 f2 f1 f0
Inicial 1
1
1
2
1
1
2
3
2
1
1
3
5
3
2
1
1
4
8
5
3
2
1
1
O trabalho agora e O(n), i.e. linear! Essa abordagem se chama memoizac
ao:
usamos uma cache para evitar recalcular resultados intermediarios utilizados
frequentemente. Essa implementac
ao e top-down e corresponde exatamente
`a recorrencia acima. Uma implementac
ao (ligeiramente) mais eficiente que
preenche a cache de forma bottom-up e
1 f i b ( n ) :=
2
f0 := 1
3
f1 := 1
4
for i [2, n] do
5
fi := fi1 + fi2
6
end f o r
7
return fn
8 end
Finalmente, podemos otimizar essa computac
ao ainda mais, evitando totalmente a cache
1
2
3
4
5
6
7
8
9
f i b ( n ) :=
f := 1
g := 1
for i [2, n] do
{ invariante : f = Fi2 g = Fi1 }
g := f + g
f := g f
{ invariante : f = Fi1 g = Fi }
end f o r
A ideia de armazenar valores intermedi
arios usados freq
uentemente numa computacao recursiva e uma das ideias principais da programaca
o din
amica (a
outra senda o princpio de otimalidade, veja abaixo). A sequencia de implementacoes no nosso exemplo dos n
umeros Fibonacci e tpico para algoritmos
de programac
ao din
amica, inclusive o u
ltimo para reduzir a complexidade de
espaco. Tipicamente usa-se implementac
oes ascendentes (ingl. bottom-up).
Programac
ao Din
amica (PD)
1. Para aplicar PD o problema deve apresentar substrutura otima (uma
97
5. Programac
ao din
amica
soluc
ao
otima para um problema contem solucoes otimas de seus subproblemas) e superposic
ao de subproblemas (reutiliza solucoes de subproblemas).
2. Pode ser aplicada a problemas NP-completos e polinomiais.
3. Em alguns casos o algoritmo direto tem complexidade exponencial, enquanto que o algoritmo desenvolvido por PD e polinomial.
` vezes a complexidade continua exponencial, mas de ordem mais
4. As
baixa.
u
5. E
til quando n
ao e f
acil chegar a uma sequencia otima de decisoes sem
testar todas as sequencias possveis para entao escolher a melhor.
6. Reduz o n
umero total de sequencias vi
aveis, descartando aquelas que
sabidamente n
ao podem resultar em sequencias otimas.
Id
eias b
asicas da PD
Objetiva construir uma resposta
otima atraves da combinacao das respostas obtidas para subproblemas
Inicialmente a entrada e decomposta em partes mnimas e resolvidas de
forma ascendente (bottom-up)
A cada passo os resultados parciais s
ao combinados resultando respostas para subproblemas maiores, ate obter a resposta para o problema
original
A decomposic
ao e feita uma u
nica vez, e os casos menores sao tratados
antes dos maiores
Este metodo e chamado ascendente, ao contrario dos metodos recursivos
que s
ao metodos descendentes.
Passos do desenvolvimento de um algoritmo de PD
1. Caracterizar a estrutura de uma soluc
ao otima
2. Definir recursivamente o valor de uma solucao otima
3. Calcular o valor de uma soluc
ao
otima em um processo ascendente
4. Construir uma soluc
ao
otima a partir de informacoes calculadas
98
5.2. Comparac
ao de sequ
encias
5.2.1. Subsequ
encia Comum Mais Longa
Subsequ
encia Comum Mais Longa
Dada uma sequencia X = hx1 , x2 , . . . , xm i, uma outra sequencia Z =
hz1 , z2 , . . . , zk i, e uma subsequencia de X se existe uma sequencia estritamente crescente hi1 , i2 , . . . , ik i de ndices de X tais que, para todo
j = 1, 2, . . . , k, temos xij = zj .
Exemplo: Z = hB, C, D, Bi e uma subsequencia de X = hA, B, C, D, A, Bi.
Dadas duas sequencias X e Y , dizemos que uma sequencia Z e uma
subsequencia comum de X e Y se Z e uma subsequencia tanto de X
quanto de Y .
Exemplo: Z = hB, C, A, Bi e uma subsequencia comum mais longa de
X = hA, B, C, B, D, A, Bi e Y = hB, D, C, A, B, Ai
Subsequ
encia Comum Mais Longa
Definic
ao do Problema da SCML
SCML
Inst
ancia Duas seq
uencias X = hx1 , x2 , . . . , xm i e Y = hy1 , y2 , . . . , yn i.
Soluc
ao Uma subsequencia comum Z de X, Y .
Objetivo Maximizar o comprimento de Z.
Exemplo de Aplicac
ao: comparar dois DNAs
X = ACCGGT CGAGT G
Y = GT CGT T CGGAAT GCCGT T GCT CT GT AAA
Os caracteres devem aparecer na mesma ordem, mas nao precisam ser
necessariamente consecutivos.
99
5. Programac
ao din
amica
8
0
0
>
<S(X , Y ) + 1
max{S(X, Y 0 ), S(X 0 , Y )}
>
:
0
se X = X 0 c, Y = Y 0 c
se X = X 0 c1 , Y = Y 0 c2 e c1 6= c2
se X = ou Y =
100
c[i, j] := c[i 1, j 1] + 1
8
9
10
11
12
13
else
c[i, j] := max(c[i, j 1], c[i 1, j])
end i f
end f o r
return c[m, n]
Exemplo
.
A
B
C
B
D
A
B
.
0
0
0
0
0
0
0
0
O
3
0
1
1
1
1
1
1
1
1
G
4
0
1
1
1
1
1
1
1
1
B
0
0
1
1
1
1
1
1
D
0
0
1
1
1
2
2
2
C
0
0
1
2
2
2
2
2
A
0
1
1
2
2
2
3
3
B
0
1
2
2
3
3
3
4
A
0
1
2
2
3
3
4
4
Exemplo 5.1
P
E
S
Q
U
I
S
A
0
1
2
3
4
5
6
7
8
0
0
0
0
0
0
0
0
0
0
P
1
0
1
1
1
1
1
1
1
1
R
2
0
1
1
1
1
1
1
1
1
R
5
0
1
1
1
1
1
1
1
2
A
6
0
1
1
1
1
1
1
1
2
M
7
0
1
1
1
1
1
1
1
2
A
8
0
1
1
1
1
1
1
1
2
Caso s
o o comprimento da maior subsequencia em comum importa, podemos
reduzir o espaco usado. Os valores de cada linha ou coluna dependem so dos
valores da linha ou coluna anterior. Supondo, que o comprimento de uma linha e menor que o comprimento de uma coluna, podemos manter duas linhas
101
5. Programac
ao din
amica
e calcular os valores linha por linha. Caso as colunas sao menores, procedemos das mesmo forma coluna por coluna. Com isso, podemos determinar o
comprimento da maior subsequencia em comum em tempo O(nm) e espaco
O(min{n, m}).
Caso queiramos recuperar a pr
opria subsequencia, temos que manter essa
informac
ao adicionalmente:
Exemplo
102
.
A
B
C
B
D
A
B
.
0
0
0
0
0
0
0
0
B
0
0
-1
1
-1
1
1
-1
D
0
0
1
1
1
-2
2
2
C
0
0
1
-2
2
2
2
2
A
0
-1
1
2
2
2
-3
3
B
0
1
-2
2
-3
3
3
-4
A
0
-1
2
2
3
3
-4
4
Nesse caso, n
ao tem metodo simples para reduzir o espaco de O(nm) (veja
os coment
arios sobre o algoritmo de Hirschberg abaixo). Mantendo duas linhas ou colunas de c, gasta menos recursos, mas para recupar a subsequencia
comum, temos que manter O(nm) elementos em b.
O algoritmo de Hirschberg [36], via Divis
ao e Conquista, resolve o problema
da subsequencia comum mais longa em tempo O(mn), mas com complexidade
de espaco linear O(m + n). O algoritmo recursivamente divide a tabela em
quatro quadrantes e ignora os quadrantes superior-direito e inferior-esquerdo,
visto que a soluc
ao n
ao passa por eles. Ap
os, o algoritmo e chamado recursivamente nos quadrantes superior-esquerdo e inferior-direito. Em cada chamada
recursiva e criada uma lista com as operac
oes executadas, e tal lista e concatenada ao final das duas chamadas recursivas. A recuperacao da sequencias
de operac
oes pode ser feita percorrendo-se linearmente esta lista.
Print-SCML
i f i = 0 o r j = 0 then return
i f b[i, j] =- then
P r i n t SCML( b , X , i 1 , j 1 )
p r i n t xi
e l s e i f b[i, j] = then
P r i n t SCML( b , X , i 1 , j )
else
P r i n t SCML( b , X , i , j 1 )
103
5. Programac
ao din
amica
5.2.2. Similaridade entre strings
Considere o problema de determinar o n
umero mnimo de operacoes que transformam um string s em um string t, se as operacoes permitidas sao a insercao
de um caracter, a delec
ao de um caracter ou a substituicao de um caracter
para um outro. O problema pode ser visto como um alinhamento de dois
strings da forma
sonhar
vo--ar
em que cada coluna com um caracter diferente (inclusive a falta de um caracter -) tem custo 1 (uma coluna (a, ) corresponde `a uma delecao no primeiro
ou uma inserc
ao no segundo string, etc.). Esse problema tem subestrutura
otima: Uma soluc
ao
otima contem uma solucao otima do subproblema sem
au
ltima coluna, sen
ao podemos obter uma solucao de menor custo. Existem
quatro casos possveis para a u
ltima coluna:
h i h i
a
a
a
;
;
;
a
a
b
104
1
2
3
4
5
6
7
8
9
10
11
dist
a n c i a ( s , t , n ,m):=
i f ( n=0) return m
i f ( m=0) return n
i f ( sn = tm ) then
sol0 = d i s t
a n c i a (s ,t ,n 1 ,m 1)
else
sol0 = d i s t
a n c i a (s ,t ,n 1 ,m 1) + 1
end i f
sol1 = d i s t
a n c i a (s ,t ,n ,m 1) + 1
sol2 = d i s t
a n c i a (s ,t ,n 1 ,m) + 1
return min(sol0 , sol1 , sol2 )
Essa implementac
ao tem complexidade exponencial. Com programacao dinamica,
armazenando os valores intermedi
arios de d em uma matriz m, obtemos
Dist
ancia de Edic
ao
105
5. Programac
ao din
amica
11
12
13
14
15
sol1 := mi,j1 + 1
sol2 := mi1,j + 1
mi,j := min(sol0 , sol1 , sol2 ) ;
end f o r
return mi,j
Dist
ancia entre textos
Valores armazenados na matriz M para o c
alculo da distancia entre ALTO e
LOIROS
A
L
T
O
0
1
2
3
4
L
1
1
1
2
3
O
2
2
2
2
2
I
3
3
3
3
3
R
4
4
4
4
4
O
5
5
5
5
4
S
6
6
6
6
5
-ALTOLOIROS
Dist
ancia entre textos
106
4
5
6
7
8
9
10
11
12
13
14
15
16
f o r i := 1, . . . , n do
f o r j := 1, . . . , m do
i f ( si = tj ) then
sol0 = mi1,j1
else
sol0 = mi1,j1 + 1
end i f
sol1 := mi,j1 + 1
sol2 := mi1,j + 1
mi,j := min(sol0 , sol1 , sol2 ) ;
pi,j := min{i | soli = mij }
end f o r
return mi,j
Reconstruc
ao da Sequ
encia de Operac
oes
107
5. Programac
ao din
amica
O algoritmo possui complexidade de tempo e espaco O(mn), sendo que o
espaco s
ao duas matrizes P e M . O espaco pode ser reduzido para O(min{n, m})
usando uma adaptac
ao do algoritmo de Hirschberg.
se i > n ou w = 0
0
M (i, w) = M (i + 1, w)
se wi > w nao cabe
max{M (i + 1, w), M (i + 1, w wi ) + vi } se wi w
A soluc
ao desejada e M (n, W ). Para determinar a selecao de itens:
Mochila m
axima (Knapsack)
Seja S (k, v) a soluc
ao de tamanho menor entre todas solucoes que
usam somente itens S [1, k] e
tem valor exatamente v.
108
5.4. Multiplicac
ao de Cadeias de Matrizes
Temos
S (k, 0) =
S (1, v1 ) = {1}
S (1, v) = undef
para v 6= v1
Mochila m
axima (Knapsack)
S obedece a recorrencia
(
S (k 1, v vk ) {k}
S (k, v) = min
tamanho S (k 1, v)
se vk v e S (k 1, v vk ) definido
ti + tk
ti .
iS (k1,v)
5.4. Multiplicac
ao de Cadeias de Matrizes
Qual e a melhor ordem para multiplicar n matrizes M = M1 Mn ? Como
o produto de matrizes e associativo, temos v
arias possibilidades de chegar em
M . Por exemplo, com quatro matrizes temos as cinco possibilidades
Possveis multiplicac
oes
Dadas (M1 , M2 , M3 , M4 ) pode-se obter M1 M2 M3 M4 de 5 modos
distintos, mas resultando no mesmo produto
M1 (M2 (M3 M4 ))
M1 ((M2 M3 )M4 )
(M1 M2 )(M3 M4 )
(M1 (M2 M3 ))M4
((M1 M2 )M3 )M4
Podemos multiplicar duas matrizes somente se N col(A) = N lin(B)
Sejam duas matrizes com dimens
oes p q e q r respectivamente. O
n
umero de multiplicac
oes resultantes e p q r.
109
5. Programac
ao din
amica
Dependendo do tamanho dos matrizes, um desses produtos tem o menor
n
umero de adicoes e multiplicac
oes. O produto de duas matrizes p q e
q r precisa prq multiplicac
oes e pr(q 1) adicoes. No exemplo acima, caso
temos matrizes do tamanho 3 1, 1 4, 4 1 e 1 5 as ordens diferentes
resultam em
N
umero de multiplicac
oes para cada sequ
encia
20 + 20 + 15 = 55
4 + 5 + 15 = 24
12 + 20 + 60 = 92
4 + 5 + 15 = 24
12 + 12 + 15 = 39
operac
oes, respectivamente. Logo, antes de multiplicar as matrizes vale a
pena determinar a ordem
otima (caso o tempo para determinar ela nao e
proibitivo). Dada uma ordem, podemos computar o n
umero de adicoes e
multiplicac
oes em tempo linear. Mas quantas ordens tem? O produto final
consiste em duas matrizes que s
ao os resultados dos produtos de i e n i
matrizes; o ponto de separac
ao i pode ser depois qualquer matriz 1 i < n.
Por isso o n
umero de possibilidades Cn satisfaz a recorrencia
X
Cn =
Ci Cni
1i<n
para n 1 e as condic
oes C1 = 1 e C2 = 1. A solucao dessa recorrencia e
Cn = 2n
/(2(2n1))
=
O(4n /n3/2 ) e temos Cn 2n2 , logo tem um n
umero
n
exponencial de ordens de multiplicac
ao possveis1 .
Soluc
ao por Recorr
encia
O n
umero de possibilidades Tn satisfaz a recorrencia
X
T (n) =
T (i)T (n i)
1i<n1
para n 1 e as condic
oes T (1) = 1.
A soluc
ao dessa recorrencia e T (n) =
Cn 2n2 .
1 Podemos
2n
n
110
5.4. Multiplicac
ao de Cadeias de Matrizes
Ent
ao n
ao vale a pena avaliar o melhor ordem de multiplicacao, enfrentando
um n
umero exponencial de possibilidades? N
ao, existe uma solucao com
programac
ao din
amica, baseada na mesma observacao que levou `a nossa recorrencia.
(
minij<k mij + m(j+1)k + bi1 bj bk caso i < k
mik =
0
caso i = kx
Multiplicac
ao de Cadeias de Matrizes
Dada uma cadeia (A1 , A2 , . . . , An ) de n matrizes, coloque o produto
A1 A2 . . . An entre parenteses de forma a minimizar o n
umero de multiplicac
oes.
Algoritmo Multi-Mat-1
Retorna o n
umero mnimo de multiplica
c
oes necess
arias para multiplicar a cadeia de matrizes
passada como par
ametro.
f o r i:=1 t o n do mi,j := 0
f o r u:=1 t o n 1 do { diagonais s u p e r i o r e s }
f o r i:=1 t o n u do { posi
c
a o na diagonal}
j :=i + u
{u = j i}
mi,j :=
f o r k:=i t o j 1 do
c:= mi,k + mk+1,j + bi1 bk bj
i f c < mi,j then mi,j :=c
end f o r
end f o r
end f o r
return m1,n
Considerac
oes para a An
alise
O tamanho da entrada se refere ao n
umero de matrizes a serem multiplicadas
As operac
oes aritmeticas sobre os naturais s
ao consideradas operacoes
fundamentais
111
5. Programac
ao din
amica
An
alise de Complexidade do Algoritmo
Cp =
n1
X nu
X
(1 +
u=1 i=1
n1
X
j1
X
4) =
ki
n1
X nu
X
+ 4u) =
(n u)(1
u=1
(1 + 4u)
u=1 i=1
n1
X
u=1
An
alise de Complexidade do Algoritmo
Cp [Inicializac
ao] = O(n)
Cp [Iterac
ao] = O(n3 )
Cp [Finalizac
ao] = O(1)
Cp [Algoritmo] = O(n) + O(n3 ) + O(1) = O(n3 )
Algoritmo Multi-Mat-2
Retorna o n
umero mnimo de multiplica
c
oes e a parentiza
ca
o respectiva para multiplicar a cadeia
de matrizes passada como par
ametro.
112
5.5. Topicos
Algoritmo Print-Parentizac
ao
5.5. T
opicos
5.5.1. Algoritmo de Floyd-Warshall
O algoritmo de Floyd-Warshall calcula o caminho mnimo entre todos os pares
de vertices de um grafo.
Algoritmo de Floyd-Warshall
Conte
udo disponvel na sec
ao 25.2 do Cormen, e Exemplo 5.2.4 (Laira&Veloso,
2a edic
ao).
Calcula o caminho mnimo entre cada par de vertices de um grafo.
Considera que o grafo n
ao tenha ciclos negativos, embora possa conter
arcos de custo negativo.
Subestrutura
otima
Subcaminhos de caminhos mais curtos s
ao caminhos mais curtos.
Lema 24.1 (Cormen): Dado um grafo orientado ponderado G = (V, E),
com func
ao peso w : E R, seja p = (v1 , v2 , . . . , vk ) um caminho mais
113
5. Programac
ao din
amica
curto do vertice v1 ate o vertice vk e, para quaisquer i e j tais que
1 i j k, seja pij = (vi , vi+1 , . . . , vj ) o subcaminho p desde o
vertice vi ate o vertice vj . Ent
ao, pij e um caminho mais curto de vi ate
vj .
Algoritmo de Floyd-Warshall
D0 := D
f o r k := 1 t o n
f o r i := 1 t o n
f o r j := 1 t o n
k1
k1
dkij := min(dk1
ij , dik + dkj )
return Dn
Observe que n
ao e necess
ario armazenar as matrizes Dk explicitamente. O
algoritmo de Floyd-Warshall continua conrreto, usando a mesma matrix D
para todas operac
oes e portanto possui complexidade de espaco (n2 ).
Excurso 5.1
Podemos substituir as operac
oes sobre (R, min, +) no algoritmo de FloydWarshall por outras operac
oes, para resolver problemas similares. Por exemplo:
Sobre o semi-anel (R, max, min), o algoritmo resolve o problema do caminho gargalho entre todos pares (ingl. all pairs bottleneck paths problem).
Sobre o semi-anel (R, min, +) a matriz Dk representa o menor caminho com
no m
aximo k hops entre todos pares de vertices, e portanto Dn e a matriz
calculada pelo algoritmo de Floyd-Warshall. (Observe que a matriz Dk no
algoritmo do Floyd-Warshall n
ao e D elevado a k.)
Portanto, podemos aplicar n vezes uma multiplicacao de matrizes para obter Dn em O(n n3 ). Como Di = Dn para i n, podemos calcular
114
5.5. Topicos
Dn = Ddlog2 ne mais r
apido quadrando D dlog2 ne vezes (ver os algoritmos
de potenciac
ao), uma abordagem que possui complexidade O(n3 log n).
uma observac
E
ao importante que o algoritmo de Strassen (e algoritmos mais
avancados como o algoritmo de Coppersmith-Winograd) so funcionam sobre
aneis, porque eles precisam um inverso para a adicao. Um algoritmo subc
ubico para a multiplicac
ao de matrizes em semi-aneis implicaria em um algoritmo sub-c
ubico para o problema do caminho mnimo entre todos pares de
vertices e problemas similares. Para mais informac
oes ver por exemplo Chan
[11], Williams e Williams [72].
Outra observac
ao e que o algoritmo de Floyd-Warshall somento calcula as
dist
ancias entre todos pares de vertices. Para determinar os caminhos mais
curtos, veja por exemplo [4].
Exemplo
115
5. Programac
ao din
amica
Logo, podemos definir T (i, V ) como menor rota comecando no vertice i e
passando por todos vertices em V exatamente uma vez e volta para vertice
1. A soluc
ao desejada ent
ao e T (1, [2, n]). Para determinar o valor de T (i, V )
temos que minizar sobre todas continuac
oes possveis. Isso leva `a recorrencia
(
T (i, V ) =
Se ordenamos todos os sub-conjuntos dos vertices [1, n] em ordem de , obtemos uma matrix de dependencias
V1 V2 V2n
1
2
..
.
n
em que qualquer elemento depende somente de elementos em colunas mais
para esquerda. Uma implementac
ao pode representar uma subconjunto de
[1, n] como n
umero entre 0 e 2n 1. Nessa caso, a ordem natural ja respeita
a ordem entre os conjuntos, e podemos substituir um teste v Vj com
2v &j = 2v e a operac
ao Vj \ {v} com j 2v .
1
2
3
4
5
6
5.5.3. Arvore
de busca bin
aria
otima
Motivac
ao
Suponha que temos um conjunto de chaves com probabilidades de busca
conhecidas.
Caso a busca e repetida muitas vezes, vela a pena construir uma estrutura de dados que minimiza o tempo medio para encontrar uma chave.
116
5.5. Topicos
Uma estrutura de busca eficiente e uma
arvore binaria.
Portanto, vamos investigar como construir a
arvore binaria otima. Para um
conjunto de chaves com distribuic
ao de busca conhecida, queremos minimizar
o n
umero medio de comparac
oes (nossa medida de custos).
Exemplo 5.2
Considere a sequencia ordenada a < b < c < d e as probabilidades
Exemplo
Elemento a
b
c
Pr
0.2 0.1 0.6
qual seria uma
arvore otima? Alguns exemplos
d
0.1
Arvore
correspondente
'&%$
!"#
'&%$
!"#
/.-,
()*+
a ==
b <<
d
'&%$
!"#
'&%$
!"#
'&%$
!"#
'&%$
!"#
a
c ==
b <<
b ==
/.-,
()*+
'&%$
!"#
'&%$
!"#
'&%$
!"#
c ==
d
a
c
/.-,
()*+
d
que tem um n
umero medio de comparac
oes 0.21+0.12+0.63+0.14 =
2.6, 0.22+0.11+0.62+0.13 = 2.0, 0.23+0.12+0.63+0.11 = 2.7,
respectivamente.
Arvore
de Busca Bin
aria Otima
Em geral, temos que considerar as probabilidades de procurar uma chave junto
com as probabilidades que uma chave procurada n
ao pertence `a arvore. Logo,
supomos que temos
1. uma sequencia ordenada a1 < a2 < < an de n chaves e
2. probabilidades
Pr[c < a1 ], Pr[c = a1 ], Pr[a1 < c < a2 ], . . .
. . . , Pr[an1 < c < an ], Pr[c = an ], Pr[an < c]
que a chave procurada c e uma das chaves da sequencia ou cai num
intervalo entre elas.
A partir dessas informac
oes queremos minimizar a complexidade media da
busca. Em uma dada
arvore, podemos observar que o n
umero de comparacoes para achar uma chave existente e igual a profundidade dela na arvore
117
5. Programac
ao din
amica
(comecando com profundidade 1 na raiz). Caso a chave nao pertence `a arvore,
podemos imaginar chaves artificiais que representam os intervalos entre as chaves, e o n
umero de comparac
oes necess
arias e um menos que a profundidade
de uma chave artificial. Um exemplo de uma arvore com chaves artificiais
(representadas pelos intervalos correspondentes) e
x2 VVVV
VVVVV
hhhhh
h
h
h
V+ x
h
s
h
x
1
3 L
L
o
L
LL%
o
L
r
o
wo
%
yr r
] , x1 [
]x1 , x2 [
]x2 , x3 [
]x3 , [
Para facilitar a notac
ao, vamos introduzir chaves adicionais a0 = e an+1 =
. Com isso, obtemos a complexidade media de busca
cM =
Pr[c = ai ]prof(ai ) +
1in
0in
ela depende da
arvore concreta.
Como achar a
arvore
otima? A observac
ao crucial e a seguinte: Uma das
chaves deve ser a raiz e as duas sub-
arvores da esquerda e da direita devem
ser
arvores
otimas pelas sub-sequencias correspondentes.
Para expressar essa observac
ao numa equac
ao, vamos denotar com cM (e, d) a
complexidade media de uma busca numa sub-
arvore otima para os elementos
ae , . . . , ad . Para a complexidade da
arvore inteira, definido acima, temos cM =
cM (1, n). Da mesmo forma, obtemos
cM (e, d) =
Pr[c = ai ]prof(ai )+
eid
e1id
Arvore
de Busca Bin
aria Otima
Supondo que ar e a raiz desse sub-
arvore, essa complexidade pode ser escrito
118
5.5. Topicos
como
cM (e, d) = Pr[c = ar ]
X
Pr[c = ai ]prof(ai ) +
+
ei<r
e1i<r
Pr[c = ai ]prof(ai ) +
r<id
rid
e1id
Pr[c = ai ]
eid
+ cM (e, r 1) + cM (r + 1, d)
= Pr[ae1 < c < ad+1 ] + cM (e, r 1) + cM (r + 1, d)
Arvore
de Busca Bin
aria Otima
(O pen
ultimo passo e justificado porque, passando para uma sub-arvore a
profundidade e um a menos.) Essa equac
ao define uma recorrencia para a
complexidade media
otima: Escolhe sempre a raiz que minimiza essa soma.
Como base temos complexidade cM (e, d) = 0 se d > e:
cM (e, d) =
(
minerd Pr[ae1 < c < ad+1 ] + cM (e, r 1) + cM (r + 1, d) caso e d
0
caso e > d
(5.1)
Arvore
de Busca Bin
aria Otima
Ao inves de calcular o valor cM recursivamente, vamos usar a programacao
(tabelac
ao) din
amica com tres tabelas:
cij : complexidade media da
arvore
otima para as chaves ai ate aj , para
1 i n e i 1 j n.
rij : raiz da
arvore
otima para as chaves ai ate aj , para 1 i j n.
pij : Pr[ai1 < c < aj+1 ]
119
5. Programac
ao din
amica
Arvore
de Busca Bin
aria Otima
f o r i:=1 t o n+1 do
pi(i1) :=qi1
ci(i1) :=0
end f o r
f o r d:=0 t o n 1 do { para todas diagonais }
f o r i:=1 t o n d do { da chave i }
j :=d + i
{ at
e chave j }
pij :=pi(j1) + pj + qj
cij :=
f o r r:=i t o j do
c:= pij + ci(r1) + c(r+1)j
i f c < cij then
cij :=c
rij := r
end f o r
end f o r
end f o r
i/j
1
2
120
5.6. Exerccios
u
0
caso s = t
(Observe que a recorrencia possui valor caso n
ao existe caminho entre s
e t.)
A tabela de programac
ao din
amica possui O(n2 2n ) entradas, e cada entrada
pode ser computado em tempo O(n), que resulta numa complexidade total de
O(n3 2n ).
Um corol
ario e que caso o grafo e aciclico, o caminho mais longo pode ser
calculado em tempo polinomial.
5.6. Exerccios
Exerccio 5.1
Da tres exemplos de problemas que n
ao possuem uma subestrutura otima,
i.e. a soluc
ao
otima de um problema n
ao contem solucoes otimas de subproblemas.
Exerccio 5.2
O problema do caminho mais longo em grafos aciclicos possui uma subestrutura
otima? Justifique. Caso sim, prop
oe um algoritmo de programacao
din
amica que resolve o problema.
121
6. Divis
ao e conquista
6.1. Introduc
ao
M
etodo de Divis
ao e Conquista
Dividir o problema original em um determinado n
umero de subproblemas independentes
Conquistar os subproblemas, resolvendo-os recursivamente ate obter o
caso base.
Combinar as soluc
oes dadas aos subproblemas, a fim de formar a solucao
do problema original.
Recorr
encias
O tempo de execuc
ao dos algoritmos recursivos pode ser descrito por
uma recorrencia.
Uma recorrencia e uma equac
ao ou desigualdade que descreve uma
func
ao em termos de seu valor em entradas menores.
Divis
ao e conquista
123
6. Divis
ao e conquista
E estrutura de divis
ao e conquista (i) sugere uma prova indutiva da corretude
do algoritmo: prove que o algoritmo e correto no caso base e prove que a
combinac
ao de soluc
oes corretas dos subproblemas produz uma solucao correta
do problema. (ii) define a complexidade do algoritmo por uma recorrencia: a
an
alise da complexidade consiste na soluc
ao desta recorrencia.
Recurs
ao natural
Seja d(n) o tempo para a divis
ao.
Seja s(n) o tempo para computar a solucao final.
Podemos somar: f (n) = d(n) + s(n) e obtemos
(
(1)
para n < n0
T (n) = P
ario.
1ik T (ni ) + f (n) caso contr
Recurs
ao natural: caso balanceado
(
T (n) =
(1)
para n < n0
kT (dn/me) + f (n) caso contrario.
Mergesort
124
125
6. Divis
ao e conquista
6.2.1. M
etodo da substituic
ao
M
etodo da substituic
ao
O metodo da substituic
ao envolve duas etapas:
1. pressup
oe-se um limite hipotetico.
2. usa-se induc
ao matem
atica para provar que a suposicao esta correta.
Aplica-se este metodo em casos que e f
acil pressupor a forma de resposta.
Pode ser usado para estabelecer limites superiores ou inferiores.
Mergesort usando o m
etodo da substituic
ao
Sup
oe-se que a recorrencia
T (n) = 2T bn/2c + n
tem limite superior igual a n log n, ou seja, T (n) = O(n log n). Devemos
provar que T (n) cn log n para uma escolha apropriada da constante c > 0.
T (n) 2 c bn/2c log(bn/2c + n)
cn log n/2 + n = cn log n cn + n
cn log n
para c 1.
A express
ao cn + n na equac
ao
cn log n cn + n
| {z }
residuo
126
Algoritmo 6.3 (M
aximo)
Entrada Uma sequencia a e dois ndices l, r tal que al , . . . , ar1 e definido.
Sada maxli<r ai
1
2
3
m1 := M
aximo(a, l, b(l + r)/2c)
m2 := M
aximo(a, d(l + r)/2e , r)
return max(m1 , m2 )
caso n = 1
caso contrario
127
6. Divis
ao e conquista
Para resolver ela podemos substituir
T (n) = f (n) + T (n 1) = f (n) + f (n 1) + T (n 1) + f (n 2)
X
f (i)
= =
1in
Exemplo 6.2
Na aula sobre a complexidade media do algoritmo Quicksort (veja pagina 57),
encontramos uma recorrencia da forma
T (n) = n + T (n 1)
cuja soluc
ao e
1in
i = n(n 1)/2.
Substituic
ao direta
Da mesma forma podemos resolver recorrencias como
(
f (1)
caso n = 1
T (n) =
T (n/2) + f (n) caso contrario
substituindo
T (n) = f (n) + T (n/2) = f (n) + f (n/2) + T (n/4)
X
= =
f (n/2i )
0ilog2 n
Exemplo 6.3
Ainda na aula sobre a complexidade media do algoritmo Quicksort (veja
p
agina 57), encontramos outra recorrencia da forma
T (n) = n + 2T (n/2).
128
cuja soluc
ao e
cao T (n) =
0ilog2 n 1 = log2 n. Portanto temos a solu
n log2 n.
Observe que a an
alise n
ao considera constantes: qualquer funcao cn log2 n
tambem satisfaz a recorrencia. A soluc
ao exata e determinada pela base; uma
alternativa e concluir que T (n) = (n log2 n).
f (n) = c1 f (n/c2 ) = = c1
= nlogc2 c1
T (n/c2 )
log n/c2
c1 c2
logc2 n
obtemos
f (n)
log n
c1 c2
temos
A(n) = A(n/c2 ) +
f (n)
log n
c1 c2
129
6. Divis
ao e conquista
uma forma que sabemos resolver:
A(n) =
f (n/ci2 )
X
0ilogc2 n
logc2 n/ci2
c1
1
logc2 n
c1
f (n/ci2 )ci1
0ilogc2 n
Ap
os de resolver essa recorrencia, podemos re-substituir para obter a solucao
de T (n).
Exemplo 6.4 (Multiplica
c
ao de n
umeros bin
arios)
Dado dois n
umeros p, q de n bits, podemos separa-los em duas partes forma
p=
pl
pr
= pl 2n/2 + pr
q=
ql
qr
= ql 2n/2 + qr .
130
cn
3log2 n
cn
3log2 n
X
0ilog2 n
=c
0ilog2 n
n/2i
3log2 n/2i
i
3
cn (3/2)log2 n+1
= log n
= 3c
2
3 2
1/2
e portanto
T (n) = A(n)3log2 n = 3cnlog2 3 = (n1.58 ).
Exemplo 6.5
Com p = (1101.1100)2 = (220)10 e q = (1001.0010)2 = (146)10 temos n = 8,
x = p1 + p2 = 1.1001 tal que x1 = 1 e x2 = 1001 e y = q1 + q2 = 1011
tal que y1 = 0 e y2 = 1011. Logo z = x2 y2 = 0110.0011, t = y2 24 + z =
21.0001.0011, u = p1 q1 = 0111.0101, v = p2 q2 = 0001.1000 e finalmente
r = 1111.1010.111.1000 = 32120.
6.2.2. M
etodo da
arvore de recurs
ao
O m
etodo da
arvore de recurs
ao
Uma
arvore de recurs
ao apresenta uma forma bem intuitiva para a analise de
complexidade de algoritmos recursivos.
131
6. Divis
ao e conquista
Numa
arvore de recurs
ao cada n
o representa o custo de um u
nico subproblema da respectiva chamada recursiva
Somam-se os custos de todos os n
os de um mesmo nvel, para obter o
custo daquele nvel
Somam-se os custos de todos os nveis para obter o custo da arvore
Exemplo
Dada a recorrencia T (n) = 3T (bn/4c) + (n2 )
Em que nvel da
arvore o tamanho do problema e 1? No nvel i =
log4 n = 1/2 log2 n.
Quantos nveis tem a
arvore? A
arvore tem log4 n+1 nveis (0, . . . , log4 n).
Quantos n
os tem cada nvel? 3i .
Qual o tamanho do problema em cada nvel? n/4i .
Qual o custo de cada nvel i da
arvore? 3i c(n/4i )2 .
Quantos n
os tem o u
ltimo nvel? (nlog4 3 ).
Qual o custo da
arvore?
Plog4 (n)
i=0
n2 (3/16)i = O(n2 ).
Exemplo
nvel
0
1
2
nos
2
k (n ) SSSSS
ukkkk
)
((n/4)2 )
((n/4)2 ) ((n/4)2 )
SSS
ukkk
)
2 2
2 2
((n/4 ) ) ((n/4 ) ) ((n/42 )2 )
30
31
32
h = dlog4 ne
((n/4h )2 )
3h
132
3d bn/4c + cn2
3d(n/4)2 + cn2
3 2
=
dn + cn2 dn2 .
16
para 3d/16 + c d, ou seja, para valores d 16/13 c
Exemplo 6.6
Considere a recorrencia T (n) = 3T (n/2) + cn do algoritmo de multiplicacao
de n
umeros bin
arios (exemplo 6.4). A
arvore tem log2 n nveis, o nvel i com
3i n
os, tamanho do problema n/2i , trabalho cn/2i por no e portanto (3/2)i n
trabalho total por nvel. O n
umero de folhas e 3log2 n e logo temos
X
T (n) =
(3/2)i n + (3log2 n )
0i<log2 n
=n
(3/2)log2 n 1
3/2 1
+ (3log2 n )
= 2(nlog2 3 1) + (nlog2 3 )
= (nlog2 3 )
Observe que a recorrencia T (n) = 3T (n/2) + c tem a mesma solucao.
Resumindo o m
etodo
1. Desenha a
arvore de recurs
ao
2. Determina
o n
umero de nveis
o n
umero de n
os e o custo por nvel
o n
umero de folhas
3. Soma os custos dos nveis e o custo das folhas
4. (Eventualmente) Verifica por substituic
ao
133
6. Divis
ao e conquista
Arvore
de recorr
encia: ramos desiguais
Calcule a complexidade de um algoritmo com a seguinte equacao de recorrencia
T (n) = T (n/3) + T (2n/3) + O(n)
Considerac
oes
Nos casos 1 e 3 f (n) deve ser polinomialmente menor, resp. maior que
nlogb a , ou seja, f (n) difere assintoticamente por um fator n para um
> 0.
Os tres casos n
ao abrangem todas as possibilidades
Proposta de exerccios: 6.1 e 6.2.
Algoritmo Potenciac
ao
134
Sada A potencia an .
1 if n = 0
2
return 1
3 else
4
return PT(a, n 1) a
5 end i f
Complexidade da potenciac
ao
(
T (n) =
(1)
T (n 1) + 1
se n = 0
se n > 0
Complexidade da potenciac
ao-Npot
encia2
(
(1)
se n = 0
T (n) =
T (bn/2c) + c se n > 0
A complexidade dessa recorrencia e logartmica, ou seja, T (n) O(log n)
135
6. Divis
ao e conquista
Busca Bin
aria
Complexidade da Busca-Bin
aria
(
(1)
se n = 1
T (n) =
T (bn/2c) + c se n > 1
A complexidade dessa recorrencia e logartmica, ou seja, T (n) O(log n)
Quicksort
136
i f l < r then
m := P a r t i t i o n ( l , r , a ) ;
3
Quicksort (l ,m 1 ,a ) ;
4
Quicksort (m + 1 ,r ,a ) ;
5 end i f
(1)
T (n 1) + (n)
se n = 1
se n > 1
se n = 1
se n > 1
(1)
n
T ( 9n
10 ) + T ( 10 ) + (n)
se n = 1
se n > 1
137
6. Divis
ao e conquista
Exemplo 6.8 (Contra-exemplo 2)
Considere a recorrencia T (n) = 2T (n/2) + n/ log n. De novo, a funcao f (n) =
n/ log n n
ao satisfaz nenhum dos criterios do teorema Mestre (ela fica entre
casos 1 e 2). Uma an
alise da
arvore de recorrencia resulta em
X
T (n) =
(n/(log n i)) + (n)
0i<log2 n
1jlog n
T (n) = (nlogb a ) +
aj f (n/bj )
j=0
g(n) =
X
j=0
138
aj f (n/bj )
139
6. Divis
ao e conquista
para um > 0 e a constante x0 e suficientemente grande2 temos que
Z x
g(u)
p
T (x) x 1 +
du
p+1
1 u
P
com p tal que 1ik ai bpi = 1.
Observa
c
ao 6.1
As func
oes hi (x) servem particularmente para aplicar o teorema para com
pisos e tetos. Com
hi (x) = dbi xe bi x
(que satisfaz a condic
ao de h, porque hi (x) O(1)) obtemos a recorrencia
(
(1)
se x x0
T (x) = P
a
T
(db
xe)
+
g(x)
caso
contrario
i
1ik i
demonstrando que obtemos a mesmo soluc
ao aplicando tetos.
Exemplo 6.9
Considere a recorrencia
T (n) = T (n/5) + T (7n/10 + 6) + O(n)
(que ocorre no algoritmo da selec
ao do k-esimo elemento). Primeiro temos
que achar um p tal que (1/5)p + (7/10)p = 1 que e o caso para p 0.84. Com
isso, teorema (6.1) afirma que
Z n
Z n
T (n) (np + (1 +
c1 u/up+1 du)) = (np (1 + c1
up du))
1
c1 1p
= (n (1 +
n ))
1p
c1
= (np +
n) = (n)
1p
p
Exemplo 6.10
Considere T (n) = 2T (n/2)+n log n do exemplo 6.7 (que nao pode ser resolvido
pelo teorema Master). 2(1/2)p = 1 define p = 1 e temos
Z n
T (n) (n + (1 +
log u/u du)) = (n(1 + [log2 (u)/2]n1 )
1
140
condic
oes exatas s
ao definidas em Leighton [47].
Exemplo 6.11
Considere T (n) = 2T (n/2) + n/ log n do exemplo 6.8 (que nao pode ser resolvido pelo teorema Master). Novamente p = 1 e temos
Z
T (n) (n + (1 +
A11
A21
A12
A22
B11
B21
B12
B22
=
C11
C21
C12
C22
.
141
6. Divis
ao e conquista
e possui soluc
ao T (n) = O(n3 ), que demonstra que essa abordagem nao e
melhor que algoritmo simples. Strassen inventou as equacoes
M1 = (A11 + A22 )(B11 + B22 )
M2 = (A21 + A22 )B11
M3 = A11 (B12 B22 )
M4 = A22 (B21 B11 )
M5 = (A11 + A12 )B22
M6 = (A21 A11 )(B11 + B12 )
M7 = (A12 A22 )(B21 + B22 )
C11 = M1 + M4 M5 + M7
C12 = M3 + M5
C21 = M2 + M4
C22 = M1 M2 + M3 + M6
(cuja verificac
ao e simples). Essas equac
oes contem somente sete multiplicac
oes de matrizes de tamanho n/2, que leva `a recorrencia
T (n) = 7T (n/2) + O(1)
para o n
umero de multiplicac
oes, cuja soluc
ao e T (n) = O(nlog2 7 ) = O(n2.81 ).
6.3.2. Menor dist
ancia
Dado pontos p1 , . . . , pn , pi no plano
uma abordagem direta de encontrar
o par de menor dist
ancia euclidiana
possui complexidade (n2 ). Usando
divis
ao e conquista um algoritmo de
complexidade O(n log n) e possvel.
A idea e ordenar os pontos por uma
coordenada, dividir em dois subconjuntos iguais, buscar o par de menor
dist
ancia em cada subconjunto e juntar os resultados. O candidato para
o par de menor dist
ancia e o par de
menor dist
ancia dos dois subconjuntos. A combinac
ao dos resultados
e o parte mais difcil deste algoritmo,
porque temos que tratar o caso que
142
143
6. Divis
ao e conquista
M (k, n)
Entrada
x1 x2 x3 x4 x5 x6
xn
Medianos
Mediano
Partic
ao
xi < m
Recurs
ao
k<i:
M (k, i 1)
xi m
i
k=i:
Encontrado
k>i:
M (k i, n i)
13
14
15
16
17
18
19
20
Observa
c
ao 6.2
O pre-processamento garante que podemos obter os pontos dos subproblemas
ordenados por x e por y em tempo linear. Ordenar os pontos na rotina leva a
recorrencia Tn = Tbn/2c + Tdn/2e + O(n log n) com solucao O(n log2 n).
6.3.3. Selec
ao
Dado um conjunto de n
umeros, o problema da selecao consiste em encontrar
o k-esimo maior elemento. Com ordenac
ao o problema possui solucao em
tempo O(n log n). Mas existe um outro algoritmo mais eficiente. Podemos
determinar o mediano de grupos de cinco elementos, e depois o recursivamente
o mediano m desses medianos. Com isso, o algoritmo particiona o conjunto
de n
umeros em um conjunto L de n
umeros menores que m e um conjunto R
de n
umeros maiores que m. O mediano m e na posicao i := |L| + 1 desta
144
1+
= (np (1 + (n
u
1
1p
du
= (c1 n + c2 n) = (n).
145
6. Divis
ao e conquista
12
13
14
15
16
e l s e i f i > k then
return S(k, L)
else
return S(k i, R)
end i f
6.3.4. Convoluc
oes
Dado duas sequencias a0 , . . . , an1 e b0 , . . . , bn1 de n n
umeros a convoluc
ao
e uma sequencia c0 , . . . , c2n2 de 2n 1 n
umeros definido por
X
ck =
ai bj .
(6.1)
(i,j):i+j=k
Os pr
oximos exemplos mostram a utilidade de convolucoes.
Exemplo 6.12 (Multiplica
c
ao de polin
omios)
Dois polin
omios em forma de coeficientes
X
A(x) =
ai xi ;
B(x) =
0i<n
bi xi
0i<n
possuem o produto
C(x) =
X
0i<n
ai xi
X
bi x i =
0i<n
aj bij ,
0i<2n1 0ji
cujos coeficientes s
ao convoluc
oes das coeficientes dos polinomios.
Exemplo 6.13
Dado duas vari
aveis aleat
orias inteiras X e Y com valor em [0, n), seja xi =
P [X = i] e yi = P [Y = i]. A distribuic
ao da variavel X + Y e
P [X + Y = k] =
xi yj ,
(i,j):i+j=k
uma convoluc
ao das distribuic
oes da vari
aveis individuais.
146
0j<n
Xk =
xj (k
+j 2 (kj)2 )/2
0j<n
= k
/2
(xj j
/2
) ((kj)
)/2
0j<n
que e a convoluc
ao
k
/2
aj bkj
0j<n
das sequencias aj = xj j
aplica para a inversa.
/2
e bj = j
/2
A convoluc
ao de duas sequencias pode ser calculado em O(n2 ), calculando
cada um dos 2n1 coeficientes da equac
ao (6.1) em tempo O(n). Para calcular
a convoluc
ao mais eficientemente, vamos focar no caso da multiplicacao de
polin
omios. Observando que um polin
omio de grau d e definido por d + 1
pontos o seguinte processo pode ser aplicado no exemplo 6.12:
Avaliac
ao Avalia A(x) e B(x) em 2n 1 pontos x1 , . . . , x2n1 . Trataremos
A(x) e B(x) como polin
omias de grau 2n2 com coeficientes ai = bi = 0
para i n para simplificar a discuss
ao que segue. O problema deste
passo ent
ao e avaliar um polin
omia de grau d em d + 1 pontos.
Multiplicac
ao Calcula C(xi ) = A(xi )B(xi ). C(x) possui grau 2n 1.
Interpolac
ao Determina os coeficientes de C(x).
Com isso a multiplicac
ao possui complexidade O(n). Para obter um algoritmo
mais eficiente que a abordagem direta temos que avaliar e interpolar em tempo
o(n2 ).
147
6. Divis
ao e conquista
Observa
c
ao 6.3
A avaliac
ao de um
pode ser escrito da
A(x0 )
A(x1 )
..
polin
omio A(x) de
forma
1
x0
x1
1
=
1 xn1
A(xn1 )
x20
x21
x2n1
a
0
xn1
0
n1 a1
x1
..
xn1
n1
an1
P
Avaliac
ao em O(n log n) A avaliac`
ao de A(x) = 0i<n ai xi pode ser separado em contribuic
oes pares e impares
X
X
A(x) =
ai x2i +
ai x2i+1 = Ap (x2 ) + xAi (x2 )
02i<n
02i+1<n
com
Ap (x) =
X
02i<n
ai xi ;
Ai (x) =
ai xi .
02i+1<n
148
1, i, 1, i
1, 1
1
f f t ( a0 , . . . , an1 , ) :=
i f = 1 return A(1)
{ A(x) = Ap (x2 ) + xAi (x2 ) }
f f t ( a0 , a2 , . . . , an2 , 2 ) { avalia Ap }
f f t ( a1 , a3 , . . . , an1 , 2 ) { avalia Ai }
f o r j [0, n) do
A( j ) = Ae ( 2j ) + wj Ai ( 2j )
return A( 0 ), . . . , A( n1 )
Observac
ao: O algoritmo funciona igualmente para 1 .
Interpolac
ao em O(n log n) A matriz de avaliac
ao usando as raizes complexas e
1
0
0
0
1
1
2
n1
ij
2
4
2(n1)
V = V () := 1
= ( )i,j
1 n1 2n2 (n1)(n1)
Pela observac
ao 6.3 essa matriz possui inversa e a interpolacao e simplesmente
a multiplicac
ao com essa inversa.
149
6. Divis
ao e conquista
Observa
c
ao 6.4
Uma matriz unit
aria
lj ( lk ) = 1/n
0l<n
( jk )l =
0l<n
1 (jk)n
= [j = k]
1 jk
O pen
ultimo passo e justificado porque se trata de uma serie geometrica, e o
u
ltimo passo porque n = 1 tal que o produto e 0, exceto no caso j = k em
que a soma e n.
Logo V V = nI que implica V 1 = V /n = V ( 1 )/n. Essa u
ltima observac
ao nos fornece uma maneira f
acil de interpolar n valores A( 0 ), . . . , A( n1 ):
e suficiente chamar
1
f f t ( A( 0 ), . . . , A( n1 ) , 1 )
6.4. Notas
O algoritmo 6.4 para multiplicar n
umeros binarios se aplica igualmente para
n
umeros em bases arbitr
arias. Ele e conhecido como algoritmo de Karatsuba [41]. Um algoritmo mais eficiente e do Schonhage e Strassen [59] que
multiplica em O(n log n log log n). F
urer [27] apresenta um algoritmo que mul
tiplica em n log n 2O(log n) , um pouco acima do limite inferior (n log n).
6.5. Exerccios
(Soluc
oes a partir da p
agina 316.)
Exerccio 6.1
Resolva as seguintes recorrencias
1. T (n) = 9T (n/3) + n
2. T (n) = T (2n/3) + 1
150
6.5. Exerccios
3. T (n) = 3T (n/4) + n log n
4. T (n) = 2T (n/2) + n log n
5. T (n) = 4T (n/2) + n2 lg n
6. T (n) = T (n 1) + log n
7. T (n) = 2T (n/2) + n/ log n
8. T (n) = 3T (n/2) + n log n
Exerccio 6.2
Aplique o teorema mestre nas seguintes recorrencias:
1. T (n) = 9T (n/3) + n
2. T (n) = T (2n/3) + 1
3. T (n) = 3T (n/4) + n log n
4. T (n) = 2T (n/2) + n log n
Exerccio 6.3
Prove a complexidade do algoritmo 6.4 por induc
ao. Porque a prova com a
hip
otese T (n) cnlog2 3 falha? Qual e uma hip
otese que permite demonstrar
a complexidade?
Exerccio 6.4
Prove a complexidade do algoritmo de Strassen (p
agina 141) usando o metodo
da arvore de recurs
ao e por induc
ao.
Exerccio 6.5
Prove a complexidade do algoritmo da selec
ao (p
agina 145) do k-esimo elemento usando o metodo da
arvore de recurs
ao.
Exerccio 6.6
A recorrencia na an
alise do algoritmo de Strassen leva em conta somente
multiplicac
oes. Determina e resolve a recorrencia das multiplicacoes e adicoes.
Exerccio 6.7
Porque o algoritmo 6.10 para selecionar o k-esimo elemento nao trabalha com
grupos de tres elementos? Analisa a complexidade do algoritmo neste caso.
151
7. Arvores
de busca, backtracking e
branch-and-bound
7.1. Backtracking
Motivac
ao
Conhecemos diversas tecnicas para resolver problemas.
O que fazer se eles n
ao permitem uma soluc
ao eficiente?
Para resolver um problema: pode ser necess
ario buscar em todo espaco
de soluc
ao.
Mesmo nesse caso, a busca pode ser mais ou menos eficiente.
Podemos aproveitar
restric
oes conhecidas: Backtracking (retrocedimento).
limites conhecidos: Branch-and-bound (ramifique-e-limite).
Backtracking: Arvore
de busca
Seja uma soluc
ao dado por um vetor (s1 , s2 , . . . , sn ) com si Si .
Queremos somente soluc
oes que satisfazem uma propriedade Pn (s1 , . . . , sn ).
Ideia: Refinar as busca de forca bruta, aproveitando restricoes cedo
Define propriedades Pi (s1 , . . . , si ) tal que
Pi+1 (s1 , . . . , si+1 ) Pi (s1 , . . . , si )
Backtracking: Arvore
de busca
A arvore de busca T = (V, A, r) e definido por
V = {(s1 , . . . , si ) | Pi (s1 , . . . , si )}
A = {(v1 , v2 ) V | v1 = (s1 , . . . , si ), v2 = (s1 , . . . , si+1 )}
r = ()
153
7. Arvores
de busca, backtracking e branch-and-bound
Backtracking busca nessa
arvore em profundidade.
Observe que e suficiente manter o caminho da raiz ate o nodo atual na
mem
oria.
s1 S1
s2 S2
s2 S2
154
7.1. Backtracking
n2
n
2n
n n
e
(1 + O(1/n))
(7.1)
155
7. Arvores
de busca, backtracking e branch-and-bound
Backtracking
Testa soluc
oes sistematicamente ate que a solucao esperada seja encontrada
Durante a busca, se a inserc
ao de um novo elemento nao funciona,
o algoritmo retorna para a alternativa anterior (backtracks) e tenta um
novo ramo
Quando n
ao h
a mais elementos para testar, a busca termina
apresentado como um algoritmo recursivo
E
O algoritmo mantem somente uma solucao por vez
Backtracking
Durante o processo de busca, alguns ramos podem ser evitados de ser
explorados
1. O ramo pode ser infactvel de acordo com restricoes do problema
2. Se garantidamente o ramo n
ao vai gerar uma solucao otima
O problema do caixeiro viajante
Encontrar uma rota de menor dist
ancia tal que, partindo de uma cidade inicial,
visita todas as outras cidades uma u
nica vez, retornando `a cidade de partida
ao final.
156
7.1. Backtracking
a
a
b
c
a b ca b ca b c
a b ca b ca b c
a b ca b ca b c
157
7. Arvores
de busca, backtracking e branch-and-bound
7.1.1. Exemplo: Cobertura por v
ertices
Considere
rtices (ingl. vertex cover)
Cobertura por ve
Inst
ancia Grafo n
ao-direcionado G = (V, E).
Soluc
ao Uma cobertura C V , i.e. e E : e C 6= .
Objetivo Minimiza |C|.
rtices e NP-completo.
A vers
ao de decis
ao de Cobertura por ve
O que fazer?
2
1
6
5
23
20
7
10
21
22
25
19
14
24
18
15
12
17
16
13
11
Simplificando o problema
Vertice de grau 1: Usa o vizinho.
Vertice de grau 2 num tri
angulo: Usa os dois vizinhos.
158
7.1. Backtracking
Reduz ( G ) :=
while ( alguma r e g r a em b a i x o s e a p l i c a ) do
Regra 1 :
i f u V : deg(u) = 1 then
s e j a {u, v} E
C := C {v}
G := G {u, v}
end i f
Regra 2 :
i f u V : deg(u) = 2 then
s e j a {u, v}, {u, w} E
i f {v, w} E then
C := C {v, w}
G := G {u, v, w}
end i f
end while
return (C, G)
Uma soluc
ao exata com busca exaustiva:
Arvore
de busca
minVertexCover ( G):=
i f E = return
e s c o l h e {u, v} E
159
7. Arvores
de busca, backtracking e branch-and-bound
4
5
6
C1 := minVertexCover(G u) {u}
C2 := minVertexCover(G v) {v}
return a menor c o b e r t u r a C1 ou C2
Soluc
ao
otima?
2
1
6
5
23
20
7
10
21
22
25
19
14
24
18
15
12
17
16
13
11
A complexidade da soluc
ao acima satisfaz Tn = 2Tn1 + (n) = (2n ).
Observa
c
ao 7.1
Caso o grau m
aximo de G e 2, o problema pode ser resolvido em
tempo O(n), porque G e uma colec
ao de caminhos simples e ciclos.
Caso contr
ario, temos ao menos um vertice v de grau v 3. Ou esse
vertice faz parte da cobertura mnima, ou todos seus vizinhos N (v) (ver
figura 7.1).
1 mvc0 (G) :=
2
i f (G) 2 then
3
d e t e r m i n a a c o b e r t u r a mnima C em tempo O(n)
4
return C
5
end i f
6
s e l e c i o n a um v e r t i c e v com grau v 3
160
7.1. Backtracking
161
7. Arvores
de busca, backtracking e branch-and-bound
9
8
7
6
5
4
3
5
4
4
3
5
4
2
1
3
2
2
1
Arvore
de busca [53]
x1 x2 x3
T(n)
x1 x2 x3
x1 x2 x3
x1 x2 x3
= T(n-1)
+ T(n-2)
+ T(n-3)
Vetor de bifurcac
ao (1, 2, 3).
Polin
omio caracterstico: z 3 z 2 z 1 1.
Maior raiz: 1.84.
N
umero de folhas: (n ).
Complexidade: O(n ).
Exemplo 7.1 (Conjunto independente m
aximo)
162
7.2. Branch-and-bound
ximo
Conjunto independente ma
Inst
ancia Um grafo n
ao-direcionado G = (V, E).
Soluc
ao Um conjunto independente M V , i.e. para todo m1 , m2 V
temos {m1 , m2 } 6 E.
Objetivo Maximiza a cardinalidade |M |.
Uma abordagem similar com a cobertura por vertices resolve o problema: caso
o grau m
aximo do grafo e dois, o problema possui uma solucao em tempo
linear. Caso contr
ario existe ao menos um vertice de grau tres. Caso o vertice
faz parte do conjunto independente m
aximo podemos remover {v} N (v)
do grafo, para encontrar a conjunto independente maximo no grafo restante.
Caso contr
ario podemos remover v. Com isso obtemos a recorrencia
T (n) T (n 1) + T (n 4)
para o n
umero de folhas da
arvore de busca. A recorrencia possui solucao
O(1.39n ), melhor que a abordagem direta de testar os 2n subconjuntos.
7.2. Branch-and-bound
Branch-and-bound
Ramifica-e-limite (ingl. branch-and-bound)
Tecnica geral para problemas combinatoriais.
Branch and Bound is by far the most widely used tool for
solving large scale NP-hard combinatorial optimization problems. [12]
Ideia b
asica:
Particiona um problema em subproblemas disjuntos e procura solucoes
recursivamente.
Evite percorrer toda
arvore de busca, calculando limites e cortando
sub-
arvores.
Particularmente efetivo para programas inteiras: a relaxacao linear fornece os limites.
163
7. Arvores
de busca, backtracking e branch-and-bound
Limitar
Para cada sub-
arvore mantemos um limite inferior e um limite superior.
Limite inferior: Valor da melhor solucao encontrada na sub-arvore.
Limite superior: Estimativa (p.ex. valor da relaxacao linear na PI)
Observac
ao: A eficiencia do metodo depende crucialmente da qualidade
do limite superior.
Cortar sub-
arvores
Podemos cortar...
1. por inviabilidade: Sub-problema e invi
avel.
2. por limite: Limite superior da sub-
arvore zi menor que limite inferior
global z (o valor da melhor soluc
ao encontrada).
3. por otimalidade: Limite superior zi igual limite inferior zi da sub-arvore.
4. Observac
ao: Como os cortes dependem do limite z, uma boa solucao
inicial pode reduzir a busca consideravelmente.
Ramificar
N
ao tem como cortar mais? Escolhe um no e particiona.
Qual a melhor ordem de busca?
Busca por profundidade
V: Limite superior encontrado mais rapido.
V: Pouca mem
oria (O(d), para subproblemas e profundidade d).
V: Re-otimizac
ao eficiente do pai (metodo Simplex dual)
D: Custo alto, se soluc
ao
otima encontrada tarde.
Melhor soluc
ao primeiro (best-bound rule)
V: Procura ramos com maior potencial.
V: Depois encontrar soluc
ao
otima, nao produz ramificacoes superfluas.
Busca por largura? Demanda de mem
oria e impraticavel.
164
7.2. Branch-and-bound
Algoritmos B&B
{ usando fun
c
a o z para estimar l i m i t e superior }
{ limite inferior }
z:=
A:= {(P, g(P ))}
{ n
o s ativos }
while A 6= do
E s c o l h e : (P, g(P ) A ; A := A \ (P, g(P ))
Ramifique : Gera subproblemas P1 , . . . , Pn .
f o r a l l Pi , 1 i n do
{ adiciona , se permite melhor solu
c
ao }
i f z(Pi ) > z then
A := A {(Pi , z(Pi ))}
end i f
{ a t u a l i z e melhor solu
c
ao }
i f ( s o l u c a
o z(Pi ) e v i a
v e l ) then
z := z(Pi )
end i f
end f o r
end while
1
1
2
1
3
3
2
1
4
165
7. Arvores
de busca, backtracking e branch-and-bound
0
5
2
2
6
3
3
6
45
5
7
5
6
7
2
6
5
3
6
35
2
3
3
6
6
34 45
3
7
5
4
7
2
5
8
6 5 4 6 44 4
8 7 6 8 66 6
4 5 3 4 35 4
7
8
65
76
1
5
5
2
2
5
34
3
5
4
4
4
7
2
5
23
3
5
3
5
6
3
5
3
5
6
4
5
A
arvore de backtracking completa possui 65 vertices (por nvel: 1,4,12,24,24).
Usando como limite inferior o custo atual mais o n
umero de arcos que faltam
vezes a dist
ancia mnima e aplicando branch&bound obtemos os custos parciais e limites indicados na direita de cada vertice. Com isso podemos aplicar
uma seria de cortes: busca da esquerada para direito obtemos
uma nova soluc
ao 7 em 2345;
um corte por limite em 235;
um corte por otimalidade em 243;
um corte por otimalidade em 2453;
um corte por limite em 253;
um corte por otimalidade em 2543;
uma nova soluc
ao 6 em 3245;
um corte por otimalidade em 32;
um corte por otimalidade em 3;
166
4
6
7.2. Branch-and-bound
um corte por limite em 4;
um corte por otimalidade em 5234;
um corte por otimalidade 5243;
um corte por limite em 53;
um corte por otimalidade 543.
Problema de Enumerac
ao de conjuntos
167
7. Arvores
de busca, backtracking e branch-and-bound
o de conjuntos
Enumerac
a
Inst
ancia Um conjunto de n itens S=a1 , a2 , a3 , ...an .
Soluc
ao Enumerac
ao de todos os subconjuntos de S.
A enumerac
ao de todos os conjuntos gera uma solucao de custo exponencial 2n .
Problema da Mochila
Problema da Mochila
Inst
ancia Um conjunto de n itens a1 , a2 , ...an e valores de importancia
vi e peso wi referentes a cada elemento i do conjunto; um valor K
referente ao limite de peso da mochila.
Soluc
ao Quais elementos selecionar de forma a maximizar o valor total
de import
ancia dos objetos da mochila e satisfazendo o limite de
peso da mochila?
168
7.2. Branch-and-bound
Objetivo Minimizar o n
umero de cores |C|.
Colorac
ao de grafos de intervalo e um problema polinomial.
Para um grafo qualquer este problema e NP-completo.
Dois n
umeros s
ao interessantes nesse contexto:
O n
umero de clique (G): O tamanho m
aximo de uma clique que
se encontra como sub-grafo de G.
O n
umero crom
atico (G): O n
umero mnimo de cores necessarias
para colorir G.
Obviamente: (V ) (G)
Um grafo G e perfeito, se (H) = (H) para todos sub-grafos H.
Verificar se o grafo permite uma 2-colorac
ao e polinomial (grafo bipartido).
Um grafo k-partido e um grafo cujos vertices podem ser particionados
em k conjuntos disjuntos, nos quais n
ao h
a arestas entre vertices de um
mesmo conjunto. Um grafo 2-partido e o mesmo que grafo bipartido.
Colorac
ao de Grafos
A colorac
ao de mapas e uma abstrac
ao do problema de colorir vertices.
Projete um algoritmo de backtracking para colorir um grafo planar
(mapa).
Um grafo planar e aquele que pode ser representado em um plano sem
qualquer intersecc
ao entre arestas.
Algoritmo O(nn ), supondo o caso em que cada area necessite uma cor
diferente
Teorema de Kuratowski: um grafo e planar se e somente se nao possuir
minor K5 ou K3,3 .
Teorema das Quatro Cores: Todo grafo planar pode ser colorido com
ate quatro cores (1976, Kenneth Appel e Wolfgang Haken, University of
Illinois)
169
7. Arvores
de busca, backtracking e branch-and-bound
Qual o tamanho m
aximo de um clique de um grafo planar?
Algoritmo O(4n ), supondo todas combinacoes de area com quatro cores.
Existem 3n1 soluc
oes possveis (algoritmo O(3n )) supondo que duas
areas vizinhas nunca tenham a mesma cor.
f
a
e
d
f
a
f
a
e
d
(Precisamos de 4 cores!)
Backtracking
170
7.2. Branch-and-bound
c
d
e
171
7. Arvores
de busca, backtracking e branch-and-bound
d
e
c
d
e
Precisamos
de 3 cores!
Colorac
ao de Grafos
Existe um algoritmo O(n2 ) para colorir um grafo com 4 cores (1997,
Neil Robertson, Daniel P. Sanders, Paul Seymour).
Mas talvez sejam necess
arias menos que 4 cores para colorir um grafo!
Decidir se para colorir um grafo planar sao necessarias 3 ou 4 cores e
um problema NP-completo.
De quantas cores precisamos?
b
c
Roteamento de Veculos
Roteamento de Veculos
172
7.2. Branch-and-bound
Inst
ancia Um grafo G=(V,A), um dep
osito v0 , frota de veculos com capacidade Q (finita ou infinita), demanda qi > 0 de cada no (q0 = 0,
dist
ancia di > 0 associada a cada aresta
Soluc
ao Rotas dos veculos.
Objetivo Minimizar a dist
ancia total.
173
7. Arvores
de busca, backtracking e branch-and-bound
Exemplo do Problema da Mochila: enumerar os 2n subconjuntos e
retornar aquele com melhor resultado.
Branch&Bound: usa a estrategia de backtracking
usa limitantes inferior (relaxac
oes) e superior (heursticas e propriedades) para efetuar cortes
explora a
arvore da forma que convier
aplicado apenas a problemas de otimizacao.
M
etodos Exatos
Problemas de Otimizac
ao Combinat
oria: visam minimizar ou maximizar
um objetivo num conjunto finito de solucoes.
Enumeracao: Backtracking e Branch&Bound.
Uso de cortes do espaco de busca: Planos de Corte e Branch&Cut.
Gerac
ao de Colunas e Branch&Price.
M
etodos n
ao exatos
Algoritmos de aproximac
ao: algoritmos com garantia de aproximacao
S = S .
Heursticas: algoritmos aproximados sem garantia de qualidade de solucao.
Ex: algoritmos gulosos n
ao
otimos, busca locais, etc.
Metaheursticas: heursticas guiadas por heursticas (meta=alem + heuriskein = encontrar).
Ex: Algoritmos geneticos, Busca Tabu, GRASP (greedy randomized
adaptive search procedure), Simulated annealing, etc.
7.3. An
alisar
arvores de busca
As recorrencias obtidas na an
alise de
arvores de busca geralmente nao podem
ser resolvidos pelo teorema de Akra-Bazzi, porque o tamanho da instancia
diminui somente por uma constante. Aplicaremos uma tecnica geral para
resolver recorrencias no nossa caso particular.
174
Teorema 7.1 (General expansion theorem for rational generating functions [32, cap. 7.3])
Caso G(z) = P (z)/Q(z) com Q(z) = q0 (11 z)m1 (1l z)ml com 1 , . . . , l
n
umeros diferentes, e P (z) e um polin
omio de grau menos que m1 + + ml
ent
ao
[z n ]G(z) = f1 (n)n1 + + fl (n)nl
para todo n 0
(7.2)
i[k]
i tndi
n max1ik di
caso contr
ario
175
7. Arvores
de busca, backtracking e branch-and-bound
Prova. A recorrencia satisfaz
X
tn =
i tndi + c[0 n < d]
i[k]
e logo obtemos
G(z) =
tn z n =
i z di G(z) + c
i[k]
zi
i[d1]
e assim
G(z) =
i[d1]
i[k]
zi
i z di
P
c i[d1] z i
P
=
i[0,k] i z di
176
8. Algoritmos de aproximac
ao
8.1. Introduc
ao
Problemas de otimizac
ao
Defini
c
ao 8.1
Um problema de otimizac
ao e uma relac
ao bin
aria P I S com instancias
x I e soluc
oes y S, tal que (x, y) P e com
uma func
ao de otimizac
ao (func
ao de objetivo) : P N (ou Q).
um objetivo: Encontrar mnimo ou m
aximo OPT(x) = opt{(x, y) |
(x, y) P}.
Tipo de problemas
Construc
ao: Dado x, encontra soluc
ao
otima y e o valor (x).
Avaliac
ao: Dado x, encontra valor
otimo OPT(x).
Decis
ao: Dado x, k N, decide se OPT(x) k (maximizacao) ou
OPT(x) k (minimizac
ao).
Convenc
ao
Escrevemos um problema de otimizac
ao na forma
Nome
Inst
ancia x
Soluc
ao y
Objetivo Minimiza ou maximiza (x, y).
177
8. Algoritmos de aproximac
ao
Classes de complexidade
PO: Problemas de otimizac
ao com algoritmo polinomial.
NPO: Problemas de otimizac
ao tal que
1. Inst
ancias reconhecveis em tempo polinomial.
2. A relac
ao P e polinomialmente limita.
3. Para y arbitr
ario, polinomialmente limitado: (x, y) P decidvel
em tempo polinomial.
4. e comput
avel em tempo polinomial.
NPO contem todos problemas de otimizacao, que satisfazem criterios
mnimos de tratabilidade.
Lembranca (veja definic
ao 13.1): P e polinomialmente limitada, se para solucoes
(x, y) P temos |y| p(|x|), para um polin
omio p.
Motivac
ao
Para v
arios problemas n
ao conhecemos um algoritmo eficiente.
No caso dos problemas NP-completos: solucao eficiente e pouco provavel.
O quer fazer?
Ideia: Para problemas da otimizac
ao, n
ao busca o otimo.
Uma solucao quase
otimo tambem ajuda.
O que
e quase? Aproximac
ao absoluta
A soluc
ao encontrada difere da soluc
ao
otima ao maximo um valor constante.
Erro absoluto:
D(x, y) = |OPT(x) (x, y)|
Aproximac
ao absoluta: Algoritmo garante um y tal que D(x, y) k.
Exemplos: Colorac
ao de grafos,
arvore geradora e arvore Steiner de grau
mnimo [28]
Contra-exemplo: Knapsack.
178
8.1. Introducao
O que
e quase? Aproximac
ao relativa
A soluc
ao encontrada difere da soluc
ao
otima ao maximo um fator constante.
Erro relativo:
E(x, y) = D(x, y)/ max{OPT(x), (x, y)}.
Algoritmo -aproximativo ( [0, 1]): Fornece solucao y tal que E(x, y)
para todo x.
Soluc
oes com 0 s
ao
otimas.
Soluc
oes com 1 s
ao pessimas.
Aproximac
ao relativa: Taxa de aproximac
ao
Definic
ao alternativa
Taxa de aproximac
ao R(x, y) = 1/(1 E(x, y)) 1.
Com taxa r, o algoritmo e r-aproximativo.
(N
ao tem perigo de confus
ao com o erro relativo, porque r [1, ].)
Aproximac
ao relativa: Exemplos
Exemplo: Knapsack, Caixeiro viajante metrico.
Contra-exemplo: Caixeiro viajante [67].
Classe correspondente APX: r-aproximativo em tempo polinomial.
Aproximac
ao relativa
Maximizao
Minimizao
179
8. Algoritmos de aproximac
ao
Exemplo: Cobertura por v
ertices gulosa
VC GV( G ) :=
(C, G) := Reduz ( G )
i f V = then
return C
else
e s c o l h e v V : deg(v) = (G) { grau m
aximo }
return C {v} VC-GV(G v)
end i f
Proposi
c
ao 8.1
O algoritmo VC-GV e uma O(log |V |)-aproximacao.
Prova. Seja Gi o grafo depois da iterac
ao i e C uma cobertura otima, i.e.,
|C | = OPT(G).
A cobertura
otima C e uma cobertura para Gi tambem. Logo, a soma dos
graus dos vertices em C (contando somente arestas em Gi !) ultrapassa o
n
umero de arestas em Gi
X
Gi (v) kGi k
vC
Gi (Gi ) = vC i
=
.
|C |
|C |
OPT(G)
Como o grau m
aximo e maior que o grau medio temos tambem
(Gi )
Com isso podemos estimar
X
(Gi )
0i<OPT
kGi k
.
OPT(G)
X
kGi k
kGOPT k
|OPT(G)|
|OPT(G)|
0i<OPT
0i<OPT
X
= kGOPT k = kGk
(Gi )
X
0i<OPT
180
8.1. Introducao
ou
X
(Gi ) kGk/2
0i<OPT
i.e. a metade das arestas foi removido em OPT iteracoes. Essa estimativa
continua a ser v
alido, logo depois
OP T dlg kGke OP T d2 log |G|e = O(OP T log |G|)
iteracoes n
ao tem mais arestas. Como em cada iteracao foi escolhido um
vertice, a taxa de aproximac
ao e log |G|.
Exemplo: Buscar uma Cobertura por v
ertices
VC B( G ) :=
(C, G) := Reduz ( G )
i f V = then
return C
else
e s c o l h e v V : deg(v) = (G) { grau m
aximo }
C1 := C {v} VC-B(G v)
C2 := C N (v) VC-B(G v N (v))
i f |C1 | < |C2 | then
return C1
else
return C2
end i f
end i f
Aproximac
ao: Motivac
ao
Queremos uma aproximac
ao
Quais soluc
oes s
ao aproximac
oes boas?
Problemas:
181
8. Algoritmos de aproximac
ao
Tempo polinomial desejada
Aproximac
ao desejada (heurstica com garantia)
Freq
uentemente: a an
alise e o problema. Intuicao:
Simples verificar se um conjunto e uma cobertura.
Difcil verificar a minimalidade.
Exemplo: Outra abordagem
VC GE( G ) :=
(C, G) := Reduz ( G )
i f E = then
return C
else
e s c o l h e e = {u, v} E
return C {u, v} VC-GE(G {u, v})
end i f
Proposi
c
ao 8.2
Algoritmo VC-GE e uma 2-aproximac
ao para VC.
Prova. Cada cobertura contem ao menos um dos dois vertices escolhidos, i.e.
|C| VC-GE (G)/2 2OPT(G) VC-GE (G)
T
ecnicas de aproximac
ao
Aproximac
oes gulosas
Randomizac
ao
Busca local
Programac
ao linear
182
8.1. Introducao
Programac
ao din
amica
Algoritmos seq
uenciais (online), p.ex. para particionamento.
Exemplo 8.1
Sequenciamento em processores paralelos
Entrada m processadores, n tarefas com tempo de execucao li , 1 i n.
Soluc
ao Um sequenciamento S : [n] [m], i.e., uma alocacao das tarefas
as m
`
aquinas.
Objetivo Minimizar
o
P
maxj[m] in|S(i)=j li .
makespan
(tempo
terminal)
P
O problema e NP-completo. Seja W =
in li o tempo total (workload).
Sabemos que S W/m e tambem que S li , 1 i n.
Uma classe de algoritmos gulosos para este problema sao os algoritmos de
sequenciamento em lista (ingles: list scheduling). Eles processam as tarefas
em alguma ordem, e alocam a tarefa atual sempre `a maquina com menor
tempo final.
Proposi
c
ao 8.3
Sequenciamento em lista com ordem arbitr
aria e uma 2 1/m-aproximacao.
Prova. Seja h [m] a m
aquina que define o makespan da solucao gulosa, e
k [n] a u
ltima tarefa alocada `
a essa m
aquina. No momento em que essa
tarefa
foi
alocada,
todas
as
outras
m
a
quinas
estavam com tempo ao menos
P
l
l
,
portanto
k
i:S(i)=h i
li lk + lk W
i:S(i)=h
li (W + (p 1)lk )/p
i:S(i)=h
183
8. Algoritmos de aproximac
ao
O que podemos ganhar com algoritmos off-line? Uma abordagem e ordenar as
tarefas por tempo execuc
ao n
ao-crescente e aplicar o algoritmo guloso. Essa
abordagem e chamada LPT (largest process first).
Proposi
c
ao 8.4
LPT e uma 4/3 1/3p-aproximac
ao.
Prova. Por an
alise de casos. TBD.
8.2. Aproximac
oes com randomizac
ao
Randomizac
ao
Ideia: Permite escolhas rand
omicas (joga uma moeda)
Objetivo: Algoritmos que decidem correta com probabilidade alta.
Objetivo: Aproximac
oes com valor esperado garantido.
Minimizac
ao: E[A (x)] 2OPT(x)
Maximizacao: 2E[A (x)] OPT(x)
Randomizac
ao: Exemplo
xima, Maximum SAT
Satisfatibilidade ma
Inst
ancia F
ormula L(V ), = C1 C2 Cn em FNC.
Soluc
ao Uma atribuic
ao de valores de verdade a : V B.
Objetivo Maximiza o n
umero de cl
ausulas satisfeitas
|{Ci | [[Ci ]]a = v}| .
Nossa soluc
ao
1 SATR( ) :=
2
s e j a = (v1 , . . . , vk )
3
f o r a l l i [1, k] do
4
e s c o l h e vi = v com p r o b a b i l i d a d e 1/2
5
end f o r
184
1ik
Outro exemplo
Cobertura por vertices guloso e randomizado.
1 VCRG( G ) :=P
2
seja w
:= vV deg(v)
3
C :=
4
while E =
6 do
5
e s c o l h e v V com p r o b a b i l i d a d e deg(v)/w
6
C := C {v}
7
G := G v
8
end while
9
return C V
Resultado: E[VC-RG (x)] 2OPT(x).
8.3. Aproximac
oes gulosas
Problema de mochila (Knapsack)
Knapsack
Inst
ancia Itens X = [1, n] com valores vi N e tamanhos ti N , para
i X, um limite M , tal que ti M (todo item cabe na mochila).
P
Soluc
ao Uma selec
ao S X tal que iS ti M .
P
Objetivo Maximizar o valor total iS vi .
Observac
ao: Knapsack e NP-completo.
185
8. Algoritmos de aproximac
ao
Como aproximar?
Ideia: Ordene por vi /ti (valor medio) em ordem decrescente e enche
o mochila o mais possvel nessa ordem.
Abordagem
1 KG( vi , ti ) :=
2
o r d e n e o s i t e n s t a l que vi /ti vj /tj , i < j .
3
f o r i X do
4
i f ti < M then
5
S := S {i}
6
M := M ti
7
end i f
8
end f o r
9
return S
Aproximac
ao boa?
Considere
v1 = 1, . . . , vn1 = 1, vn = M 1
t1 = 1, . . . , tn1 = 1, tn = M = kn
k N arbitrario
Ent
ao:
v1 /t1 = 1, . . . , vn1 /tn1 = 1, vn /tn = (M 1)/M < 1
K-G acha uma soluc
ao com valor (x) = n1, mas o otimo e OPT(x) =
M 1.
Taxa de aproximac
ao:
OPT(x)/(x) =
M 1
kn 1
kn k
=
=k
n1
n1
n1
K-G n
ao possui taxa de aproximac
ao fixa!
Problema: N
ao escolhemos o item com o maior valor.
186
tj =
ti M
(8.2)
1i<j
187
8. Algoritmos de aproximac
ao
decrescente, obtemos um limite superior para a solucao otima preenchendo
esse espaco com a densidade vj /tj :
OPT(x) vj + (M tj )
vj
< vj + vj .
tj
Problemas de particionamento
Bin packing
Inst
ancia Seq
uencia de itens v1 , . . . , vn , vi ]0, 1], vi Q+
S
P
Soluc
ao Partic
ao 1ik Pi = [1, n] tal que
jP i vj 1 para todos
i [1, n].
Objetivo Minimiza o n
umero de partic
oes (containeres) k.
Abordagem?
Ideia simples: Pr
oximo que cabe (PrC).
188
Aproximac
ao?
Interessante: PrC e 2-aproximac
ao.
Observac
ao: PrC e um algoritmo on-line.
P
Prova. Seja B o n
umero de containeres usadas, V = 1in vi . B 2 dV e
porque duas containeres consecutivas contem uma soma > 1. Mas precisamos
ao menos B dV e containeres, logo OPT(x) dV e. Portanto, PrC (x)
2 dV e 2OPT(x).
Aproximac
ao melhor?
Isso e o melhor possvel!
Considere os 4n itens
1/2, 1/(2n), 1/2, 1/(2n), . . . , 1/2, 1/(2n)
|
{z
}
2n vezes
189
8. Algoritmos de aproximac
ao
O que faz PrC? PrC (x) = 2n: containeres com
Otimo:
n containeres com dois elementos de 1/2 + um com 2n elementos
de 1/(2n). OPT(x) = n = 1.
190
191
8. Algoritmos de aproximac
ao
Aproximac
ao melhor?
Tese doutorado D. S. Johnson, 1973, 70 pag
PiCD (x)
11
OPT(x) + 4
9
PiCD (x)
11
OPT(x) + 3
9
Baker, 1985
192
vi ).
iS
2t vi /2t
vi 2 t
(A.10)
iS
iS
X
vi
2t |S |
iS
OPT(I) 2t n
Portanto
OPT(I) MM-PTAS (I, S) + 2t n MM-PTAS (I, S) +
2t n
OPT(I) 1
MM-PTAS (I, S)
vmax
OPT(x) t
2n
vmax
193
8. Algoritmos de aproximac
ao
8
o problema do mochila m
ultiplo com complexidade O(n12(log 1/)/e )
(Chekuri, Kanna, 2000);
o problema do conjunto independente m
aximo em grafos com complexi2
2
2
2
dade O(n(4/)(1/ +1) (1/ +2) ) (Erlebach, 2001).
Para obter uma aproximac
ao com 20% de erro, i.e. = 0.2 obtemos algoritmos
com complexidade O(n15000 ), O(n375000 ) e O(n523804 ), respectivamente!
8.5. Exerccios
Exerccio 8.1
Um aluno prop
oe a seguinte heurstica para Binpacking: Ordene os itens em
ordem crescente, coloca o item com peso m
aximo junto com quantas itens de
peso mnimo que e possvel, e depois continua com o segundo maior item, ate
todos itens foram colocados em bins. Temos o algoritmo
1 o r d e n e i t e n s em ordem c r e s c e n t e
2 m := 1 ; M := n
3 while ( m < M ) do
4
a b r e novo c o n t a i n e r , c o l o c a vM , M := M 1
5
while ( vm cabe e m < M ) do
6
c o l o c a vm no c o n t a i n e r a t u a l
7
m := m + 1
8
end while
9 end while
um algoritmo de aproximacao? Caso
Qual a qualidade desse algoritmo? E
sim, qual a taxa de aproximac
ao dele? Caso nao, por que?
Exerccio 8.2
Prof. Rapidez prop
oe o seguinte pre-processamento para o algoritmo SAT-R de
aproximac
ao para MAX-SAT (p
agina 184): Caso a instancia contem cla
usulas
com um u
nico literal, vamos escolher uma delas, definir uma atribuicao parcial
que satisfaze-la, e eliminar a vari
avel correspondente. Repetindo esse procedimento, obtemos uma inst
ancia cujas cla
usulas tem 2 ou mais literais. Assim,
obtemos l 2 na an
alise do algoritmo, o podemos garantir que E[X] 3n/4,
i.e. obtemos uma 4/3-aproximac
ao.
Este an
alise e correto ou n
ao?
194
Parte III.
Algoritmos
195
9. Algoritmos em grafos
197
9. Algoritmos em grafos
e (v)
f (v) =
X X
fe
vV e + (v)
vV
X
(v,u)E
f(v,u)
fe
e (v)
f(u,v) = 0
(u,v)E
198
Lema 9.2
Um fluxo st satisfaz f (s) + f (t) = 0.
P
P
Prova. Pelo lema 9.1 temos vV f (v) = 0. Mas vV f (v) = f (s) + f (t)
pela conservac
ao de fluxo nos vertices em V \ {s, t}.
Uma formulac
ao como programa linear e
maximiza
sujeito a
f (s)
f (v) = 0
0 fe ce
(9.2)
v V \ {s, t}
e E.
Observa
c
ao 9.1
O programa (9.2) possui uma soluc
ao, porque fe = 0 e uma solucao viavel. O
sistema n
ao e ilimitado, porque todas vari
aveis s
ao limitadas, e por isso possui
uma soluc
ao
otima. O problema de encontrar um fluxo st maximo pode ser
resolvido em tempo polinomial via programac
ao linear.
199
9. Algoritmos em grafos
30
30
t
10
10
u
30
20
s
20
10
v
20
20
s
10
20
20
10
s
10 10 0
0
10
10
30
0
u
v
20
0
t
0
v
20
Figura 9.2.: Esquerda: Grafo com capacidades. Centro: Fluxo com valor 30.
Direita: O grafo residual correspondente.
Observac
ao: Se temos um st-caminho P = (v0 = s, v1 , . . . , vn1 , vn = t),
podemos aumentar o fluxo atual f um valor que corresponde ao gargalo
g(f, P ) :=
min
e=(vi ,vi+1 )
0i<n
ce f e .
Observa
c
ao 9.2
Repetidamente procurar um caminho com gargalo positivo e aumentar nem
sempre produz um fluxo m
aximo. Na Fig. 9.2 o fluxo maximo possvel e
40, obtido pelo aumentos de 10 no caminho P1 = (s, u, t) e 30 no caminho
P2 = (s, w, t). Mas, se aumentamos 10 no caminho P1 = (s, u, w, t) e depois
20 no caminho P2 = (s, w, t) obtemos um fluxo de 30 e o grafo nao possui
mais caminho que aumenta o fluxo.
200
+
+
An
alise de complexidade Na an
alise da complexidade, consideraremos somente capacidades em N (ou equivalente em Q: todas capacidades podem ser
multiplicadas pelo menor m
ultiplo em comum das denominadores das capacidades.)
Lema 9.3
Para capacidades inteiras, todo fluxo intermedi
ario e as capacidades residuais
sao inteiros.
Prova. Por induc
ao sobre o n
umero de iterac
oes. Inicialmente fe = 0. Em
cada iterac
ao, o gargalo g(f, P ) e inteiro, porque as capacidades e fluxos
sao inteiros. Portanto, o fluxo e as capacidades residuais apos do aumento sao
novamente inteiros.
201
9. Algoritmos em grafos
Lema 9.4
Em cada iterac
ao, o fluxo aumenta ao menos 1.
Prova. O caminho st possui por definic
ao do grafo residual uma capacidade
gargalo g(f, P ) > 0. O fluxo f (s) aumenta exatamente g(f, P ).
Lema 9.5
O
umero de iterac
oes do algoritmo Ford-Fulkerson e limitado por C =
P n
c
.
Portanto
ele tem complexidade O((n + m)C).
e + (s) e
Prova. C e um limite superior do fluxo maximo. Como o fluxo inicialmente possui valor 0 e aumenta ao menos 1 por iteracao, o algoritmo de
Ford-Fulkerson termina em no m
aximo C iteracoes. Em cada iteracao temos
que achar um caminho st em Gf . Representando G por listas de adjacencia,
isso e possvel em tempo O(n+m) usando uma busca por profundidade. O aumento do fluxo precisa tempo O(n) e a atualizacao do grafo residual e possvel
em O(m), visitando todos arcos.
Corretude do algoritmo de Ford-Fulkerson
Defini
c
ao 9.2
:= V \ X. Escrevemos F (X, Y ) := {(x, y) | x X, y Y } para os
Seja X
arcos
passando do conjunto X para Y . O fluxo de X para Y e f (X, Y ) :=
P
c
ao do fluxo total de um vertice (9.1)
eF (X,Y ) fe . Ainda estendemos a nota
para conjuntos: f (X) := f (X,X) f (X, X) e o fluxo neto do saindo do
conjunto X.
P
Analogamente, escrevemos para as capacidades c(X, Y ) :=
eF (X,Y ) ce .
e um corte st, se s X e t X.
Uma partic
ao (X, X)
Um arco e se chama saturado para um fluxo f , caso fe = ce .
Lema 9.6
temos f (X) = f (s).
Para qualquer corte (X, X)
Prova.
f (X) = f (X,X) f (X, X) =
f (v) = f (s).
vX
(O u
ltimo passo e correto, porque para todo v X, v 6= s, temos f (v) = 0
pela conservac
ao do fluxo.)
Lema 9.7
de um corte st e um limite superior para um fluxo st.
O valor c(X, X)
202
203
9. Algoritmos em grafos
v2
v4
v
N
N
s
M
s
N
u
r2
M
v1
v3
Figura 9.4.: Esquerda: Pior caso para o algoritmo de Ford-Fulkerson com pesos inteiros aumentando o fluxo por 2N vezes por 1 nos caminhos
(s, u, v, t) e (s, v, u, t). Direita: Menor grafo com pesos irracionais
em que
o algoritmo de Ford-Fulkerson falha [73]. M 3, e r2 =
nica raiz real de 1 5x + 2x
(1 + 1 4)/2 com 0.217 a u
x3 . Aumentar (s, v1 , v4 , t) e depois repetidamente (s, v2 , v4 , v1 , v3 , t),
(s, v2 , v3 , v1 , v4 , t), (s, v1 , v3 , v2 , v4 , t), e (s, v1 , v4 , v2 , v3 , t) converge para
o fluxo m
aximo 2 + r + r2 sem terminar.
Teorema 9.2
O algoritmo de Edmonds-Karp precisa O(nm) iteracoes, e portanto termina
em O(nm2 ).
Lema 9.9
Seja f (v) a dist
ancia entre s e v em Gf . Durante a execucao do algoritmo
de Edmonds-Karp f (v) cresce monotonicamente para todos vertices em V .
Prova. Para v = s o lema e evidente. Sup
oe que uma iteracao modificando o
fluxo f para f 0 diminuir
a o valor de um vertice v V \{s}, i.e., f (v) > f 0 (v).
Sup
oe ainda que v e o vertice de menor distancia f 0 (v) em Gf 0 com essa
caracterstica. Seja P = (s, . . . , u, v) um caminho mais curto de s para v
em Gf 0 . O valor de u n
ao diminuiu nessa iteracao (pela escolha de v), i.e.,
f (u) f 0 (u) (*).
O arco (u, v) n
ao existe in Gf , sen
ao a dist
ancia do v in Gf e no maximo a
dist
ancia do v in Gf 0 : Supondo (u, v) E(Gf ) temos
f (v) f (u) + 1
f 0 (u) + 1
(*)
f 0 (v)
porque uv est
a num caminho mnimo em Gf 0 ,
uma contradic
ao com a hip
otese que a dist
ancia de v diminuiu. Portanto,
(u, v) 6 E(Gf ) mas (u, v) E(Gf 0 ). Isso s
o e possvel se o fluxo de v para u
204
(*)
= (v) 2
porque uv est
a num caminho mnimo em Gf 0 ,
f0
= f (u) + 2,
i.e., a dist
ancia do u entre dois instantes em que uv e crtico aumento por
pelo menos dois. Enquanto u e alcanc
avel por s, a sua distancia e no maximo
n 2, porque a caminho n
ao contem s nem t, e por isso a aresta uv pode ser
crtico por no m
aximo (n 2)/2 = n/2 1 vezes.
Outras soluc
oes (Goldberg 2008):
9.1.3. Variac
oes do problema
Fontes e destinos m
ultiplos Para G = (V, E, c) define um conjunto de fontes
S V e um conjunto de destinos T V , com S T = , e considera
maximiza
sujeito a
f (S)
f (v) = 0
f e ce
v V \ (S T )
(9.3)
e E.
205
9. Algoritmos em grafos
Ano
1951
1955
1970
1972
1973
1974
1977
1980
1983
1986
1987
1987
1989
1990
1990
1992
1993
1994
1997
Referencia
Dantzig
Ford & Fulkerson
Dinitz
Edmonds & Karp
Dinitz
Karzanov
Cherkassky
Galil & Naamad
Sleator & Tarjan
Goldberg & Tarjan
Ahuja & Orlin
Ahuja et al.
Cheriyan & Hagerup
Cheriyan et al.
Alon
King et al.
Phillips & Westbrook
King et al.
Goldberg & Rao
Complexidade
O(n2 mC)
O(nmC)
O(n2 m)
O(m2 log C)
O(nm log C)
O(n3 )
O(n2 m1/2 )
O(nm log2 n)
O(nm log n)
O(nm log(n2 /m))
O(nm + n2 log
C)
O(nm log(n log C/m))
O(nm + n2 log2 n)
O(n3 / log n)
O(nm + n8/3 log n)
O(nm + n2+ )
O(nm(logm/n n + log2+ n))
O(nm logm/(n log n) n)
O(m3/2 log(n2 /m) log C)
O(n2/3 m log(n2 /m) log C)
Obs
Simplex
Cam. aument.
Cam. min. aument.
Escalonamento
Escalonamento
Preflow-Push
Preflow-Push
Push-Relabel
206
O problema (9.3) pode ser reduzido para um problema de fluxo maximo simples em G0 = (V 0 , E 0 , c0 ) (veja Fig. 9.5(a)) com
V 0 = V {s , t }
E 0 = E {(s , s) | s S} {(t, t ) | t T }
eE
ce
0
ce = c({s}, {s})
e = (s , s)
c({t}, {t}) e = (t, t )
(9.4)
Lema 9.10
Se f 0 e soluc
ao m
axima de (9.4), f = f 0 |E e uma solucao maxima de (9.3).
Conversamente, se f e uma soluc
ao m
axima de (9.3),
eE
fe
0
fe = f (s)
e = (s , s)
f (t) e = (t, t )
e uma soluc
ao m
axima de (9.4).
Prova. Sup
oe f e soluc
ao m
axima de (9.3). Seja f 0 uma solucao de (9.4)
0
com valor f (s ) maior. Ent
ao f 0 |E e um fluxo v
alido para (9.3) com solucao
0
0
f |E (S) = f (s ) maior, uma contradic
ao.
Conversamente, para cada fluxo v
alido f em G, a extensao f 0 definida acima
e um fluxo v
alido em G0 com o mesmo valor. Portanto o valor do maior fluxo
em G0 e maior ou igual ao valor do maior fluxo em G.
207
9. Algoritmos em grafos
Limites inferiores Para G = (V, E, b, c) com limites inferiores b : E R
considere o problema
maximiza
sujeito a
f (s)
f (v) = 0
be fe ce
v V \ {s, t}
(9.5)
e E.
O problema (9.5) pode ser reduzido para um problema de fluxo maximo simples em G0 = (V 0 , E 0 , c0 ) (veja Fig. 9.5(b)) com
V0 =V
E 0 = E {(v, t) | (v, u) E} {(s, u) | (v, u) E}
ce be e E
0
ce = b(v,u)
e = (v, t)
b(v,u)
e = (s, u)
(9.6)
Lema 9.11
Problema (9.5) possui uma vi
avel sse (9.6) possui uma solucao maxima com
todos arcos auxiliares E 0 \ E saturados. Neste caso, se f e um fluxo maximo
em (9.5),
fe be e E
0
fe = bf
e = (v, t) criado por f = (v, u)
bf
e = (s, u) criado por f = (v, u)
e um fluxo m
aximo de (9.6) com arcos auxiliares saturados. Conversamente,
se f 0 e um fluxo m
aximo para (9.6) com arcos auxiliares saturados, fe = fe0 +be
e um fluxo m
aximo em (9.5).
Prova. (Exerccio.)
Exist
encia de uma circulac
ao Para G = (V, E, c) com demandas dv , com
dv > 0 para destinos e dv < 0 para fontes, considere
existe
s.a
f
f (v) = dv
f e ce
v V
(9.7)
e E.
Evidentemente
e uma condicao necessaria (lema (9.1)). O
vV dv = 0
problema (9.7) pode ser reduzido para um problema de fluxo maximo em
G0 = (V 0 , E 0 ) com
208
V 0 = V {s , t }
E 0 = E {(s , v) | v V, dv < 0} {(v, t ) | v V, dv > 0}
eE
ce
ce = dv e = (s , v)
dv
e = (v, t )
(9.8)
Lema 9.12
Problema (9.7) possui
ao sse problema (9.8) possui uma solucao com
P uma soluc
fluxo m
aximo D = v:dv >0 dv .
Prova. (Exerccio.)
Circulac
oes com limites inferiores
ores e superiores, considere
existe
s.a
f
v V
f (v) = dv
be f e c e
(9.9)
e E.
O problema pode ser reduzido para a existencia de uma circulacao com somente limites superiores em G0 = (V 0 , E 0 , c0 , d0 ) com
V0 =V
E0 = E
(9.10)
ce = ce be
d0v = dv
X
e (v)
be +
be
(9.11)
e + (v)
Lema 9.13
O problema (9.9) possui soluc
ao sse problema (9.10) possui solucao.
Prova. (Exerccio.)
9.1.4. Aplicac
oes
Projeto de pesquisa de opini
ao O objetivo e projetar uma pesquisa de
opini
ao, com as restric
oes
209
9. Algoritmos em grafos
Cada cliente i recebe ao menos ci perguntas (para obter informacao suficiente) mas no m
aximo c0i perguntas (para nao cansar ele). As perguntas
podem ser feitas somente sobre produtos que o cliente ja comprou.
Para obter informac
oes suficientes sobre um produto, entre pi e p0i clientes tem que ser interrogados sobre ele.
Um modelo e um grafo bi-partido entre clientes e produtos, com aresta (ci , pj )
caso cliente i j
a comprou produto j. O fluxo de cada aresta possui limite
inferior 0 e limite superior 1. Para representar os limites de perguntas por
produto e por cliente, introduziremos ainda dois vertices s, e t, com arestas
(s, ci ) com fluxo entre ci e c0i e arestas (pj , t) com fluxo entre pj e p0j e uma
aresta (t, s).
Segmentac
ao de imagens O objetivo e segmentar um imagem em duas
partes, por exemplo foreground e background. Supondo que temos uma
probabilidade ai de pertencer ao foreground e outra probabilidade de
pertencer ao background bi para cada pixel i, uma abordagem direta e
definir que pixels com ai > bi s
ao foreground e os outros background. Um
exemplo pode ser visto na Fig. 9.7 (b). A desvantagem dessa abordagem e que
a separac
ao ignora o contexto de um pixel. Um pixel, foreground com todos
pixel adjacentes em background provavelmente pertence ao background
tambem. Portanto obtemos um modelo melhor introduzindo penalidades pij
para separar (atribuir `
a categorias diferentes) pixel adjacentes i e j. Um
.
partic
ao do conjunto de todos pixels I em A B tem um valor de
X
X
X
q(A, B) =
ai +
bi
pij
iA
iB
(i,j)AB
nesse modelo, e o nosso objetivo e achar uma particao que maximiza q(A, B).
Isso e equivalente a minimizar
X
X
X
X
Q(A, B) =
ai + bi
ai
bi +
pij
iI
X
iB
iA
ai +
X
iA
bi +
iB
(i,j)AB
pij .
(i,j)AB
A soluc
ao mnima de Q(A, B) pode ser visto como corte mnimo num grafo.
O grafo possui um vertice para cada pixel e uma aresta com capacidade pij
entre dois pixels adjacentes i e j. Ele possui ainda dois vertices adicionais
s e t, arestas (s, i) com capacidade ai para cada pixel i e arestas (i, t) com
capacidade bi para cada pixel i (ver Fig. 9.6).
210
30
12
10
10
i
10 10
j
1010
10
10
20 k
10
l
25
16
t
15
a
b
i
30
20
j
19
15
k
12
16
l
10
25
211
9. Algoritmos em grafos
Seq
uenciamento O objetivo e programar um transporte com um n
umero k
de veculos disponveis, dado pares de origem-destino com tempo de sada e
chegada. Um exemplo e um conjunto de v
oos e
1. Porto Alegre (POA), 6.00 Florianopolis (FLN), 7.00
2. Florianopolis (FLN), 8.00 Rio de Janeiro (GIG), 9.00
3. Fortaleza (FOR), 7.00 Jo
ao Pessoa (JPA), 8.00
4. S
ao Paulo (GRU), 11.00 Manaus (MAO), 14.00
5. Manaus (MAO), 14.15 Belem (BEL), 15.15
6. Salvador (SSA), 17.00 Recife (REC), 18.00
O mesmo avi
ao pode ser usado para mais que um par de origem e destino, se
o destino do primeiro e o origem do segundo, em tem tempo suficiente entre
a chegada e sada (para manutenc
ao, limpeza, etc.) ou tem tempo suficiente
para deslocar o avi
ao do destino para o origem.
Podemos representar o problema como grafo direcionado acclico. Dado pares de origem destino, ainda adicionamos pares de destino-origem que sao
compatveis com as regras acimas. A ideia e representar avioes como fluxo:
cada aresta origem-destino e obrigat
orio, e portanto recebe limites inferiores
e superiores de 1, enquanto uma aresta destino-origem e facultativa e recebe
limite inferior de 0 e superior de 1. Alem disso, introduzimos dois vertices s
e t, com arcos facultativos de s para qualquer origem e de qualquer destino
para t, que representam os comecos e finais da viagem completa de um aviao.
Para decidir se existe um soluc
ao com k avi
oes, finalmente colocamos um arco
(t, s) com limite inferior de 0 e superior de k e decidir se existe uma circulacao
nesse grafo.
9.1.5. Outros problemas de fluxo
Obtemos um outro problema de fluxo em redes introduzindo custos de transporte por unidade de fluxo:
Fluxo de menor custo
|E|
212
Soluc
ao Um fluxo s-t f com valor v.
P
Objetivo Minimizar o custo eE ce fe do fluxo.
213
9. Algoritmos em grafos
9.2. Emparelhamentos
Dado um grafo n
ao-direcionado G = (V, E), um emparelhamento e uma
selec
ao de arestas M E tal que todo vertice tem no maximo grau 1 em
G0 = (V, M ). (Notac
ao: M = {u1 v1 , u2 v2 , . . .}.) O nosso interesse em emparelhamentos e maximizar o n
umero de arestas selecionados ou, no caso as
arestas possuem pesos, maximizar o peso total das arestas
P selecionados.
Para um grafo com pesos c : E Q, seja c(M ) =
eM ce o valor do
emparelhamento M .
ximo (EM)
Emparelhamento ma
Entrada Um grafo G = (V, E) n
ao-direcionado.
Soluc
ao Um emparelhamento M E, i.e. um conjunto de arcos, tal que
para todos vertices v temos |N (v) M | 1.
Objetivo Maximiza |M |.
ximo (EPM)
Emparelhamento de peso ma
Entrada Um grafo G = (V, E, c) n
ao-direcionado com pesos c : E Q
nas arestas.
Soluc
ao Um emparelhamento M E.
Objetivo Maximiza o valor c(M ) de M .
214
9.2. Emparelhamentos
eE
ce <0
eE
215
9. Algoritmos em grafos
Formulac
oes com programac
ao inteira A formulacao do problema do emparelhamento perfeito mnimo para G = (V, E, c) e
X
minimiza
ce xe
(9.12)
eE
sujeito a
xuv = 1,
v V
uN (v)
xe B.
A formulac
ao do problema do emparelhamento maximo e
X
maximiza
ce xe
(9.13)
eE
sujeito a
xuv 1,
v V
uN (v)
xe B.
Observa
c
ao 9.3
A matriz de coeficientes de (9.12) e (9.13) e totalmente unimodular no caso bipartido (pelo teorema de Hoffman-Kruskal). Portanto: a solucao da relaxacao
linear e inteira. (No caso geral isso n
ao e verdadeiro, K3 e um contra-exemplo,
com soluc
ao
otima 3/2.). Observe que isso resolve o caso ponderado sem custo
adicional.
Observa
c
ao 9.4
O dual da relaxac
ao linear de (9.12) e
X
maximiza
yv
(9.14)
vV
sujeito a
yu + yv cuv ,
uv E
yv R.
e o dual da relaxac
ao linear de (9.13)
X
minimiza
yv
(9.15)
vV
sujeito a
yu + yv cuv ,
uv E
y v R+ .
Com pesos unit
arios cuv = 1 e restringindo yv B o primeiro dual e a formulac
ao do conjunto independente m
aximo e o segundo da cobertura por
vertices mnima. Portanto, a observac
ao 9.3 rende no caso nao-ponderado:
216
9.2. Emparelhamentos
Teorema 9.4 (Berge, 1951)
Em grafos bi-partidos o tamanho da menor cobertura por vertices e igual ao
tamanho do emparelhamento m
aximo.
9.2.1. Aplicac
oes
Alocac
ao de tarefas Queremos alocar n tarefas a n trabalhadores, tal que
cada tarefa e executada, e cada trabalhador executa uma tarefa. O custos de
execuc
ao dependem do trabalhar e da tarefa. Isso pode ser resolvido como
problema de emparelhamento perfeito mnimo.
Particionamento de polgonos ortogonais
Teorema 9.5
[58, cap. 11,th. 1] Um polgono ortogonal com n vertices de reflexo (ingl. reflex
vertex, i.e., com
angulo interno maior que ), h buracos (ingl. holes) pode ser
minimalmente particionado em n l h + 1 ret
angulos. A variavel l e o
n
umero m
aximo de cordas (diagonais) horizontais ou verticais entre vertices
de reflexo sem intersecc
ao.
O n
umero l e o tamanho do conjunto independente maximo no grafo de intersecc
ao das cordas: cada corda e representada por um vertice, e uma aresta
representa a duas cordas com intersec
ao. Um conjunto independente maximo
e o complemento de uma cobertura por vertices mnima, o problema dual
(9.15) de um emparelhamento m
aximo. Portanto, o tamanho de um emparelhamento m
aximo e igual n h. Podemos obter o conjunto independente
que procuramos usando a metade do emparelhamento (os vertices de uma
parte s
o) e os vertices n
ao emparelhados. Podemos achar o emparelhamento
em tempo O(n5/2 ) usando o algoritmo de Hopcroft-Karp, porque o grafo de
intersecc
ao e bi-partido (por que?).
9.2.2. Grafos bi-partidos
Na formulac
ao como programa inteira a soluc
ao do caso bi-partido e mais facil.
Isso tambem e o caso para algoritmos combinatoriais, e portanto comecamos
estudar grafos bi-partidos.
Reduc
ao para o problema do fluxo m
aximo
Teorema 9.6
Um EM em grafos bi-partidos pode ser obtido em tempo O(mn).
217
9. Algoritmos em grafos
218
9.2. Emparelhamentos
V1 e V2 com fluxo 1. N
ao existe vertice com grau 2, pela conservacao de fluxo.
Portanto, os arcos formam um emparelhamento cuja cardinalidade e o valor
do fluxo.
Soluc
ao n
ao-ponderado combinatorial Um caminho P = v1 v2 v3 . . . vk e
alternante em relac
ao a M (ou M -alternante) se vi vi+1 M sse vi+1 vi+2 6 M
para todos 1 i k 2. Um vertice v V e livre em relacao a M se ele
tem grau 0 em M , e emparelhado caso contr
ario. Um arco e E e livre em
relacao a M , se e 6 M , e emparelhado caso contr
ario. Escrevemos |P |= k 1
pelo comprimento do caminho P .
Observa
c
ao 9.5
Caso temos um caminho P = v1 v2 v3 . . . v2k+1 que e M -alternante com v1 e
v2k+1 livre, podemos obter um emparelhamento M \ (P M ) (P \ M ) de
tamanho |M ` k + (k 1) = |M | + 1. Notac
ao: Diferenca simetrica M P =
(M \ P ) (P \ M ). A operac
ao M P e um aumento do emparelhamento
M.
219
9. Algoritmos em grafos
Rascunho de um algoritmo:
Teorema 9.9
O problema do emparelhamento m
aximo n
ao-ponderado em grafos bi-partidos
pode ser resolvido em tempo O(mn).
Prova. Ultima
observac
ao e o fato que o emparelhamento maximo tem tamanho O(n).
Observa
c
ao 9.7
Ou
ltimo teorema e o mesmo que teorema (9.6).
Observa
c
ao 9.8
Pelo teorema (9.8) sabemos que em geral existem varios caminhos M -alternantes
disjuntos (de vertices) e nos podemos aumentar M com todos eles em paralelo.
Portanto, estruturamos o algoritmo em fases: cada fase procura um conjunto
de caminhos aumentantes disjuntos e aplic
a-los para obter um novo emparelhamento. Observe que pelo teorema (9.8) um aumento com o maior conjunto
de caminhos M -alternantes disjuntos resolve o problema imediatamente, mas
220
9.2. Emparelhamentos
n
ao sabemos como achar esse conjunto de forma eficiente. Portanto, procuramos somente um conjunto m
aximo de caminhos M -alternantes disjuntos de
menor comprimento.
Podemos achar um conjunto desse tipo ap
os uma busca por profundidade
da seguinte maneira usando o DAG (grafo direcionado acclico) definido pela
busca por profundidade. (i) Escolhe um vertice livre em V2 . (ii) Segue os
predecessores para achar um caminho aumentante. (iii) Coloca todos vertices
em uma fila de delec
ao. (iv) Processa a fila de delecao: Ate a fila e vazia,
remove um vertice dela. Remove todos arcos adjacentes no DAG. Caso um
vertice sucessor ap
os de remoc
ao de um arco possui grau de entrada 0, coloca
ele na fila. (v) Repete o procedimento no DAG restante, para achar outro
caminho, ate n
ao existem mais vertices livres em V2 . A nova busca ainda
possui complexidade O(m).
O que ganhamos com essa nova busca? Os seguintes dois lemas dao a resposta:
Lema 9.14
Ap
os cada fase, o comprimento de um caminho aumentante mnimo aumenta
ao menos dois.
Lema 9.15
O algoritmo termina em no m
aximo n fases.
Teorema 9.10
O problema do emparelhamento m
aximo n
ao-ponderado em grafos bi-partidos
pode ser resolvido em tempo O(m n).
Prova. Pelas lemas 9.14 e 9.15 e a observac
ao que toda fase pode ser completada em O(m).
Usaremos outro lema para provar os dois lemas acima.
Lema 9.16
Seja M um emparelhamento, P um caminho M -aumentante mnimo, e Q um
caminho M P -aumentante. Ent
ao |Q| |P | + 2|P Q|. (P Q denota as
arestas em comum entre P e Q.)
Prova. Caso P e Q n
ao possuem vertices em comum, Q e M -aumentante,
P Q = e a desigualdade e conseq
uencia da minimalidade de P .
Caso contr
ario: P Q consiste em dois caminhos, e eventualmente um colecao
de ciclos. Os dois caminhos s
ao M -aumentantes, pelas seguintes observacoes:
1. O incio e termino de P e livre em M , porque P e M -aumentante.
221
9. Algoritmos em grafos
2. O incio e termino de Q e livre em M : eles nao pertencem a P , porque
s
ao livres em M 0 .
3. Nenhum outro vertice de P ou Q e livre em relacao a M : P so contem
dois vertices livres e Q s
o contem dois vertices livres em Q mas nao em
P.
4. Temos dois caminhos M -aumentantes, comecando com um vertice livre
em Q e terminando com um vertice livre em P . O caminho em Q \ P e
M -alternante, porque as arestas livres em M 0 sao exatamente as arestas
livres em M . O caminho Q entra em P sempre apos uma aresta livre
em M , porque o primeiro vertice em P ja e emparelhado em M e sai
de P sempre antes de uma aresta livre em M , porque o u
ltimo vertice
em P j
a e emparelhado. Portanto os dois caminhos em P Q sao M aumentantes.
Os dois caminhos M -aumentantes em P Q tem que ser maiores que |P |.
Com isso temos |P Q| 2|P | e
|Q| = |P Q| + 2|P Q ` |P | |P | + 2|P Q|.
Prova. (do lema 9.14). Seja S o conjunto de caminhos M -aumentantes
da fase anterior, e P um caminho aumentante. Caso P e disjunto de todos
caminhos em S, ele deve ser mais comprido, porque S e um conjunto maximo
de caminhos aumentantes. Caso P possui um vertice em comum com algum
caminho em S, ele possui tambem um arco em comum (por que?) e podemos
aplicar lema 9.16.
Prova. (do lema 9.15). Seja
M um emparelhamento maximo e M o emparelhamento obtido ap
os de n/2 fases.
O comprimento de qualquer ca
minho M -aumentante e no mnimo n, pelo lema 9.14. Pelo teorema 9.8
existem ao menos
|M ` |M | caminhos M -aumentantes disjuntos. Mas entao
222
9.2. Emparelhamentos
Sobre a implementac
ao A seguir supomos que o conjunto. de vertices e
V = [1, n] e um grafo G = (V, E) bi-partido com particao V1 V2 . Podemos
representar um emparelhamento usando um vetor mate, que contem, para
cada vertice emparelhado, o ndice do vertice vizinho, e 0 caso o vertice e
livre.
O n
ucleo de uma implementac
ao do algoritmo de Hopcroft e Karp e descrito
na observac
ao 9.8: ele consiste em uma busca por largura ate encontrar um ou
mais caminhos M -alternantes mnimos e depois uma fase que extrai do DAG
definido pela busca um conjunto m
aximo de caminhos disjuntos (de vertices).
A busca por largura comeca com todos vertices livres em V1 . Usamos um
vetor H para marcar os arcos que fazem parte do DAG definido pela busca
por largura2 e um vetor m para marcar os vertices visitados.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
s e a r c h p a t h s ( M ) :=
for a l l v V do mv := false
for a l l e E do He := false
U1 := {v V1 | v livre}
do
{ determina vizinhos em U2 via arestas l i v r e s }
U2 :=
fo r a l l u U1 do
mu := true
f o r a l l uv E , uv 6 M do
i f not mv then
Huv := true
U2 := U2 v
end i f
end f o r
end f o r
{ determina vizinhos em U1 via arestas emparelhadas }
found := f a l s e
{ ao menos um caminho encontrado? }
U1 :=
fo r a l l u U2 do
mu := true
i f ( u l i v r e ) then
found := t r u e
else
2 H,
223
9. Algoritmos em grafos
28
v := mate[u]
29
i f not mv then
30
Huv := true
31
U1 := U1 v
32
end i f
33
end f o r
34
end f o r
35
while ( not found )
36 end
Ap
os da busca, podemos extrair um conjunto maximo de caminhos M -alternantes
mnimos disjuntos. Enquanto existe um vertice livre em V2 , nos extraimos um
caminho alternante que termina em v como segue:
1 e x t r a c t p a t h ( v ) :=
2
P := v
3
while not ( v V1 and v l i v r e ) do
4
i f v V1
5
v := mate [ v ]
6
else
7
v := e s c o l h e {u | Huv , uv 6 M }
8
end i f
9
P := vP
10
end while
11
12
remove o caminho e t o d o s v e r t i c e s sem p r e d e c e s s o r
13
end while
14 end
.
Soluc
ao ponderada em grafos bi-partidos Dado um grafo G = (S T, E)
bipartido com pesos c : E Q+ queremos achar um emparelhamento de
maior peso. Escrevemos V = S T para o conjunto de todos vertice em G.
Observa
c
ao 9.9
O caso ponderado pode ser restrito para emparelhamentos perfeitos: caso S
e T possuem cardinalidade diferente, podemos adicionar vertices, e depois
completar todo grafo com arestas de custo 0. O problema de encontrar um
emparelhamento perfeito m
aximo (ou mnimo) em grafos ponderados e conhecido pelo nome problema de alocac
ao (ingl. assignment problem).
Observa
c
ao 9.10
A reduc
ao do teorema 9.6 para um problema de fluxo maximo nao se aplica
no caso ponderado. Mas, com a simplificacao da observacao 9.9, podemos
224
9.2. Emparelhamentos
reduzir o problema no caso ponderado para um problema de fluxo de menor
custo: a capacidade de todas arestas e 1, e o custo de transportacao sao os
pesos das arestas. Como o emparelhamento e perfeito, procuramos um fluxo
de valor |V |/2, de menor custo.
M =
while ( e x i s t e um caminho M aumentante P ) do
e n c o n t r a o caminho M aumentante mnimo P em HM
c a s o l(P ) 0 break ;
225
9. Algoritmos em grafos
5
M := M P
6 end while
7 return M
Observa
c
ao 9.11
O grafo HM de um emparelhamento extremo M nao possui ciclo (par) negativo, que seria uma contradic
ao com a maximalidade de M . Portanto podemos
encontrar a caminho mnimo no passo 3 do algoritmo usando o algoritmo de
Bellman-Ford em tempo O(mn). Com isso a complexidade do algoritmo e
O(mn2 ).
Observa
c
ao 9.12
Lembrando Bellman-Ford: Seja dk (t) a dist
ancia mnimo de qualquer caminho
de s para t usando no m
aximo k arcos ou caso nao existe. Temos
dk+1 (t) = min{dk (t), min dk (u) + l(u, t)}.
(u,t)A
226
9.2. Emparelhamentos
v10
v9
v8
v7
v1
v2
v6
v3
v4
v10
v5
v9
v8
v7
v1
v2
v6
v3
v4
v5
Prova. Sup
oe que existe um emparelhamento N com c(N ) > c(M ). Logo
|N | > |M | porque M e de maior peso entre todos emparelhamentos de cardinalidade no m
aximo |M |. Pelo teorema de Hopcroft-Karp, existem |N ` |M |
caminhos M -aumentantes disjuntos de vertices, nenhum com comprimento
negativo, pelo criterio de terminac
ao do algoritmo. Portanto c(N ) c(M ),
uma contradic
ao.
Observa
c
ao 9.13
possvel encontrar o caminho mnimo no passo 3 em tempo O(m + n log n)
E
usando uma transformac
ao para dist
ancias positivas e aplicando o algoritmo
de Dijkstra. Com isso obtemos um algoritmo em tempo O(n(m + n log n)).
227
9. Algoritmos em grafos
Bi-partido
Geral
Cardinalidade
q
mn
)
O(n log
n
log(n2 /m)
O(m n log n ) [24]
2
/m)
O(m n log(n
) [31, 26]
log n
Ponderado
[5]
228
(10.1)
(10.2)
Uma reduc
ao preservando a aproximac
ao fornece uma -aproximacao para 1
dada uma -aproximac
ao para 2 , porque
1 (x1 , y1 ) 2 (x2 , y2 ) OPT2 (x2 ) OPT1 (x1 ).
Observe que essa definic
ao e somente para problemas de minimizacao. A
definic
ao no caso de maximizac
ao e semelhante.
10.1. Aproximac
ao para o problema da
arvore de Steiner
mnima
Seja G = (V, A) um grafo completo, n
ao-direcionado com custos ca 0 nos
arcos. O problema da
arvore Steiner mnima (ASM) consiste em achar o
229
2
1
2
1
2
1
2
1
Defini
c
ao 10.2
Os custos s
ao metricos se eles satisfazem a desigualdade triangular, i.e.
cij cik + ckj
para qualquer tripla de vertices i, j, k.
Teorema 10.1
Existe um reduc
ao preservando a aproximac
ao de ASM para a versao metrica
do problema.
Prova. O fecho metrico de G = (V, A) e um grafo G0 completo sobre
vertices e com custos c0ij := dij , sendo dij o comprimento do menor caminho
entre i e j em G. Evidentemente c0ij cij e portanto (10.1) e satisfeita. Para
ver que (10.2) e satisfeita, seja T 0 uma soluc
ao de ASM em G0 . Define T como
uni
ao de todos caminhos definidos pelos arcos em T 0 , menos um conjunto de
arcos para remover eventuais ciclos. O custo de T e no maximo c(T 0 ) porque
o custo de todo caminho e no m
aximo o custo da aresta correspondente em
T 0.
Consequencia: Para o problema do ASM e suficiente considerar o caso metrico.
Teorema 10.2
O AGM sobre R e uma 2-aproximac
ao para o problema do ASM.
230
2
1
2
Figura 10.2.: AGM sobre R e melhor soluc
ao.
Steiner.
: vertice em R,
: vertice
10.2. Aproximac
oes para o PCV
Teorema 10.3
Para func
ao polinomial (n) o PCV n
ao possui (n)-aproximacao em tempo
polinomial, caso P 6= NP.
Prova. Via reduc
ao de HC para PCV. Para uma instancia G = (V, A) de HC
define um grafo completo G0 com
(
1
aA
ca =
(n)n caso contr
ario
Se G possui um ciclo Hamiltoniano, ent
ao o custo da menor rota e n. Caso
contr
ario qualquer rota usa ao menos uma aresta de custo (n)n e portanto
o custo total e (n)n. Portanto, dado uma (n)-aproximacao de PCV
podemos decidir HC em tempo polinomial.
Caso m
etrico No caso metrico podemos obter uma aproximacao melhor.
Determina uma rota como segue:
1. Determina uma AGM A de G.
1 Isso
231
232
233
Teorema 10.6
Algoritmo 10.1 e uma 2 2/k-aproximac
ao.
Prova. Considere o corte mnimo C . Ele pode ser representado com a uniao
de k cortes que separam os k componentes individualmente:
[
C =
Ci .
1ik
(Veja fig. 10.4.) Cada aresta de C faz parte das cortes das duas componentes
adjacentes, e portanto
X
w(Ci ) = 2w(C )
1ik
w(Ci )
e ainda w(Ci )
para os cortes Ci do algoritmo 10.1, porque nos usamos
o corte isolante mnimo de cada componente. Logo para o corte C retornado
pelo algoritmo temos
X
X
w(C) (1 1/k)
w(Ci ) (1 1/k)
w(Ci ) 2(1 1/k)w(C ).
1ik
1ik
A an
alise do algoritmo e
otimo, como o seguinte exemplo da fig. 10.5 mostra.
O menor corte que separa si tem peso 2 , portanto o algoritmo retorne um
corte de peso (2 )k (2 ) = (k 1)(2 ), enquanto o menor corte que
separa todos terminais e o ciclo interno de peso k.
234
Soluc
ao de k-CM Problema: Como saber a onde cortar?
Fato 10.2
Existem somente n1 cortes diferentes num grafo. Eles podem ser organizados
numa arvore de Gomory-Hu (AGH) T = (V, T ). Cada aresta dessa arvore
define um corte associado em G pelos dois componentes apos a sua remocao.
1. Para cada u, v V o menor corte uv em G e igual a o menor corte uv
em T (i.e. a aresta de menor peso no caminho u
nico entre u e v em T ).
2. Para cada aresta a T , w0 (a) e igual a valor do corte associado.
Por conseq
uencia, a AGH codifica o valor de todos cortes em G.
Ele pode ser calculado com n 1 cortes st mnimos:
1. Define um grafo com um u
nico vertice que representa todos vertices do
grafo original. Chama um vertice que representa mais que um vertice
do grafo original gordo.
2. Enquanto existem vertices gordos:
a) Escolhe um vertice e dois vertices do grafo original representados
por ela.
b) Caclulca um corte mnimo entre esses vertices.
c) Separa o vertice gordo de acordo com o corte mnimo encontrado.
Observac
ao: A uni
ao dos cortes definidos por k 1 arestas na AGH separa G
em ao menos k componentes. Isso leva ao seguinte algoritmo.
235
Teorema 10.7
Algoritmo 10.2 e uma 2 2/k-aproximac
ao.
S
Prova. Seja C = 1ik Ci uma corte mnimo, decomposto igual `a prova
anterior. O nosso objetivo e demonstrar que existem k 1 cortes definidos
por uma aresta em T que s
ao mais leves que os Ci .
1i<k
1ik
10.4. Exerccios
Exerccio 10.1
Por que um subgrafo de menor custo sempre e uma arvore?
Exerccio 10.2
Mostra que o n
umero de vertices com grau impar num grafo sempre e par.
236
Parte IV.
Teoria de complexidade
237
L (uma linguagem).
Problema de otimizac
ao: Tratado como problema de decisao com
a pergunta Existe soluc
ao k? ou Existe solucao k?.
Freq
uentemente: Alfabeto = {0, 1} com codificacao adequada.
Conven
c
ao 11.1
Sem perda de generalidade suporemos = {0, 1}.
Defini
c
ao 11.1
Uma linguagem e um conjunto de palavras sobre um alfabeto: L .
239
Alan Mathison
Turing (*1912,
+1954)
M
aquina de Turing
240
11.1. Introducao
Cabea de leitura
e escritura
...
Fita innita
M
aquina de Turing (MT)
M = (Q, , , )
Alfabeto de entrada (sem branco )
Conjunto de estados Q entre eles tres estados particulares:
Um estado inicial q0 Q, um que aceita qa Q e um que rejeita
qr Q.
Alfabeto de fita (inclusive
M
aquina de Turing: Operac
ao
Incio da computac
ao:
No estado inicial q0 com cabeca na posic
ao mais esquerda,
com entrada w escrita na esquerda da fita, resto da fita em
branco.
Computac
ao: No estado q lendo um smbolo a aplica uma regra qa
q 0 a0 D (um L na primeira posic
ao n
ao tem efeito) ate
n
ao encontrar uma regra: a computac
ao termina, ou
241
Tabela da transic
ao
Seja = {0, 1}. Uma m
aquina de Turing que reconhece a linguagem {wwR |
w } e
Notac
ao gr
afica
242
11.1. Introducao
(convenc
oes e abreviac
oes do Turing machine simulator; veja pagina da disciplina).
M
aquinas n
ao-determinsticas
Observe: Num estado q lendo smbolo a temos exatamente uma regra
da forma qa q 0 a0 D.
Portanto a m
aquina de Turing e determinstica (MTD).
Caso mais que uma regra que se aplica em cada estado q e smbolo a a
m
aquina e n
ao-determinstica (MTND).
A func
ao de transic
ao nesse caso e
: Q P(Q {L, R})
243
Robustez da definic
ao
A definic
ao de uma MTD e computacionalmente robusto: as seguintes
definic
oes alternatives decidem as mesmas linguagens:
1. Uma MT com k > 1 fitas (cada uma com cabeca propria),
2. uma MT com fita duplamente infinita,
3. uma MT com alfabeto restrito = {0, 1},
4. uma MTND e
5. uma MT com fita de duas ou mais dimensoes.
244
11.1. Introducao
O poder computacional tambem e equivalente com varios outros modelos
de computac
ao (p.ex. c
alculo lambda, m
aquina RAM, automato celular):
Tese de Church-Turing.
Prova. (Rascunho.)
1. Seja aij o smbolo na posic
ao j da fita i e li o ndice do u
ltimo smbolo
usado na fita i. A m
aquina com uma u
nica fita representa os k fitas da
forma
#a11 . . . a1l1 # . . . #ak1 . . . aklk .
Para representar as posic
oes das cabecas, usamos smbolos com uma
marca a.
Uma MTD simula a m
aquina com k > 1 fitas em dois passos:
(i) Determina os smbolos abaixo das cabecas em um passo. (ii) executa
as operac
oes da k cabecas. Caso uma cabeca ultrapassa a direita da
representac
ao, a MTD estende-la, copiando todos smbolos da direita
mais uma para direita.
2. Seja ai o smbolo na posic
ao i da fita, com i Z. A maquina com uma
x
unica fita meia-infinita representa essa fita por
a0 ha1 a1 iha2 a2 i . . . .
com smbolos novos em 2 . Os estados da maquina sao Q {S, I},
registrando alem da estado da m
aquina simulada, se o simulacao trabalho no parte superior ou inferior. A simulac
ao possui dois conjuntos de
regras para transic
oes em estados (q, S) e estados (q, I) e um conjunto
de regras para passar de cima para baixo e vice versa.
3. Cada smbolo e representado por uma sequencia em {0, 1}w de comprimento w = dlog ||e. Na simulac
ao a MTD primeiro leia os w smbolos
atuais, calcula e escreve a representac
ao do novo smbolo e depois se
movimenta w posic
oes para esquerda ou direita.
4. A MTD simula uma MTN listando todas as execucoes possveis sistematicamente.
5. Usando uma representac
ao linear da fita, por exemplo linha por linha
no caso de duas dimens
oes, similar com o caso 1, a maquina pode ser
simulado calculando o novo ndice da cabeca.
245
Proposi
c
ao 11.1
Se uma MTD M = (Q, , , ) com = {0, 1} decide uma linguagem L em
tempo t(n), com t(n) tempo-construtvel, ent
ao existe uma MT com alfabeto
0 = {0, 1, } que decide L em tempo 4 log ||t(n).
Prova. Para construir uma MT que trabalha com 0 vamos codificar cada
smbolo em por um string de log || bits. Em cada passo, a simulacao le
log || na posic
ao atual, calcula o novo smbolo e estado usanda as regras de M ,
escreve os novos log || smbolos, e movimenta a cabecao log || posicoes para
direita ou esquerda. Para essa simulac
ao, a nova maquina precisa armazenar o
estado Q e no m
aximo log || smbolos na cabeca, e ainda precisa um contador
de 1 ate log ||. Isso e possvel com O(Q ||2 ) estados e em menos que
4 log ||t(n) passos (ler, escrever, movimentar e talvez alguns passos para o
controle).
Proposi
c
ao 11.2
Se uma MTD M = (Q, , , ) com = {0, 1} e com k > 1 fitas decide uma
linguagem L em tempo t(n) n, com t(n) tempo-construtvel, entao existe
uma MT com u
nica fita que decide L em tempo 5kt(n)2 .
Prova. Vamos construir uma MT M 0 que simula M com uma u
nica fita.
M 0 armazeno o conte
udo das k fitas de M de forma intercalada nas posicoes
1 + ki, para 1 i k. Para representar as posicoes das cabecas, usamos
ao altera as primeiras n posicoes da sua
smbolos com uma marca a.
M 0 n
fita que contem a entrada, mas copia-las para a posicao n + 1 na codificacao
acima.
Para simular um passo de M , M 0 escaneia a fita de esquerda para direita para
determinar as posic
oes das cabecas e os smbolos correspondentes. Depois M 0
usa as regras de transic
ao de M para determinar o novo smbolo, estado, e o
movimento da cabeca. Um segunda scan da direita para esquerda atualiza a
fita de acordo.
M 0 produz as mesma s
aida que M . Como a maior posicao visitada por M e
t(n), a maior posic
ao visitada por M 0 e no m
aximo kt(n) + 2n (k + 2)t(n)
2kt(n). Portanto, para cada passo de M , M 0 precisa no maximo 5kt(n) passos
(4kt(n) para escanear, e alguns para o controle).
246
11.1. Introducao
M
aquinas universais Uma fato importante e que existem maquinas de Turing universais. Uma m
aquina universal e capaz simular a execucao de qualquer outra m
aquina de Turing M , dado uma representacao hM, xi de M e
da entrada x. A codificac
ao de M consiste em uma lista de todas entradas
conveniente usar uma codificacao
e sadas da func
ao de transic
ao de M . E
com duas caractersticas: (i) Cada string em {0, 1} representa alguma MT.
Caso a codificac
ao e inv
alida, ele representa uma MT default. (ii) Cada MT
possui um n
umero infinito de representac
oes. Isso e possvel permitindo uma
sequencia de 1s no final da representac
ao de M .
Teorema 11.1 (Arora e Barak [6, Th. 1.9])
Existe uma MTD U , tal que para cada i, x {0, 1} temos U (i, x) = Mi (x)
com Mi a MTD representada por i. Caso Mi para com entrada x em T passos,
U (i, x) para em cT log T passos, com C uma constante que e independente de
|x|, e depende somente do tamanho do alfabeto, o n
umero de fitas a n
umero
de estados de Mi .
Prova. Provaremos uma vers
ao simplificada com tempo de simulacao c T 2 .
Primeiro vamos construir uma MT U 0 com 5 fitas. Uma fita e a fita de
entrada, uma fita representa a fita de da m
aquina de Turing M simulada,
uma fita contem a descric
ao de M , uma fita contem o estado atual de M , e a
u
ltima fita e a fita de sada.
Para simular um passo de M , U 0 escaneia a fita com as regras de transicao e
o estado atual de M , para achar a regra de transic
ao a ser aplicada, e depois
executa essa regra. O trabalho para fazer isso e um n
umero constante c0 de
passos por passo de M .
Para achar uma MTD U com uma u
nica fita, podemos aplicar proposicao 11.2.
O n
umero de passos de U ent
ao e limite por c T 2 com c = 25c0 .
Observa
c
ao 11.3
Uma simulac
ao de MTND e possvel com os mesmos limites.
Exemplo 11.2 (M
aquina universal)
Considere a m
aquina M = ({u, d}, {a, b}, {a, b, }, ) com
= {ua ubL, ub uaL, u dbR, da u R, db daR, d uaL}.
Essa m
aquina e universal? Ver http://www.wolframscience.com/prizes/
tm23. Aparentemente o problema foi resolvido em outubro de 2007.
Computabilidade e complexidade
247
248
11.1. Introducao
Exemplos de simulac
ao
Teorema 11.2 (Leeuwen [46])
m tapes 1 tape(time kn2 & space Lin)
m tapes 2 tape(time kn log n & space Lin)
SRAM UTIME T (time n2 log n)
RAM UTIME T (time n3 )
MRAM UTIME T (time Exp)
SRAM LTIME T (time n2 )
RAM LTIME T (time n2 )
MRAM LTIME T (time Poly)
Robustez da complexidade
Tese estendida de Church-Turing
Qualquer modelo de computac
ao universal e equivalente `a maquina de Turing
com
custo adicional de tempo no m
aximo polinomial
custo adicional de espaco no m
aximo constante
Equivalencia definido por simulac
ao mutual.
Verdadeiro para quase todos modelos conhecidos:
Maquina de Turing, c
alculo lambda, m
aquina RAM, maquina
pontador, circuitos l
ogicos, aut
omatos celulares (Conway), avaliac
ao de templates em C++, computador billiard, ...
Computador qu
antico?
Consequ
encia: Shors trilemma
Ou
a tese estendida de Church-Turing e errada, ou
a fsica qu
antica atual e errada, ou
existe um algoritmo de fatorac
ao cl
assico r
apido.
249
251
Hierarquia b
asica
Observac
ao
DTIME[F (n)] NTIME[F (n)] DSPACE[F (n)] NSPACE[F (n)]
Definic
oes conhecidas:
[
P=
DTIME[nk ];
k0
Definic
oes similares para espaco:
[
PSPACE =
DSPACE[nk ];
k0
NP =
NTIME[nk ]
k0
NSPACE =
[
k0
Com a observac
ao acima, temos
P NP DSPACE NSPACE .
252
NSPACE[nk ]
Zoologico de complexidade
12.2. Hierarquias b
asicas
Acelerac
ao
Teorema 12.1
Podemos comprimir ou acelerar computac
oes por um fator constante. Para
todos c > 0 no caso de espaco temos
L DSPACE[s(n)] L DSPACE[cs(n)]
L NSPACE[s(n)] L NSPACE[cs(n)]
e no caso do tempo, para m
aquinas de Turing com k > 1 fitas e t(n) = (n)
L DTIME[s(n)] L DTIME[cs(n)]
L NTIME[s(n)] L NTIME[cs(n)]
Prova. (Rascunho.) A ideia e construir uma MT M 0 que simula uma MT M
executando m passos em um passo. M 0 inicialmente copia a entrada para uma
outra fita, codificando cada m smbolos em um smbolo em tempo n + dn/me.
Depois, em cada passo da simulac
ao, M 0 leia os smbolos na esquerda e direta e
na posicao atual em tempo 4. Depois ela calcula os novos estados no controle
finito, e escreve os tres smbolos novos em tempo 4. Logo, cada m passos
podem ser simulados em 8 passos em tempo
n + dn/me + d8t(n)/me n + n/m + 8t(n)/m + 2 3n + 8t(n)/m
que para cm 16 8/m c/2 e n suficientemente grande nao ultrapassa
ct(n). O n
umero finito de palavras que n
ao satisfazem esse limite superior e
reconhecido diretamente no controle finito.
253
254
2. Nos temos que garantir que M pode simular todas maquinas que tem
limite de espaco f (n). Isso tem duas problemas (a) M possui um alfabeto
de fita fixo, mas a m
aquina simulada pode ter mais smbolos de fita.
Portanto, a simulac
ao precisa um fator c1 de espaco a mais. (b) Por
definic
ao, para f o(g) e suficiente que f cg a partir de um n > n0 .
Logo para entradas |w| n0 o espaco g(n) pode ser insuficiente para
simular qualquer m
aquina que precisa espaco f (n). Esses problemas
podem ser resolvidos usando uma enumerac
ao de MT (com alfabeto )
tal que cada m
aquina possui codificac
oes de comprimento arbitrario (por
exemplo permitindo hM i10n ).
3. Alem disso, temos que garantir que a simulacao para. Portanto M usa
um contador com O(log f (n)) espaco, e rejeita caso a simulacao ultraf (n)
passa c2
passos; c2 depende das caractersticas da maquina simulada
(n
umero de estados, etc.): com isso podemos escolher uma maquina
Com essas preparac
oes, com entrada w, M construa Mw , verifica que Mw e
uma codificac
ao de uma MT e depois simula Mw com entrada w. M rejeita
se Mw aceita e aceita se Mw rejeita.
N
ao existe uma MT que, em espaco f (n) reconhece L(M ): Supoe que M 0
seria m
aquina com essa caracterstica. Com entrada w = hM 0 i01n para n
suficientemente grande M consegue de simular M 0 e portanto, se w M 0
ent
ao w 6 M e se w 6 M 0 ent
ao w M , uma contradicao.
A ideia da prova do primeiro parte e essencialmente a mesma. O fator de log f
surge, porque para simular um MT para um n
umero de passos, e necessario
contar o n
umero de passos ate f (n) em log f (n) bits. Com uma simulacao
mais eficiente (que n
ao e conhecida) seria possvel de obter um teorema mais
forte.
Espaco polinomial
255
NSPACE[s(n)] DSPACE[s(n) ]
Corol
ario: DSPACE = NSPACE
N
ao-determinismo ajuda pouco para espaco!
Walter
J. Savitch
(*1943)
A func
ao tem que ter s(n) log2 n, por que para a simulacao precisamos
tambem gravar a posic
ao de cabeca de entrada em cada nvel, que precisa
log2 n bits.
256
12.3. Exerccios
12.3. Exerccios
Exerccio 12.1
Dado uma m
aquina de Turing com or
aculo para o problema de parada, e
possvel calcular a func
ao do castor ocupado (ingl. busy beaver)?
257
Nome
REG
Tipo
3
Livre de contexto
CFL
Sensitiva ao contexto
Recursivamente
enumer
avel
CSL
RE
Aut
omato
Aut
omato finito (determinstico)
Aut
omato de pilha (n
aodeterminstico)
MT linearmente limitada
(n
ao-determinstico)
MT
Gram
atica
Regular
Livre de contexto
Sensitiva
ao
contexto
Sistema semiThue (sem restric
ao)
259
P e NP em termos de busca
A definic
ao de P e NP e como classes de problemas de decisao.
A linguagem correspondente com uma relacao R e
LR = {x | y : (x, y) R}
A classe P: Linguagens LR tal que existe uma MTD que, com entrada
x LR , em tempo polinomial, busque (x, y) R ou responda, que nao
tem.
Essa definic
ao do P `
as vezes e chamado FP ou PF.
A classe NP: Linguagens LR tal que existe MTD que, com entrada (x, y),
decide se (x, y) R em tempo polinomial. y se chama um certificado.
A restric
ao para problemas de decis
ao facilita o tratamento teorico, mas nao
e importante para a tratabilidade de problemas.
Teorema 13.2 ([65, Th. 2],[6, Th. 2.18])
Para cada problema de busca definido por uma relacao polinomialmente limitada R, existe um problema de decis
ao tal que, caso o problema de decisao
pode ser resolvido em tempo t(n), o problema de busca pode ser resolvido em
tempo nO(1) t(n). Em particular, P = NP sse cada problema de busca possui
soluc
ao em tempo polinomial.
Prova. Para a relac
ao R, considera o problema de decidir, para entrada x,
w, se existe um z tal que (x, w z) R. Sup
oe que temos um algoritmo A que
resolve este problema em tempo t(n). Ent
ao podemos construir o seguinte
algoritmo, para entrada x
260
13.2. Reducoes
1 i f A(x, ) = n
ao then
2
return n
a o e x i s t e s o l u c
ao
3 end i f
4 w :=
5 while (x, w) 6 R do
6
i f A(x, w 0) = sim then
7
w := w 0
8
else
9
w := w 1
10
end i f
11 end while
12 return w
simples de ver que este algoritmo acha uma solucao para o problema de
E
busca, caso existe uma, construindo-a smbolo por smbolo. Como R e polinomialmente limitado, uma soluc
ao possui no m
aximo um n
umero polinomial
de smbolos, e por isso o algoritmo o n
umero de chamadas de A e nao mais
que polinomial no tamanho da entrada.
Exemplos de problemas em NP
CLIQUE = {hG, ki | Grafo n
ao-direcionado G com clique de tamanho k}
SAT = {hi | f
ormula satisfatvel da l
ogica proposicional em FNC}
TSP = {hM, bi | Matriz simetrica de dist
ancias M que tem TSP-cclo b}
COMPOSITE = {hni | n = m1 m2 com m1 , m2 > 1}
13.2. Reduc
oes
Reduc
oes
Defini
c
ao 13.2 (Redu
c
ao em tempo polinomial)
Uma (many-one) reduc
ao entre duas linguagens L, L0 com alfabetos e 0 e
um func
ao total f : 0 tal que x L f (x) L0 . Se f e comput
avel em tempo polinomial, se chama uma reduc
ao em tempo polinomial ;
escrevemos L P L0 .
Defini
c
ao 13.3 (Problemas difceis e completos)
Dado uma classe de problemas C e um tipo de reducao , um problema L e
261
Caractersticas de P
Proposi
c
ao 13.1 (Fecho para baixo)
Se A P B e B P ent
ao A P.
Proposi
c
ao 13.2 (Transitividade)
P e transitivo, i.e. se A P B e B P C entao A P C.
Prova. (Fecho para baixo.) Uma inst
ancia w A pode ser reduzido em
tempo polinomial para w0 B. Depois podemos simular B com entrada w0
em tempo polinomial. Como a composic
ao de polinomios e um polinomio,
A P.
(Transitividade.) Com o mesmo argumento podemos reduzir w A primeiro
para w0 B e depois para w00 C, tudo em tempo polinomial.
O problema de parada
O problema da parada
HALT = {hM, wi | MT M para com entrada w}
n
ao e decidvel.
Qual o caso com
Parada limitada (ingl. bounded halt)
Inst
ancia MT M , entrada w e um n
umero n (em codificacao unaria).
Quest
ao M para em n passos?
262
13.2. Reducoes
Teorema 13.3
Ladrilhar: Exemplo
Ladrilhar: Soluc
ao
263
Ladrilhar: Exemplo
Ladrilhar: O problema
Para um conjunto finito de cores C, o tipo de um ladrilho e uma funcao
t : {N, W, S, E} C.
Ladrilhamento
264
13.2. Reducoes
Inst
ancia Tipos de ladrilhos t1 , . . . , tk e um grade de tamanho n n com
cores nas bordas. (Cada ladrilho pode ser representado por quatro
smbolos para as cores; a grade consiste de n2 ladrilhos em branco e
4n cores; uma inst
ancia tem tamanho O(k + n2 ).
Quest
ao Existe um ladrilhamento da grade tal que todas cores casam
(sem girar os ladrilhos)?
(q, a)
e para q, a q 0 , a0 , R
(, a0 )
(q 0 , R)
(q, a)
Alem disso, tem ladrilhos
265
(q, a)
(, a)
(q, L)
(, a)
(, a)
(, a)
As cores no sul da grade representam a configuracao inicial
(q, R)
em
forma
normal
Quest
ao Tem uma atribuic
ao a1 , . . . , an B que satisfaz ?
266
conjuntiva
13.2. Reducoes
Teorema 13.5 (Cook)
SAT e NP-completo.
Prova (1)
Objetivo: Provar Ladrilhamento P SAT.
Seja
Nx,y,c
Li,x,y
vari
avel o norte da posic
ao x, y tem cor c
S, W, E analogamente
^
:= Nx,y,ti (N )
Nx,y,c
cC
c6=ti (N )
Wx,y,ti (W )
Wx,y,c
cC
c6=ti (W )
Sx,y,ti (S)
Sx,y,c
cC
c6=ti (S)
Ex,y,ti (E)
Ex,y,c
cC
c6=ti (E)
Prova (2)
267
Lc,x,y
Sx,1,cx,1 Nx,n,cx,n
W1,y,c1,y En,y,cn,y
^
x[1,n]
^
y[1,n]
Ex,y,c Wx+1,y,c
Correspondencia E-W
Wx,y,c Ex1,y,c
Correspondencia W-E
Nx,y,c Sx,y+1,c
Correspondencia N-S
Sx,y,c Nx,y1,c
Correspondencia S-N
x[1,n[ y[1,n]
x]1,n] y[1,n]
x[1,n[ y[1,n[
x[1,n[ y]1,n]
Prova (3)
O n
umero de vari
aveis e o tamanho de e polinomial em n, k; pode
ser computado em tempo polinomial para uma instancia de Ladrilhamento.
Portanto, SAT e NP-difcil.
SAT NP, porque para f
ormula e atribuicao a, podemos verificar
a |= em tempo polinomial.
O significado do P = NP
Kurt G
odel 1958: Uma carta para John von Neumann
Obviamente, podemos construir uma m
aquina de Turing, que decide, para
cada f
ormula F da l
ogica de predicados de primeira ordem e cada n
umero natural n, se F tem uma prova do tamanho n (tamanho = n
umero de smbolos).
Seja (F, n) o n
umero de passos que a m
aquina precisa para isso, e seja
(n) = maxF (F, n). A quest
ao e como (n) cresce para uma maquina
possvel provar que (n) kn. Se existisse uma maquina com
otima. E
(n) kn (ou pelo menos (n) kn2 ), isso teria consequencias da maior
268
13.2. Reducoes
import
ancia. Assim, seria
obvio, apesar da indecibilidade do Entscheidungsproblem, poderia-se substituir completamente o raciocnio do matematico em
quest
oes de sim-ou-n
ao por m
aquinas. [62]
Em original a carta diz
Man kann offenbar leicht eine Turingmaschine konstruieren, welche von
jeder Formel F des engeren Funktionenkalk
uls u. jeder nat
url. Zahl n
zu entscheiden gestattet, ob F einen Beweis der L
ange n hat [L
ange
= Anzahl der Symbole]. Sei (F, n) die Anzahl der Schritte, die die
Maschine dazu ben
otigt u. sei (n) = maxF (F, n). Die Frage ist,
wie rasch (n) f
ur eine optimale Maschine w
achst. Man kann zeigen
(n) k n. Wenn es wirklich eine Maschine mit (n) k n (oder auch
nur k n2 ) g
abe, h
atte das Folgerungen von der gr
ossten Tragweite.
Es w
urde n
amlich offenbar bedeuten, dass man trotz der Unl
osbarkeit
des Entscheidungsproblems die Denkarbeit des Mathematikers bei jaoder-nein Fragen vollst
andig durch Maschinen ersetzen k
onnte.
A significado do P = NP
Centenas de problemas NP-completos conhecidos seriam tratavel.
Todos os problemas cujas soluc
oes s
ao reconhecidas facilmente (polinomial), teriam uma soluc
ao f
acil.
Por exemplo na inteligencia artificial: planejamento, reconhecimento de
linguagens naturais, vis
ao, talvez tambem composicao da m
usica, escrever ficc
ao.
A criptografia conhecida, baseada em complexidade, seria impossvel.
269
Decis
ao A matriz e consistente (tem uma configuracao dos campos escondidos, que podem ser bombas ou livres tal que os n
umeros sao
corretos)?
O mundo agora
O milagre da NP-completude
Qualquer problema em NP tem uma reducao polinomial para SAT!
Por que n
ao usar s
o SAT? (soluc
oes em 1.3n )?
Teorema 13.6 (Ladner [45])
Se P 6= N P , existe uma linguagem L N P que nem
e NP-completo nem em P.
Stephen Arthur
Cook (*1939)
Leonid Levin
(*1948)
Muitos se interessavam
13.3. Exerccios
13.3. Exerccios
Exerccio 13.1
Mostra que a vers
ao de decis
ao do seguinte problema e NP-completo: A entrada e uma inst
ancia do problema do caixeiro viajante e uma solucao otima
do problema. Dado uma nova cidade e a dist
ancias correspondentes encontra
a nova soluc
ao
otima.
271
14. Fora do NP
Classes fora do P-NP
L = DSPACE[log n]
NL = NSPACE[log n]
[
k
EXPTIME =
DTIME[2n ]
k>0
NEXPTIME =
NTIME[2n ]
k>0
EXPSPACE =
DSPACE[2n ]
k>0
NEXPSPACE =
NSPACE[2n ]
k>0
Co-classes
Defini
c
ao 14.1 (Co-classes)
Para uma linguagem L, a linguagem complementar e L = \ L. Para uma
classe de complexidade C, a co-classe co C = {L | L C} e a classe das
linguagens complementares.
Proposi
c
ao 14.1
P = co P.
Qual problema pertence `
a NP?
CLIQUE, SAT, TSP, COMPOSITE.
Prova. Seja L P. Logo existe um MTD M tal que L = L(M ) em tempo
nk . Podemos facilmente construir uma MTD que rejeita se M aceita e aceita
se M rejeita.
N
ao sabemos se CLIQUE, SAT, TSP pertencem `
a NP. Em 2002 foi provado, que
COMPOSITE P [2]. Observe que se aplicas so para o teste se um n
umero e
primo ou n
ao. O problema de fatorizac
ao e mais complicado.
273
14. Fora do NP
A classe co-NP
A definic
ao da classe NP e unilateral. Por exemplo, considere
TAUT
Inst
ancia F
ormula proposicional em forma normal disjuntiva .
Decis
ao e uma tautologia (Todas as atribuicoes satisfazem )?
Uma prova sucinta para esse problema nao e conhecido, entao suponhamos que TAUT 6 NP.
Em outras palavras, NP parece de n
ao ser fechado sobre a complementac
ao:
co-NP 6= NP ?
Proposi
c
ao 14.2
Se L NPC ent
ao L co-NP NP = co-NP.
Proposi
c
ao 14.3
TAUT e co-NP-completo.
Prova. (Proposic
ao 14.2.) Seja L NPC. (): Seja L co-NP. Se L0 NP,
0
temos L P L co-NP, logo NP co-NP. Se L0 co-NP, entao L0 NP e
L0 P L co-NP, logo L0 co-NP e L0 NP. (): Como L NPC NP, e
NP = co-NP, tambem L co-NP.
Prova. (Proposic
ao 14.3, rascunho.) TAUT co-NP, porque uma MT com
um estado universal pode testar todas atribuicoes das variaveis proposicionais
e aceita se todas s
ao verdadeiras.
Para provar a completude, temos que provar, que toda linguagem L co-NP P
TAUT. A prova e uma modificac
ao da prova do teorema de Cook: Com enormula w usando o metodo de Cook. Temos
trada w L produzimos uma f
w L w satisfatvel
w L w insatisfatvel
pela def. de w
negacao da afirmacao
w e tautologia
274
14.1. De P at
e PSPACE
O mundo inteiro (2)
275
14. Fora do NP
Problemas PSPACE-completos
N
ao sabemos, se NP = PSPACE ou ate P = PSPACE
Como resolver isso? Da mesma forma que a questao P = NP: busque
problemas PSPACE-completos (relativo a P ).
Considere
Formulas booleanas quantificadas (ingl. quantified boolean
formulas, QBF)
Inst
ancia Uma sentenca booleana
:= (Q1 x1 )(Q2 x2 ) (Qn xn )[(x1 , x2 , . . . , xn )]
com Qi {, }.
Decis
ao e verdadeira?
Exemplo:
(x1 )(x2 )(x3 )(x1 x3 x2 )
Teorema 14.1
QBF e PSPACE-completo.
f
Prova. (Rascunho.) E
acil de provar que QBF PSPACE: Podemos verificar
recursivamente que a sentenca e verdadeira: Para uma formula Qx1 (x1 , . . .)
com Q {, } vamos aplicar o algoritmos para os casos (0) e (1).
276
Outro exemplo
Palavra em linguagem sensvel ao contexto
Inst
ancia Gram
atica sensvel ao contexto, palavra w.
Decis
ao w L()
Mais quantificac
oes
O que acontece, se n
os permitimos mais quantificacoes?
277
14. Fora do NP
A hierarquia polinomial
Estendemos relac
oes para aridade i + 1. Uma relacao R ( )i+1 e
limitada polinomial, se
(x, y1 , . . . , yi ) R p poly i |yi | p(|x|)
Defini
c
ao: i e a classe das linguagens L, tal que existe uma relacao
de aridade i + 1 que pode ser reconhecida em tempo polinomial, e
x L y1 y2 Qi : (x, y1 , . . . , yi ) R
Defini
c
ao: i e a classe das linguagens L, tal que existe uma relacao
de aridade i + 1 que pode ser reconhecida em tempo polinomial, e
x L y1 y2 Qi : (x, y1 , . . . , yi ) R
As classes i e i formam a hierarquia polinomial.
Observac
ao: 1 = NP, 1 = co-NP.
Quantificac
oes restritas ou n
ao
Conjunto das classes com quantificac
oes restritas:
[
PH =
k
k0
Corol
ario 14.1
ATIME = PSPACE
Esta caracterizac
ao facilita entender por que QBF e PSPACE-completo
278
Peru...
279
14. Fora do NP
Mais exemplos da classe PSPACE (3)
Teorema 14.3
Geografia generalizada e PSPACE-completo.
O mundo at
e PSPACE
14.2. De PSPACE at
e ELEMENTAR
Problemas intrat
aveis demonstr
aveis
280
O(1)
]=
DTIME[2n ]
k0
NEXP = NTIME[2n
O(1)
]=
NTIME[2n ]
k0
EXPSPACE = DSPACE[2n
O(1)
]=
DSPACE[2n ]
k0
Estas classes s
ao as primeiras demonstravelmente separadas de P.
Consequencia: Uma linguagem completa em EXP nao e tratavel.
Exemplo de um problema EXP-completo:
1
16
2
65536
3
1.16 1077
4
2 1019728
k EXP
k0
281
14. Fora do NP
O mundo at
e ELEMENTAR
Completo para
NP
PSPACE
NEXP
EXPSPACE
Fora do ELEMENTAR!
O tempo do u
ltimo problema de decis
ao cresce ao menos como uma torre
de altura lg n.
14.3. Exerccios
Exerccio 14.1
Considera a seguinte prova que o problema de isomorfismo de grafos (GI) e
PSPACE-completo:
282
14.3. Exerccios
The equivalence problem for regular expressions was shown to be
PSPACE-complete by (Meyer and Stockmeyer [2]). Booth [1] has
shown that isomorphism of finite automata is equivalent to graph
isomorphism. Taking these two results together with the equivalence of regular expressions, right-linear grammars, and finite
automata see [3] for example, shows that graph isomorphism is
PSPACE-complete.
[18]
Sabendo que GI pertence a NP isso implicaria PSPACE = NP. Acha o erro na
prova.
283
v(e)
caso d e rotulado com e (e, d) E
xi
case d e a i-gesima entrada
Observa
c
ao 15.1
A definic
ao permite um fan-out arbitr
ariamente grande. Um fan-in k > 2
pode ser implementado por uma cadeia de k 1 portas com fan-in 2.
Exemplo 15.1
A func
ao booleana simetrica S1,3 (x1 , . . . , x4 ) e realizado pelo circuito
285
x1
x2
x3
x4
N
ao e difcil verificar que (x) = f (x). Uma implementacao por um circuito
booleano precisa no m
aximo n+(n1+n)2n +2n 1+1 = n+2n2n = O(n2n )
portas l
ogicas.
286
O seguinte lema estabelece que tudo que pode ser decidido por uma MT, pode
ser decido por uma famlia de circuitos booleanos de tamanho nao mais que
o quadrado do tempo de execuc
ao da MT.
Lema 15.1
2
Para uma func
ao t : N N tal que L DTIME(t(n)) temos L SIZE(O(t(n) )).
Prova. (Rascunho.) Seja L P alguma linguagem e M a MTD correspondente. Cada execuc
ao possvel de M pode ser representado por uma tableau
T = (tij ) de tamanho t(n) t(n). Cada celula tij contem um smbolo da
fita em ou ainda um smbolo em Q representando adicionalmente a
posicao e o estado da cabeca. O conte
udo da celula tij depende somente do
conte
udo das celulas ti1,j1 , ti1,j e ti1,j+1 . Seja sijk {0, 1} um valor booleano que e verdadeira caso a celula ti,j contem o smbolo k (com
k = | Q|). Para cada regra da MTD que define o valor de tij como s0 ,
dado valores ti1,j1 = s1 , ti1,j = s2 e ti1,j+1 = s3 , vamos adicionar um
circuito si1,j1,s1 si1,j,s2 si1,j+1,s3 `
a celula tij . O novo smbolo em i, j
e k, caso existe alguma transic
ao desse tipo, i.e,
_
sijk =
si1,j1,s1 si1,j,s2 si1,j+1,s3
tij =k|ti1,j1 =s1 ,ti1,j =s2 ,ti1,j+1 =s3
287
288
M
aquinas de Turing com conselho
e como MT com conselho.
Defini
c
ao 15.5 (M
aquina de Turing com conselho)
Para func
oes T, a : N N a classe de complexidade DTIME(t(n))/a(n) dedidveis por m
aquinas de Turing em tempo t(n) com conselho de a(n) bits
contem todas linguagens L tal que existe uma sequencia {n }nN de strings
com n {0, 1}a(n) e uma MT M tal que
x L M (x, |x| ) = 1
e M precisa para a entrada (x, |x| ) no m
aximo O(t(n)) passos.
Teorema 15.2 (Caracteriza
c
ao alternativa de P/poly)
P/poly =
DTIME(nk )/nl
k,l>0
Prova. (Rascunho.)
Caso L P/poly temos uma famlia {Cn }nN de tamanho polinomial que
decide L. A descric
ao de Cn serve como conselho para uma MTD M que
simplesmente para entrada x avalia Cn (x).
Caso L e decidvel por uma MTD M com conselho {n }nN de tamanho
polinomial a(n), podemos usar a construc
ao do lema 15.1 para construir, para
cada tamanho n, um circuito Dn tal que Dn (x, ) = M (x, ). Com isso
podemos tambem construir um circuito Cn tal que Cn (x) = Dn (x, |x| ): Cn
simplesmente tem as entradas n hard-wired, sem aumentar a complexidade
do circuito.
Um limitante inferior para uma classe restrita
Defini
c
ao 15.6 (Classes ACd e AC)
Para cada d, a classe ACd contem todas linguagens que decidveis para uma
famlia de circuitos {Cn }nN de tamanho
S polynomial, com fan-in ilimitado e
profundidade O(logd n). A classe AC e k>0 ACd .
Lema 15.2 (Lema de troca de H
astad (switching lemma))
Dado uma func
ao que possui uma representac
ao por uma formula em k-DNF
(forma normal disjuntiva), e uma restric
ao rand
omica que atribuicao a t
entradas de f valores rand
omicos, temos, para cada s 2
s/2
(n t)k 10
Pr[f | n
ao possui s-CNF]
289
u
ltimo nvel. Temos n0 = n e vamos restringir ni ni variaveis na i+1-esima
i
restric
ao, i.e., ni = n1/2 , mantendo um fan-in no maximo ki = 10b2i . Supoe
essas restric
oes s
ao satisfeitas ap
os da i-gesima restricao e o pen
ultimo nvel
contem disjunc
oes. Os u
ltimos dois nvel representam formulas em ki -DNF.
Pelo lema 15.6 ent
ao existe com probabilidade ao menos
10 ki+1 /2
1
k
1
1 i
10nb
ni
para n suficientemente grande, uma ki+1 -CNF que representa a mesma funcao.
Agora existem dois nveis de conjunc
oes que podemos unir reduzindo a profundidade do circuito por um. Caso o pen
ultimo nvel consiste em conjuncoes
uma transformac
ao similar e possvel.
O lema e aplicada para cada um dos nb portas logicas no maximo um vez, e
a probabilidade de falhar e 1/10nb , portanto a probabilidade de falhar nas
d 2 reduc
oes de um nvel e 1/10, i.e., com probabilidade 9/10 existe um
circuito com as caractersticas desejadas. Este circuito resultando tem fanin kd2 no u
ltimo nvel e portanto e uma kd2 -FNC ou kd2 -FND. Portanto,
290
fixando no m
aximo kd2 vari
aveis (zerando todas variaveis de uma cla
usula,
por examplo), obtemos uma func
ao constante. Mas a funcao da paridade
nunca e constante para uma restric
ao de menos que n variaveis. Portanto o
circuito n
ao pode ser a representac
ao de .
291
A. Conceitos matem
aticos
Nessa sec
ao vamos definir alguns conceitos b
asicos da matematica.
Defini
c
ao A.1
Para um conjunto C e fecho de Kleene C denota o conjunto de tdos sequencias
sobre C.
A.1. Func
oes comuns
N, Z, Q e R denotam os conjuntos dos n
umeros naturais sem 0, inteiros,
racionais e reais, respectivamente. Escrevemos tambem N0 = N {0}, para
qualquer conjunto C, C+ := {x C|x > 0} e C := {x C|x < 0}. Por
exemplo
R+ = {x R|x > 0}.1
Para um conjunto finito S, P(S) denota o conjunto de todos subconjuntos de
S.
Defini
c
ao A.2 (Valor absoluto)
O valor absoluta | | e definido por
(
x
|x |=
x
se x 0
se x < 0
Proposi
c
ao A.1 (Regras para valores absolutos)
` x| = |x|
(A.1)
x |x|
(A.2)
|x + y| |x| + |y|
|xy| = |x||y|
1 Alguns
Desigualdade triangular
(A.3)
(A.4)
autores usam R+ .
293
A. Conceitos matem
aticos
Prova. (i) Se x > 0 temos x < 0, logo ` x |= x e |x |= x. O casos
restantes podem ser analisadas analogamente. (ii) Analise da casos. (iii) Para
x + y < 0: |x + y |= (x + y) = (x) + (y) ` x|+ ` y |= |x| + |y|. Para
x + y 0: |x + y |= x + y |x| + |y|. (iv) Para xy 0: Se x = 0 temos
|xy |= 0 = |x||y|, se x > 0 temos y > 0 e |xy |= xy = |x||y|, se x < 0 temos
y < 0 e |xy |= xy = (|x|)(|y|) = |x||y|. Caso xy < 0 similar.
Corol
ario A.1
X
X
xi
|xi |
1in
1in
Y
Y
=
x
|xi |
i
1in
(A.5)
(A.6)
1in
(A.7)
Prova. Prova com induc
ao sobre n.
Proposi
c
ao A.2 (Regras para o m
aximo)
Para ai , bi R
max ai + bi max ai + max bi
i
(A.8)
Defini
c
ao A.3 (Pisos e tetos)
Para x R o piso bxc e o maior n
umero inteiro menor que x e o teto dxe e o
menor n
umero inteiro maior que x. Formalmente
bxc = max{y Z|y x}
dxe = min{y Z|y x}
O parte fracion
ario de x e {x} = x bxc.
Observe que o parte fracion
ario sempre e positivo, por exemplo {0.3} = 0.7.
294
(A.9)
x 1 < bxc x
(A.10)
Defini
c
ao A.4
O fatorial e a func
ao
Y
n! : N N : n 7
i.
1in
n! = 2n
(1 + O(1/n))
e
Uma estimativa menos preciso, pode ser obtido pelas observacoes
(A.11)
n! nn
en =
X ni
i0
i!
>
nn
n!
loga 1 = 0
loga n
=n
(A.12)
por definic
ao
(A.13)
propriedade do produto
(A.14)
propriedade da divisao
(A.15)
loga nm = m loga n
propriedade da potencia
(A.16)
troca de base
(A.17)
mudanca de base
(A.18)
alogc b = blogc a
expoentes
(A.19)
(A.20)
295
A. Conceitos matem
aticos
Os n
umeros harm
onicos
X
Hn =
1/i
1in
ocorrem freq
uentemente na an
alise de algoritmos.
Proposi
c
ao A.4
ln n < Hn < ln n + 1.
Prova. Resultado da observac
ao que
Z
n+1
1
dx < Hn < 1 +
x
1
R
(veja figura A.1) e o fato que 1/x = ln x:
n+1
Z
2
Z
ln(n) ln(n + 1) =
1
Z
2
n+1
1
dx
x1
n+1
1
x
1
= ln(n)
x1
0
1 + log (log n)
se n 1
caso contrario
296
0
0
10
(A.21)
(A.22)
Exemplo A.1
Exemplos
de func
oes convexas s
ao x2k , 1/x. Exemplos de funcoes concavas
sao log x, x.
Proposi
ao A.6
P c
Para i[n] i = 1 e pontos xi , i [n] uma func
ao convexa satisfaz
f
X
i x i
i f (xi )
i[n]
i[n]
X
i x i
i f (xi )
i[n]
i[n]
(A.23)
e uma func
ao concava
f
(A.24)
297
A. Conceitos matem
aticos
=P
definic
ao. Para n > 2 define
i[2,n] i tal que + = 1. Com isso
temos
X
X
i xi = f (1 x1 + y)
i xi = f 1 x1 +
f
i[2,n]
i[n]
onde y =
j[2,n] (j /)xj ,
logo
(y)
i xi 1 f (x1 ) + f
i[n]
= 1 f (x1 ) + f
j
(j /)x
j[2,n]
1 f (x1 ) +
(xj ) =
(j /)f
j[2,n]
i xi
i[n]
A.2. Somat
orio
Revis
ao: Notac
ao Somat
orio
Para k uma constante arbitr
aria temos
n
X
i=1
n
X
kai = k
n
X
ai
Distributividade
(A.25)
i=1
k = nk
(A.26)
i=1
n X
m
X
n
X
ai bj =
i=1 j=1
n
X
i=1
p
X
i=1
n
X
i=0
298
!
ai
n
X
n
X
ai
i=p+1
p
X
ai +
api =
i=pn
bj
Distributividade generalizada
(A.27)
Associatividade
(A.28)
j=1
i=1
ai +
i=1
(ai + bi ) =
m
X
n
X
bi
i=1
n
X
ai
(A.29)
i=1
ai
(A.30)
A.2. Somatorio
Au
ltima regra e um caso particular de troca de ndice (ou comutacao) para
somas. Para um conjunto finito C e uma permutacao dos n
umeros inteiros
temos
X
X
a(i) .
ai =
iC
(i)C
0pin
pnip
Parte da an
alise de algoritmos se faz usando somat
orios, pois lacos while e for
em geral podem ser representados por somat
orios. Como exemplo, considere
o seguinte problema. Dadas duas matrizes matA e matB, faca um algoritmo
que copie a matriz triangular inferior de matB para matA.
Uma an
alise simples deste algoritmo seria:
n X
i
X
i=1 j=1
1=
n
X
i=1
S
eries
n
X
i=1
n
X
i=0
i=
n(n + 1)
2
xi =
xn+1 1
x1
serie aritmetica
(A.31)
(A.32)
299
A. Conceitos matem
aticos
se |x| < 1 ent
ao
X
k=0
xk =
1
1x
(A.33)
xb+1 xa
x1
xi =
aib
para x 6= 1
(A.34)
Logo
(
(xb ) para x > 1
f (b) =
x =
(1) para x < 1
aib
X
(A.35)
S
eries
n
X
i=1
n
X
i=0
n
X
2i = 2n+1 2
(A.36)
n(n + 1)(2n + 1)
6
(A.37)
i2i = 2 + (n 1)2n+1
(A.38)
i2 =
i=0
ifi =
1in
fi =
1in 1ji
1jin
300
1in
fi
X
1i<j
1jn jin
1jn
fi =
fi .
fi
A.3. Inducao
Uma aplicac
ao:
ix =
=
1jn
1in
1
x1
1
=
x1
1in
1jn
1i<j
xn+1 xj
X xn+1 x1
xj x1
=
x1
x1
1jn
nx
n+1
xn+1 x1
x1
=
x
(xn (nx n 1) + 1)
(x 1)2
(A.39)
Em particular
(
f (n) =
X
1in
ix =
(A.40)
A.3. Induc
ao
Revis
ao: Induc
ao matem
atica
Importante para provar resultados envolvendo inteiros.
Seja P(n) uma propriedade relativa aos inteiros.
Se P(n) e verdadeira para n=1 e
se P(k) verdadeira implica que P(k+1) e verdadeira
ent
ao P(n) e verdadeira para todo inteiro n 1.
Revis
ao: Induc
ao matem
atica
Para aplicarmos induc
ao matem
atica deve-se:
Passo inicial: verificar se P(n) e verdadeira para a base n0 .
Hip
otese: assumir P(n) v
alida.
Prova: provar que P(n) e v
alida para qualquer valor de n n0 .
Se os passos acima forem verificados, conclui-se que P(n) e valida para
qualquer valor de n n0
301
A. Conceitos matem
aticos
Induc
ao matem
atica: exerccios
Mostre que n! nn .
Mostre que
1
loga (c)
= logc (a).
2i 1
i=1
qi =
i=0
qn 1
.
q1
A.4. Limites
Defini
c
ao A.7 (Limites)
Para f : N R o limite de n para e definido por
lim f (n) = c c > 0 n0 n > n0 |f (n) c| < .
(A.41)
Caso n
ao existe um c R a func
ao e divergente. Uma forma especial de
divergencia e quando a func
ao ultrapasse qualquer n
umero real,
lim f (n) = c n0 n > n0 f (n) > c
Tambem temos
lim inf f (n) = lim
inf f (m)
n
n mn
lim sup f (n) = lim sup f (m)
n
302
mn
(A.42)
Exemplo A.2
Para um dado sem bias temos = {1, 2, 3,P
4, 5, 6} e Pr[i] = 1/6. O evento
Par = {2, 4, 6} tem probabilidade Pr[Par] = ePar Pr[e] = 1/2.
Probabilidade: Noc
oes b
asicas
Vari
avel aleat
oria
X:N
Escrevemos Pr[X = i] para Pr[X 1 (i)].
Vari
aveis aleat
orias independentes
P [X = x e Y = y] = P [X = x]P [Y = y]
Valor esperado
E[X] =
X
e
Pr[e]X(e) =
i Pr[X = i]
i0
303
A. Conceitos matem
aticos
Linearidade do valor esperado: Para variaveis aleatorias X, Y
E[X + Y ] = E[X] + E[Y ]
Prova. (Das formulas equivalentes para o valor esperado.)
X
X
Pr[X = i]i =
Pr[X 1 (i)]i
0i
0i
Pr[e]X(e) =
0i eX 1 (i)
Pr[e]X(e)
Prova. (Da linearidade.)
X
E[X + Y ] =
Pr[e](X(e) + Y (e))
e
Pr[e]X(e)
Exemplo A.3
(Continuando exemplo A.2.)
Seja X a vari
avel aleat
orio que denota o n
umero sorteado, e Y a variavel
aleat
orio tal que Y = [a
face em cima do dado tem um ponto no meio].
X
X
E[X] =
Pr[X = i]i = 1/6
i = 21/6 = 7/2
E[Y ] =
i0
1i6
= E[X] + E[Y ] = 4
i0
A.6. Grafos
Seja [D]k o conjunto de todos subconjuntos de tamanho k de D.
Um grafo (ou grafo n
ao-direcionado) e um par G = (V, E) de vertices (ou
n
os ou pontos) V e arestas (ou arcos ou linhas) E tal que E [V ]2 . Com
|G| e kGk denotamos o n
umero de vertices e arestas, respectivamente. Dois
vertices u, v s
ao adjacentes, se {u, v} E, duas arestas e, f sao adjacentes, se
304
A.6. Grafos
e f 6= . Para um vertice v, a vizinhanca (de vertices) N (v) e o conjunto
de todas vertices adjacentes com ele, e a vizinhanca (de arestas) E(v) e o
conjunto de todas arestas adjacentes com ele. O grau de um vertice v e o
n
umero de vizinhos (v) = |N (v) |= |E(v)|.
Um caminho de comprimento k e um grafo C = ({v0 , . . . , vk }, {{vi , vi+1 } |
0 i < k}) com todo vi diferente. Um ciclo de comprimento k + 1 e um
caminho com a aresta adicional {vn , v0 }. O caminho com comprimento k e
denotado com P k , o ciclo de comprimento k com C k .
Um grafo G e conexo se para todo par de vertices u, v existe um caminho
entre eles em G.
Um subgrafo de G e um grafo G0 = (V 0 , E 0 ) tal que V 0 V e E 0 E,
escrito G0 G. Caso G0 contem todas arestas entre vertices em V 0 (i.e.
E 0 = E [V 0 ]2 ) ela e um subgrafo induzido de V 0 em G, escrito G0 = G[V 0 ].
Um grafo direcionado e um par G = (V, E) de vertices V e arestas E V 2 .
Cada aresta e = (u, v) tem um comeco u e um termino v.
305
B. Soluc
oes dos exerccios
Solu
c
ao do exerccio 1.2.
Prova de 1.6:
: Seja f O(g). Como s(n) = supmn f (m)/g(m) e nao-crescente e
maior ou igual que 0, e suficiente mostrar que existe um n tal que s(n) < .
Por definic
ao do O temos c > 0 e n0 tal que n > n0 f cg. Logo n >
n0 supmn f (m)/g(m) c.
: Seja lim supn f (n)/g(n) < . Ent
ao
c > 0n0 n > n0 ( sup f (m)/g(m)) < c.
mn
307
B. Soluc
oes dos exerccios
Prova de 1.9:
f (g)
f (n)/g(n) n
ao possui limite
Solu
c
ao do exerccio 1.3.
Prova de 1.10: Escolhe c = 1, n0 = 0.
Prova de 1.11: Se g cO(f ), temos g = cg 0 e existem c0 > 0 e n0 tal que
n > n0 g 0 c0 f . Portanto n > n0 g = cg 0 cc0 f e com cc0 e n0 temos
g O(f ).
Prova de 1.12: Para g O(f ) + O(f ) temos g = h + h0 com c > 0 e n0 tal
que n > n0 h cf e c0 > 0 e n00 tal que n > n0 h0 c0 f . Logo para
n > max(n0 , n00 ) temos g = h + h0 (c + c0 )f .
Prova de 1.13: Para g O(O(f )) temos g ch com h c0 f a partir de
ndices n0 e n00 , e logo g cc0 h a partir de max(n0 , n00 ).
Prova de 1.14: h = f 0 g 0 com f 0 cf f e g 0 cg g tal que h = f 0 g 0 cf cg f g.
Prova de 1.15: Para h O(f g) temos c > 0 e n0 tal que n > n0 h cf g.
Temos que mostrar, que h pode ser escrito como h = f g 0 com g 0 O(g). Seja
(
h(n)/f (n) se f (n) 6= 0
g 0 (n) =
cg(n)
caso contrario
alise de casos. Com isso, temos tambem
Verifique-se que h = f g 0 por an
g 0 = h/f cf g/f = cg nos casos f (n) 6= 0 e g 0 = cg cg caso contrario.
Solu
c
ao do exerccio 1.4.
1. Temos as equivalencias
f g f O(g)
c n0 n > n0 f cg
c0 n0 n > n0 g c0 f
com c0 = 1/c
g (f )
2. A reflexividade e transitividade s
ao f
aceis de verificar. No exemplo do
, f f , porque nf (n) f (n) e f g, g h garante que a partir de
um n0 temos f cg e g c0 h e logo f (cc0 )h tambem. Caso f g e
g f temos com item (a) f g e logo f g pela definicao de .
308
3. Temos as equivalencias
f g f o(g)
c n0 n > n0 f cg
c0 n0 n > n0 g c0 f
com c0 = 1/c
g (f )
4. O argumento e essencialmente o mesmo que no item (a).
5. Como e definido pela intersecc
ao de O e , a sua reflexividade e
transitividade e uma consequencia da reflexividade e transitividade do
O e . A simetria e uma consequencia direta do item (a).
Solu
c
ao do exerccio 1.5.
Prova de 1.21 e 1.22: Suponha f g e f g. Entao existe um c tal que a
partir de um n0 temos que f = cg (usa as definic
oes). Mas entao f 6 g e uma
contradic
ao. A segunda caracterstica pode ser provada com um argumento
semelhante.
Para provar as tres afirmac
oes restantes considere o par de funcoes n e en sin(n) .
Verifique-se que nenhuma relac
ao , , , ou e verdadeira.
Solu
c
ao do exerccio 1.6.
As caractersticas correspondentes s
ao
f = (f )
(B.1)
c(f ) = (f )
(B.2)
(f ) + (f ) = (f )
(B.3)
((f )) = (f )
(B.4)
(f )(g) = (f g)
(B.5)
(f g) = f (g)
(B.6)
Todas as caractersticas se aplicam para tambem. As provas sao modificacoes simples das provas das caractersticas 1.10 ate 1.15 com substitudo
por .
Prova.
Prova de B.1: Escolhe c = 1, n0 = 0.
Prova de B.2: Se g c(f ), temos g = cg 0 e existem c0 > 0 e n0 tal que
n > n0 g 0 c0 f . Portanto n > n0 g = cg 0 cc0 f e com cc0 e n0 temos
g (f ).
309
B. Soluc
oes dos exerccios
Prova de B.3: Para g (f ) + (f ) temos g = h + h0 com c > 0 e n0 tal
que n > n0 h cf e c0 > 0 e n00 tal que n > n0 h0 c0 f . Logo para
n > max(n0 , n00 ) temos g = h + h0 (c + c0 )f .
Prova de B.4: Para g ((f )) temos g ch com h c0 f a partir de ndices
n0 e n00 , e logo g cc0 h a partir de max(n0 , n00 ).
Prova de B.5: h = f 0 g 0 com f 0 cf f e g 0 cg g tal que h = f 0 g 0 cf cg f g.
Prova de B.6: h cf g. Escrevendo h = f g 0 temos que mostrar g 0 (g).
Mas g 0 = h/f cf g/f = cg.
Solu
c
ao do exerccio 1.7.
:
Seja f + c O(g), logo existem c0 e n0 tal que n > n0 f + c c0 g. Portanto
f f + c c0 g tambem, e temos f O(g).
:
Essa direc
ao no caso geral n
ao e v
alida. Um contra-exemplo simples e 0 O(0)
mas 0 + c 6 O(0). O problema e que a func
ao g pode ser 0 um n
umero infinito
de vezes. Assim f tem que ser 0 nesses pontos tambem, mas f + c nao e. Mas
com a restric
ao que g (1), temos uma prova:
Seja f O(g) logo existem c0 e n00 tal que n > n00 f c0 g. Como g (1)
tambem existem c00 e n000 tal que n > n000 g c00 . Logo para n > max(n00 , n000 )
f + c c0 g + c c0 g +
c
c
g = (c0 + 00 )g.
c00
c
Solu
c
ao do exerccio 1.8.
1. Para n 2 temos log 1 + n log 2n = log 2 + log n 2 log n.
2. Seja f log O(n2 ), i.e. f = log g com g tal que n0 , c n > n0 g cn2 .
Ent
ao f = log g log cn2 = log c+2 log n 3 log n para n > max(c, n0 ).
3. Temos que mostrar que existem c e n0 tal que n > n0 log log n c log n.
Como log n n para todos n 1 a inequacao acima esta correto com
c = 1.
Solu
c
ao do exerccio 1.9.
Para provar fn = O(n) temos que provar que existe um c tal que fn cn a
importante que a constante c e a mesma para todo n.
partir um ponto n0 . E
Na verificac
ao do professor Veloz a constante c muda implicitamente, e por
310
isso ela n
ao e v
alida. Ele tem que provar que fn cn para algum c fixo. Uma
tentativa leva a
fn = 2fn1
2cn
6 cn
Perdido!
311
B. Soluc
oes dos exerccios
6. n2 3n n3 2n + 1 n2 3n n3 2n+1 2 log2 n + n log2 3 3 log2 n +
(n + 1) log2 2 n log2 3 log2 n + (n + 1) n(log2 3 1)/2 log2 n
Solu
c
ao do exerccio [64, p. 2.9].
Com f (nr ) e g (ns ) temos
c1 nr f c2 nr ;
d1 ns g d2 ns
a partir de um n0
Solu
c
ao do exerccio 1.18.
Como log n = (1/) log n (1/)n , usando c = 1/ e n0 = 1 satisfaz a
condic
ao necess
aria da definic
ao de O.
Solu
c
ao do exerccio 2.1.
i1
Cp [Alg1] =
n 2X
X
c=
i=1 j=1
n
c X i
2 = c 2n c = O(2n )
2 i=1
Os detalhes da resoluc
ao do algoritmo abaixo foram suprimidos. Resolva com
detalhes e confira se a complexidade final corresponde `a encontrada na analise
abaixo.
Cp [Alg2] =
1in
1j2i
j
mpar
= O(
j2
j2
1in 1j2i
(2i )3 )
1in
= O(
1in
312
8i ) =
8n+1 8
8n+1 = O(8n )
7
Cp [Alg3] =
=
n X
n
X
2 =
i=1 j=i
n
X
i
n
X
2i (n i + 1)
i=1
(n2 i2i + 2i ) =
i=1
= n (2
n+1
n+2
=2
n.2i
i=1
n+1
= n2
n
X
2n 2 n2
i.2i +
i=1
n+1
2) (2 + (n 1) 2
n+1
n
X
+2
n+1
) + (2
+2
n+1
n
X
2i
i=1
n+1
2)
2n 4 = O(2 )
Cp [Alg4] =
n X
i
X
2j =
n
X
i=1 j=1
n
X
i
n
X
i=1
i=1
i=1
=2
(2i+1 2)
2 = 2 (2n+1 2) 2n
= 4 2n 4 2n = O(2n )
Cp [Alg5] =
n
n X
X
2j =
i=1 j=i
n
X
n
X
i=1
j=1
2j
i1
X
2j
j=1
n
X
2n+1 2 (2i1+1 2) =
2 2n 2 2i + 2
i=1
n
X
=2
n
X
i=1
2n
i=1
n
n
X
2i = 2 n2n (2n+1 2)
i=1
n
= 2 n2 2 2 + 2 = O(n2n )
Solu
c
ao do exerccio 2.2.
O problema e o mesmo da prova do exerccio 1.9: Na prova a constante c
muda implicitamente. Para provar Tn = O(n) temos que provar Tn cn para
313
B. Soluc
oes dos exerccios
c fixo. Essa prova vira
X
Tn = n 1 + 2/n
O(i)
0i<n
n 1 + 2c/n
0i<n
= n 1 + c(n 1) = cn + (n 1 c)
6 cn
N
ao funciona para n > c + 1
Solu
c
ao do exerccio 2.3.
Uma soluc
ao simples e manter um m
aximo M e o segundo maior elemento m
no mesmo tempo:
1 M :=
2 m :=
3 fo r i = 1, . . . , n do
4
i f ai > M then
5
m := M
6
M := ai
7
e l s e i f ai > m do
8
m := ai
9
end i f
10 end f o r
11 return m
O n
umero de comparac
oes e ao m
aximo dois por iteracao, e esse limite ocorre
numa sequencia crescendo 1, 2, . . . , n. Portanto, a complexidade pessimista e
2n = (n). Existem outras soluc
oes que encontram o segundo maior elemento
com somente n + log2 n comparac
oes.
1
2
3
Solu
c
ao do exerccio 2.4.
Uma abordagem simples com busca exaustiva e
P
m := 1in ai
fo r C [1, n] do
P
P
m0 := iC ai i6C ai
4
i f m0 < m then
5
m := m0
6
end i f
7 end f o r
314
X
1ik
P [C = i]i =
X
X 2i1
i = 2k
2i i = 2(k 1) + 21k .
k1
2
1ik
1ik
Solu
c
ao do exerccio 4.1.
O seguinte algoritmo resolva o problema:
i f m > n then
return f a l s e
end i f
i := 1
f o r j := 1, . . . , n do
i f s0i = sj then
i := i + 1
i f i > m then
315
B. Soluc
oes dos exerccios
9
10
11
12
13
return t r u e
end i f
end i f
end f o r
return f a l s e
316
Solu
c
ao do exerccio 6.1.
1. T (n) = 9T (n/3) + n
X
T (n) =
9i (n/3i ) + (9log3 n )
0i<log3 n
=n
3i + n2
0i<log3 n
=n
3log3 n 1
+ n2 = (n2 )
2
0i<log n
=n
log2 n i + (n)
0i<log n
n log2 n(log2 n 1)
+ (n)
2
2
= O(n log2 n)
= n log22 n
Solu
c
ao do exerccio 6.3.
Se usarmos a hip
otese T (n) cnlog2 3 , n
ao conseguiremos finalizar a prova pois
permanecer
a um fator adicional que n
ao podemos remover da equacao. Caso
este fator adicional for menor em ordem que a complexidade que queremos
provar, podemos usar uma hip
otese mais forte como apresentado abaixo.
Hip
otese: T (n) cnlog2 3 dn
T (n) 3(c(n/2)log2 3 d(n/2)) + bn
3cnlog2 3 /(2log2 3 ) 3d(n/2) + bn
cnlog2 3 3d(n/2) + bn
cnlog2 3 dn
A desigualdade acima e verdadeira para 3d(n/2) + bn dn, ou seja, para
d 2b: T (n) O(nlog2 3 dn) O(nlog2 3 ).
Solu
c
ao do exerccio 6.4.
A recorrencia correspondente e
T (n) = 7T (n/2) + (n2 ).
317
B. Soluc
oes dos exerccios
Analisando com a
arvore de recorrencia, obtemos 7i problemas em cada nvel,
cada um com tamanho n/2i e custo c(n/2i )2 = cn2 /4i e altura h = dlog2 ne
(com h + 1 nveis) que leva a soma
T (n)
0ih
com 7h 7 7log2 n
uma altura de h = logc2 20/n . Portanto, obtemos uma cota superior para o
318
custo da
arvore
T (n) n
ci + F (n)
0ih
ci + F (n)
porque c < 1
0i<
= 10n/(1 ) + F (n)
com o n
umero de folhas F (n). Caso F (n) = O(n) obtemos a estimativa
desejada T (n) = O(n). Observe que a estimativa
F (n) = 2h+1 42logc2 20 nlog1/c2 2 = (n1.94 )
n
ao serve! Como as folhas satisfazem a recorrencia
(
F (dn/5e) + F (b7n/10 + 6c)
F (n)
O(1)
se n > 20
se n 20
319
Indice
DSPACE, 252
DTIME, 252
NP, 261
NSPACE, 252, 253
NTIME, 252, 253
(Notac
ao), 23
PSPACE, 253
n , 278
P, 253, 261
n , 278
(Notac
ao), 23
(relacao de crescimento),
FP, 261
PF, 261
(Notac
ao), 23
(relacao de crescimento),
(relacao de crescimento),
(relacao de crescimento),
(relacao de crescimento),
arvore
bin
aria, 116
de busca, 116
espalhada mnima, 79
arvore bin
ario, 91
APX, 179
NPO, 178
PO, 178
BHALT, 263
26
26
26
26
26
ABB-OTIMA
(algoritmo), 120
absorc
ao (de uma func
ao), 26
adjacencia
de vertices, 305
AEM-Kruskal (algoritmo), 82
AEM-Prim (algoritmo), 82, 83
alfabeto, 239
algoritmo
de aproximacao, 177
de Karatsuba, 131, 317
guloso, 75
PrefixTree, 91
algoritmo -aproximativo, 179
algoritmo r-aproximativo, 179
algoritmo de Hirschberg, 103
algoritmos Branch-and-bound, 165
all pairs shortest paths, 84
alternante, 219
aproximacao
absoluta, 178
relativa, 179
aresta, 305
atribuic
ao, 36, 39
aval (funcao de complexidade), 32
backtracking, 153
bottom-up, 97
branch-and-bound, 163
Bubblesort (algoritmo), 41, 51
Busca binaria (algoritmo), 46
Busca em Largura (algoritmo), 62
busca por melhor solucao, 164
busca por profundidade, 164
Busca seq
uencial (algoritmo), 44,
49
Busca1 (algoritmo), 34, 49
c
odigo
321
Indice
livre de prefixos, 91
cache, 97
caixeiro viajante, 115, 167
caminho, 305
alternante, 219
Caminho Hamiltoniano, 48
caminho mais curto
entre todas pares, 84
entre um n
o e todos outros, 84
certificado, 261
ciclo, 305
euleriano, 20
hamiltoniano, 20
circuito, 285
booleano, 285
circulac
ao, 198
classe de complexidade, 252
cobertura por vertices, 158
colorac
ao mnima, 89
complexidade
media, 33, 47
otimista, 35
pessimista, 33
componente
conjuntiva, 36, 37
disjuntiva, 36, 40
composicionalidade, 36
condicional, 36, 40
conjunto compatvel de intervalos,
85
conjunto independente, 87
m
aximo (problema), 87
constante de Euler-Mascheroni, 296
Cook, Stephen Arthur, 270
CopiaMTI (algoritmo), 299
corte, 80
por inviabilidade, 164
por limite, 164
por otimalidade, 164
cota assint
otica superior, 22
Counting-Sort (algoritmo), 45
322
Indice
func
ao
concava, 297
convexa, 297
de complexidade (aval), 32
de custos (custo), 32
de desempenho (desemp), 32
de execuc
ao (exec), 32
func
ao de otimizac
ao, 177
func
ao objetivo, 177
grafo, 62, 305
k-partido, 169
bipartido, 169
conexo, 20, 79
de intervalo, 87
direcionado, 305
n
ao-direcionado, 20
perfeito, 169
grafo residual, 201
Hamilton, Sir William Rowan, 20
hierarquia polinomial, 278
Hirschberg, algoritmo de, 103
Hoare, Charles Anthony Richard,
54
Huffman (algoritmo), 93
independent set, 87
induc
ao natural, 301
informac
ao
quantidade de, 92
invers
ao, 52
tabela de, 53
iteracao
definida, 36, 39
indefinida, 36, 39
Jensen
desigualdade de, 297
Karatsuba, Anatolii Alekseevitch,
131, 317
323
Indice
n
umeros de Fibonacci, 95
n
umeros harm
onicos, 296
notac
ao assint
otica
, 23
, 23
, 23
O, 21
o, 23
O (notac
ao), 21
o (Notac
ao), 23
ordenac
ao
Bubblesort, 41
por inserc
ao direta (algoritmo),
42, 50
Quicksort, 54
palavra, 239
Parada n
ao-determinstico em k passos, 48
particionamento
de intervalos, 88, 89
de um vetor, 54
Partition (algoritmo), 54
PD-matrizes, 109
perfeito, 214
piso, 294
polin
omio
caracterstico, 176
porta l
ogica, 285
potenciac
ao, 135
PrefixTree (algoritmo), 91
Prim, Robert C., 81
probabilidade, 303
problema
completo, 262
de avaliac
ao, 177
de construcao, 177
de decis
ao, 177
difcil, 262
problema de otimizac
ao, 177
324
Indice
teorema de Savitch, 256
tese de Cobham-Edmonds, 10
teto, 294
top-down, 97
transposic
ao, 52
traveling salesman, 115
troca mnima (algoritmo), 76
Turing, Alan Mathison, 240
vertice, 305
emparelhado, 219
livre, 219
valor absoluto, 293
valor esperado, 304
vari
avel aleat
oria, 304
vertex cover, 158
Vinogradov, I. M., 26
notac
ao de, 26
Vitter, Jeffrey Scott, 48
vizinhanca, 305
Warshall, Stephen, 113
325
Bibliografia
[1]
[2]
[3]
Mohamad Akra e Louay Bazzi. On the Solution of Linear Recurrence Equations. Em: Computational Optimization and Applications
10 (1998), pp. 195210.
[4]
Noga Alon et al. Witnesses for Boolean Matrix Multiplication and for
Shortest Paths. Em: FOCS. 1992.
[5]
[6]
Sanjeev Arora e Boaz Barak. Computational Complexity: A Modern Approach. Cambridge University Press, 2009.
[7]
[8]
[9]
[10]
[11]
[12]
Don Coppersmith e Shmuel Winograd. Matrix multiplication via arithmetic progressions. Em: STOC 87: Proceedings of the nineteenth annual ACM conference on Theory of computing. 1987, pp. 16.
327
Bibliografia
[15]
[16]
[17]
Brian C. Dean, Michel X. Goemans e Nicole Immorlica. Finite termination of augmenting pathalgorithms in the presence of irrational
problem data. Em: ESA06: Proceedings of the 14th conference on Annual European Symposium. Zurich, Switzerland: Springer-Verlag, 2006,
pp. 268279. doi: http://dx.doi.org/10.1007/11841036_26.
[18]
[19]
[20]
[21]
[22]
Jen
o Egerv
ary. Matrixok kombinatorius tulajdonsagairol (On combinatorial properties of matrices). Em: Matematikai es Fizikai Lapok 38
(1931), pp. 1628.
[23]
[24]
[25]
[26]
[27]
Martin F
urer. Faster Integer Multiplication. Em: STOC 07: Proceedings of the thirty-ninth annual ACM symposium on Theory of computing. San Diego, California, USA: ACM, 2007, pp. 5766. isbn: 978-159593-631-8. doi: http://doi.acm.org/10.1145/1250790.1250800.
328
Bibliografia
[28]
Martin F
urer e Balaji Raghavachari. Approximating the minimudegree steiner tree to within one of optimal. Em: Journal of Algorithms
(1994).
[29]
H. N. Gabow. Data structures for weighted matching and nearest common ancestors with linking. Em: Proc. of the 1st Annual ACM-SIAM
Symposium on Discrete Algorithms (1990), pp. 434443.
[30]
[31]
[32]
[33]
Yuri Gurevich e Saharon Shelah. Expected computation time for Hamiltonian Path Problem. Em: SIAM J. on Computing 16.3 (1987),
pp. 486502.
[34]
Ken Habgood e Itamar Arel. Revisiting Cramers rule for solving dense
linear systems. Em: Proceedings of the 2010 Spring Simulation Multiconference. 2010. doi: 10.1145/1878537.1878623.
[35]
Juris Hartmanis e Richard E. Stearns. On the Computational Complexity of Algorithms. Em: Transactions of the American Mathematical
Society 117 (1965), pp. 285306.
[36]
[37]
[38]
[39]
Michael J. Jones e James M. Rehg. Statistical Color Models with Application to Skin Detection. Rel. tec. CRL 98/11. Cambridge Research
Laboratory, 1998.
[40]
Erich Kaltofen e Gilles Villard. On the complexity of computing determinants. Em: Computational complexity 13 (2004), pp. 91130.
[41]
Anatolii Alekseevich Karatsuba e Yu Ofman. Multiplication of ManyDigital Numbers by Automatic Computers. Em: Doklady Akad. Nauk
SSSR 145.2 (1962). Translation in Soviet Physics-Doklady 7 (1963), pp.
595596, pp. 293294.
329
Bibliografia
[42]
[43]
Donald E. Knuth. The art of computer programming. 2nd. Vol. III, Sorting and searching. Addison-Wesley, 1998.
[44]
[45]
[46]
[47]
[48]
[49]
[50]
[51]
M.J. Magazine, G.L.Nemhauser e L.E.Trotter. When the greedy solution solves a class of Knapsack problems. Em: Operations research 23.2
(1975), pp. 207217.
[52]
[53]
[54]
J. Munkres. Algorithms for the assignment and transporation problems. Em: J. Soc. Indust. Appl. Math 5.1 (1957), pp. 3238.
[55]
K. Noshita. A theorem on the expected complexity of Dijkstras shortest path algorithm. Em: Journal of Algorithms 6 (1985), pp. 400408.
[56]
D. Pearson. A polynomial time algorithm for the change-making problem. Em: Operations Research Letters 33.3 (2005), pp. 231234.
330
Bibliografia
[57]
[58]
[59]
A. Sch
onhage e V. Strassen. Schnelle Multiplikation grosser Zahlen.
Em: Computing 7 (1971), pp. 281292.
[60]
Alexander Schrijver. Combinatorial optimization. Polyhedra and efficiency. Vol. A. Springer, 2003.
[61]
[62]
[63]
[64]
[65]
[66]
[67]
[68]
Paul M. B. Vit
anyi e Lambert Meertens. Big Omega Versus the Wild
Functions. Em: SIGACT News 16.4 (1985).
[69]
J.S. Vitter e Philipe Flajolet. Handbook of theoretical computer science. Em: ed. por Jan van Leeuwen. Vol. A: Algorithms and complexity.
MIT Press, 1990. Cap. Average-case analysis of algorithms and data
structures. url: http://www.amazon.com/Handbook- TheoreticalComputer-Science-Vol/dp/0262720140.
[70]
331
Bibliografia
[72]
V. Vassilevska Williams e Ryan Williams. Triangle detection versus matrix multiplication: a study of truly subcubic reducibility. 2010.
[73]
Uri Zwick. The smallest networks on which the Ford-Fulkerson maximum flow procedure may fail to terminate. Em: Theoretical Computer Science 148.1 (1995), pp. 165 170. doi: DOI:10.1016/03043975(95)00022-O.
332