Vous êtes sur la page 1sur 334

Algoritmos e complexidade

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
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

II. Projeto de algoritmos

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
. . . . . .
. . . . . .
. . . . . .

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

IV. Teoria de complexidade

237

11.Do algoritmo ao problema


239
11.1. Introduc
ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
12.Classes de complexidade
12.1. Definic
oes b
asicas . . . . . . . . . . . . . . . . . . . . . . . . . .
12.2. Hierarquias b
asicas . . . . . . . . . . . . . . . . . . . . . . . . .
12.3. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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= ?

que parece razoavelmente simples e, de fato, EXPSPACE-completo [52, Corol


ario 2.1] (no momento e suficiente saber que isso significa que o tempo para
resolver o problema cresce ao menos exponencialmente com o tamanho da
entrada).
Exemplo 1.2
Com e = 0 12 temos L(e) = {0, 11}.
Com e = (0 1)2 0 temos
L(e) = {00, 01, 10, 11, 000, 010, 100, 110, 0000, 0100, 1000, 1100, . . .}.

Existem exemplos de outros problemas que s


ao decidveis, mas tem uma complexidade t
ao grande que praticamente todas inst
ancias precisam mais recursos que o universo possui (por exemplo a decis
ao da validade na logica
mon
adica fraca de segunda ordem com sucessor).
O universo do ponto da vista da ci
encia da computac
ao Falando sobre
os recursos, e de interesse saber quantos recursos nosso universo disponibiliza
aproximadamente. A seguinte tabela contem alguns dados basicos:
Idade
Tamanho
Densidade
N
umero de
atomos
N
umero de bits
N
umero de operac
oes
l
ogicas elementares ate
hoje
Operac
oes/s

13.75 0.11 109 anos 43.39 1016 s


78 109 anos-luz
9.9 1030 g/cm3
1080
10120
10120

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

an1 x1 + an2 x2 + + ann xn = bn


ou Ax = b? Podemos calcular a inversa da matriz A para chegar em x = bA1 .
O metodo de Cramer nos fornece as equac
oes
xi =

det(Ai )
det(A)

seja Ai a matriz resultante da substituic


ao de b pela i-gesima coluna de A.
(A prova dessa fato e bastante simples. Seja Ui a matriz identidade com a
i-gesima coluna substitudo por x: e simples verificar que AUi = Ai . Com
det(Ui ) = xi e det(A) det(Ui ) = det(Ai ) temos o resultado.) Portanto, se o
trabalho de calcular o determinante de uma matriz de tamanho n n e Tn ,
essa abordagem custa (n + 1)Tn . Um metodo direto usa a formula de Leibniz

X
Y
det(A) =
sgn()
ai,(i) .
Sn

1in

Isso precisa n! adic


oes (A) e n!n multiplicac
oes (M ), com custo total

(n + 1)(n!A + n!nM ) n!(A + M ) 2n(n/e)n (A + M ),


um n
umero formid
avel! Mas talvez a f
ormula de Leibniz nao e o melhor jeito
de calcular o determinante! Vamos tentar a f
ormula de expansao de Laplace
X
det(A) =
(1)i+j aij det(Aij )
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

e como 1i<n 1/i! aproxima e temos n! Tn n!(1 + (A + M )e) e logo Tn


novamente e mais que n!. Mas qual e o metodo mais eficiente para calcular
o determinante? Caso for possvel em tempo proporcional ao tamanho da
entrada n2 , tivermos um algoritmo em tempo aproximadamente n3 .
Antes de responder essa pergunta, vamos estudar uma abordagem diferente
da pergunta original, o metodo de Gauss para resolver um sistema de equacoes
lineares. Em n passos, o matriz e transformada em forma triangular e cada
passo n
ao precisa mais que n2 operac
oes (nesse caso inclusive divisoes).

Algoritmo 1.1 (Elimina


c
ao de Gauss)
Entrada Uma matriz A = (aij ) Rnn
Sada A em forma triangular superior.
1 e l i m i n a c
a o g a u s s ( a Rnn )=
2 f o r i := 1, . . . , n do { elimina coluna i }
3
f o r j := i + 1, . . . , n do { elimina linha j }
4
f o r k := n, . . . , i do
5
ajk := ajk aik aji /aii
6
end f o r
7
end f o r
8 end f o r

Exemplo 1.3
Para resolver

1
4
7

2
5
8


3
x1
2
7 x2 = 4
9
x3
6

vamos aplicar a eliminac


ao de Gauss `
a

1 2
4 5
7 8
1 n!

1i<n

matriz aumentada

3 2
7 4
9 6

1/i! = bn!(e 1)c.

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

e logo x3 = 0, x2 = 3/4, x1 = 1/2 e uma solucao.

Logo temos um algoritmo que determina a solucao com


X
3(n i + 1)(n i) = n3 n
1in

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

resultado pode ser melhorado considerando que aji /aii n


ao depende do k

Motivac
ao para algoritmos eficientes

Com um algoritmo ineficiente, um computador rapido nao ajuda!

Suponha que uma m


aquina resolva um problema de tamanho N em um
dado tempo.

Qual tamanho de problema uma m


aquina 10 vezes mais rapida resolve
no mesmo tempo?

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

1 ano 365.2425d 3.2 107 s


1 seculo 3.2 109 s
1 milenio 3.2 1010 s

Comparar efici
encias
Como comparar eficiencias? Uma medida concreta do tempo depende
do tipo da m
aquina usada (arquitetura, cache, memoria, ...)

16

da qualidade e das opc


oes do compilador ou ambiente de execucao
do tamanho do problema (da entrada)
Portanto, foram inventadas m
aquinas abstratas.
A an
alise da complexidade de um algoritmo consiste em determinar o
n
umero de operac
oes b
asicas (atribuic
ao, soma, comparacao, ...) em
relac
ao ao tamanho da entrada.
Observe que nessa medida o tempo e discreto.
An
alise assint
otica
Em geral, o n
umero de operac
oes fornece um nvel de detalhamento
grande.
Portanto, analisamos somente a taxa ou ordem de crescimento, substituindo func
oes exatas com cotas mais simples.
Duas medidas s
ao de interesse particular: A complexidade
pessimista e
media
Tambem podemos pensar em considerar a complexidade otimista (no caso
melhor): mas essa medida faz pouco sentido, porque sempre e possvel enganar
com um algoritmo que e r
apido para alguma entrada.
Exemplo
Imagine um algoritmo com n
umero de operacoes
an2 + bn + c
Para an
alise assint
otica n
ao interessam
os termos de baixa ordem, e
os coeficientes constantes.
Logo o tempo da execuc
ao tem cota n2 , denotado com O(n2 ).
Observe que essas simplificac
oes n
ao devem ser esquecidas na escolha de um
algoritmo na pr
atica. Existem v
arios exemplos de algoritmos com desempenho bom assintoticamente, mas n
ao s
ao vi
aveis na pratica em comparacao
com algoritmos menos eficientes: A taxa de crescimento esconde fatores
constantes e o tamanho mnimo de problema tal que um algoritmo e mais
rapido que um outro.

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

50(106 ) log 106 OP


107 OP/s

Comp. C2

= 2 105 s
= 30s

2(106 )2 OP
109 OP/s

= 2 103 s

50(106 ) log 106 OP


109 OP/s

= 0.3s

Um panorama de tempo de execuc


ao
Tempo constante: O(1) (raro).
Tempo sublinear (log(n), log(log(n)), etc): R
apido. Observe que o algoritmo n
ao pode ler toda entrada.
Tempo linear: N
umero de operac
oes proporcional `a entrada.
Tempo n log n: Comum em algoritmos de divisao e conquista.
Tempo polinomial nk : Freq
uentemente de baixa ordem (k 10), considerado eficiente.
Tempo exponencial: 2n , n!, nn considerado intratavel.
Exemplo 1.7
Exemplos de algoritmos para as complexidades acima:
Tempo constante: Determinar se uma sequencia de n
umeros comeca
com 1.
Tempo sublinear: Busca bin
aria.
Tempo linear: Buscar o m
aximo de uma sequencia.
Tempo n log n: Mergesort.
Tempo polinomial: Multiplicac
ao de matrizes.
Tempo exponencial: Busca exaustiva de todos subconjuntos de um conjunto, de todas permutac
oes de uma sequencia, etc.

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. Notacao assintotica

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

porque 10n n2 cn2n 5n n c

n log2 n O(n log10 n)

c = 4; n0 = 1

3 Mais

22

correto (mas menos confort


avel) seria escrever n.4n2 = O(n.n2 )

1.1. Notacao assintotica


O: Exemplos
Proposi
c
ao 1.1
P
Para um polin
omio p(n) = 0im ai ni temos
|p(n)| O(nm )

(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)

Observe que a nossa notac


ao somente e definida ao redor do , que e
suficiente para a an
alise de algoritmos. Equac
oes como ex = 1 + x + O(x2 ),
usadas no c
alculo, possuem uma definic
ao de O diferente.
As definic
oes ficam equivalente, substituindo < para e > para (veja
exerccio 1.10).

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)

f (n) O(g(n)) lim sup

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

1.1. Notacao assintotica

Uma notac
ao assint
otica menos comum e f = O(g)
que e uma abreviacao para

f = O(g logk g) para algum k. O e usado se fatores logartmicos nao importam.


Similarmente, f = O (g) ignora fatores polinomiais, i.e. f = O(gp) para um
polin
omio p(n).
Caractersticas

f = O(f )

(1.10)

cO(f ) = O(f )

(1.11)

O(f ) + O(f ) = O(f )

(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)

mas as seguintes afirmac


oes n
ao s
ao verdadeiras:
f 6 g f  g
f 6 g f g
f gf gf g

(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

tem ordem assint


otica fn (n ) com = (1 +

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 ;

g(n) (f (n) + 2)k .

Quais dos pares n e n2 , n2 e nlog n e nlog n e en sao comparaveis?

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

Custo com tamanho n

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

Observe: A complexidade media e o valor esperado do desempenho de


entradas com tamanho n.
Ela e baseada na distribuic
ao das entradas.
A complexidade media e menos usada na pr
atica, por varias razoes. Primeiramente, a complexidade pessimista garante um certo desempenho, independente da entrada. Em comparac
ao, uma complexidade media O(n2 ), por
exemplo, n
ao exclui que algumas entradas com tamanho n precisam muito
mais tempo. Por isso, se e importante saber quando uma execucao de um
algoritmo termina, preferimos a complexidade pessimista.
Para v
arios algoritmos com desempenho ruim no pior caso, estamos interessados como eles se comportam na media. Infelizmente, ela e difcil de determinar.
Alem disso, ela depende da distribuic
ao das entradas, que freq
uentemente nao
e conhecida, difcil de determinar, ou e diferente em aplicacoes diferentes.
Definic
ao alternativa
A complexidade pessimista e definida como
Cp= [A](n) = max{desemp[A](d) | d 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.

Algoritmo 2.1 (Busca1)


Entrada Uma sequencia a1 , . . . , an de n
umeros em N.
Sada True, caso existe um i tal que ai = 1, false, caso contrario.
1 f o r i :=1 t o n do
2
i f ( ai = 1 ) then
3
return t r u e
4
end i f
5 end f o r
6 return f a l s e

Para analisar o algoritmo, podemos escolher, por exemplo, as operacoes basicas


O = {f or, if, return} e atribuir um custo constante de 1 para cada um delas.
(Observe que como operac
ao b
asica s
ao consideradas as operacoes de atribuic
ao, incremento e teste da express
ao booleana i n.) Logo as execucoes
possveis s
ao E = O e temos a func
ao de custos

34

2.2. Complexidade pessimista

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

caso existe i = min{j | aj = 1}


caso contrario

Com essas definic


oes temos tambem a func
ao de desempenho
desemp[Busca1](n) = custo exec[Busca1] :
(
2i + 1 caso existe i = min{j | aj = 1}
(a1 , . . . , an ) 7
2n + 1 caso contrario
Agora podemos aplicar a definic
ao da complexidade pessimista para obter
Cp [Busca1](n) = max{desemp[Busca1](d) | tam(d) = n} = 2n + 1 = O(n).
onica, e portanto Cp= = Cp .
Observe que Cp= e monot
Um caso que em geral e menos interessante podemos tratar nesse exemplo
tambem: Qual e a complexidade otimista (complexidade no caso melhor)? Isso
acontece quando 1 e o primeiro elemento da sequencia, logo, Co [Busca1](n) =
2 = O(1).

2.2. Complexidade pessimista


2.2.1. Metodologia de an
alise de complexidade
Uma linguagem simples
Queremos estudar como determinar a complexidade de algoritmos metodicamente.
Para este fim, vamos usar uma linguagem simples que tem as operacoes
b
asicas de

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

2.2. Complexidade pessimista


Portanto, vamos diferencar entre
algoritmos que preservam (assintoticamente) o tamanho, e
algoritmos em que modificam o tamanho do problema.
Neste curso tratamos somente o primeiro caso.
Componentes conjuntivas
A sequ
encia
Considere uma sequencia c1 ; c2 .
Qual a sua complexidade cp [c1 ; c2 ] em termos dos componentes cp [c1 ] e
cp [c2 ]?
Temos
desemp[c1 ; c2 ] = desemp[c1 ]+desemp[c2 ] max(desemp[c1 ], desemp[c2 ])
e portanto (veja A.8)
max(cp [c1 ], cp [c2 ]) cp [c1 ; c2 ] cp [c1 ] + cp [c2 ]
e como f + g O(max(f, g)) tem-se que
cp [c1 ; c2 ] = (cp [c1 ] + cp [c2 ]) = (max(cp [c1 ], cp [c2 ]))
Prova.
max(desemp[c1 ](d), desemp[c2 ](d)) desemp[c1 ; c2 ](d)
= desemp[c1 ](d) + desemp[c2 ](d)
logo para todas entradas d com tam(d) = n
max max(desemp[c1 ](d), desemp[c2 ](d)) max desemp[c1 ; c2 ](d)
d

= max (desemp[c1 ](d) + desemp[c2 ](d))


d

max(cp [c1 ], cp [c2 ]) cp [c1 ; c2 ] cp [c1 ] + cp [c2 ]




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

2.2. Complexidade pessimista


Exemplo 2.4
Continuando o exemplo 2.2 podemos examinar a atribuicao v := ordene(w).
Com complexidade pessimista para a ordenac
ao da lista cp [ordene(w)] =
O(n2 ) e complexidade cp [e ] = O(n) para a transferencia, temos cp [v :=
ordene(w)] = O(n2 ) + O(n) = O(n2 ).

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. Complexidade pessimista


Assumindo que o teste e possvel em tempo constante, ele e absorvido pelo
trabalho em ambos casos, tal que
cp [A] max(cp [v := ordena(u)], cp [s := soma(u)])
e com, por exemplo, cp [v := ordena(u)](n) = n2 e cp [s := soma(u)](n) = n
temos
cp [A](n) n2

2.2.2. Exemplos
Exemplo 2.6 (Bubblesort)
Nesse exemplo vamos estudar o algoritmo Bubblesort de ordenacao.
Bubblesort

Algoritmo 2.2 (Bubblesort)


Entrada Uma sequencia a1 , . . . , an de n
umeros inteiros.
Sada Uma sequencia a(1) , . . . , a(n) de n
umeros inteiros onde uma
permutac
ao de [1, n] tal que para i < j temos a(i) a(j) .
1 f o r i :=1 t o n
2
{ Inv : ani+2 an s
a o os i 1 maiores elementos }
3
f o r j :=1 t o n i
4
i f aj > aj+1 then
5
swap aj , aj+1
6
end i f
7
end f o r
8 end f o r

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

Qual a diferenca se contamos as transposicoes tambem? (Ver exemplo 2.15.)

Exemplo 2.7 (Ordena


c
ao por inser
c
ao direta)
(ingles: straight insertion sort)
Ordenac
ao por inserc
ao direta

Algoritmo 2.3 (Ordena


c
ao por inser
c
ao direta)
Entrada Uma sequencia a1 , . . . , an de n
umeros inteiros.
Sada Uma sequencia a(1) , . . . , a(n) de n
umeros inteiros tal que e uma
permutac
ao de [1, n] e para i < j temos a(i) a(j) .
1 f o r i :=2 t o n do
2
{ invariante : a1 , . . . , ai1 ordenado }
3
{ coloca item i na posi
c
a o correta }
4
c:=ai
5
j :=i ;
6
while c < aj1 and j > 1 do
7
aj :=aj1
8
j :=j 1
9
end while
10
aj :=c
11 end f o r

(Nesse algoritmo e possvel eliminar o teste j > 1 na linha 6 usando um


elemento auxiliar a0 = .)
Para a complexidade pessimista obtemos
X X
X
O(1) =
O(i) = O(n2 )
cp [SI](n)
2in 1<ji

2in

42

2.2. Complexidade pessimista


Exemplo 2.8 (M
aximo)
(Ver Toscani e Veloso [64, cap. 3.3].)
M
aximo

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).

Exemplo 2.9 (Busca seq


uencial)
O segundo algoritmo que queremos estudar e a busca seq
uencial.
Busca seq
uencial

43

2. An
alise de complexidade

Algoritmo 2.5 (Busca seq


uencial)
Entrada Uma sequencia de n
umeros a1 , . . . , an com n > 0 e um chave c.
Sada A primeira posic
ao p tal que ap = c ou p = caso nao existe tal
posic
ao.
1 f o r i := 1, . . . , n do
2
i f ai = c then
3
return i
4
end i f
5 end f o r
6 return

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

Algoritmo 2.6 (Counting-Sort)


Entrada Um inteiro k, uma sequencia de n
umeros a1 , . . . , an e uma sequencia
de contadores c1 , . . . , cn .
Sada Uma sequencia ordenada de n
umeros b1 , . . . , bn .
1
2
3
4
5
6
7

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

2.2. Complexidade pessimista

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

Algoritmo 2.7 (Loteria Esportiva)


Entrada Um vetor de inteiros r[1, . . . , n] com o resultado e uma matriz
A13xn com as apostas dos n jogadores.
Sada Um vetor p[1, . . . , n] com os pontos feitos por cada apostador.
1 i := 1
2 while i n do
3
pi := 0
4
f o r j de 1, . . . , 13 do
5
i f Ai,j = rj then pi := pi + 1
6
end f o r
7
i := i + 1
8 end while
9 f o r i de1, . . . , n do
10
i f pi = 13 then p r i n t ( Apostador i e ganhador ! )
11 end f o r
12 return p

Exemplo 2.10 (Busca Bin


aria)

Busca Bin
aria

45

2. An
alise de complexidade

Algoritmo 2.8 (Busca Bin


aria)
Entrada Um inteiro x e uma sequencia ordenada S = a1 , a2 , . . . an de
n
umeros.
Sada Posic
ao i em que x se encontra na sequencia S ou 1 caso x
/ S.
1
2
3
4
5
6
7
8

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

Exemplo 2.11 (Multiplica


c
ao de matrizes)
O algoritmo padr
ao da computar o produto C = AB de matrizes (de tamanho
m n, n o) usa a definic
ao
cik =

X
1jn

46

aij bjk

1 i m; 1 k o.

2.3. Complexidade media

Algoritmo 2.9 (Multiplica


c
ao de matrizes)
Entrada Duas matrizes A = (aij ) Rmn , B = (bjk ) Rno .
Sada O produto C = (cik ) = AB Rmo .
1 f o r i := 1, . . . , m do
2
f o r k := 1, . . . , o do
3
cik := 0
4
f o r j := 1, . . . , n do
5
cik := cik + aij bjk
6
end f o r
7
end f o r
8 end f o r

No total, precisamos mno(M +A) operac


oes, com M denotando multiplicacoes
costume estudar a complexidade no caso n = m = o e somente
e A adicoes. E
considerar as multiplicac
oes, tal que temos uma entrada de tamanho (n2 ) e
3
1
(n ) operac
oes .

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

e de costume contar as operac


oes de ponto flutuante diretamente e n
ao em
relac
ao ao tamanho da entrada. Sen
ao a complexidade seria 2n/33/2 = O(n3/2 ).

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

2.3. Complexidade media


Exemplo 2.12 (Busca seq
uencial)
(Continuando exemplo 2.9.)
Busca seq
uencial
Caso a chave esteja na i-esima posic
ao, temos que fazer i iteracoes.
Caso a chave n
ao ocorra no conjunto, temos que fazer n iteracoes.
Supondo uma distribuic
ao uniforme da posic
ao da chave na sequencia,
temos
X 
1
cn [BS](n) =
n+
i
n+1
1in

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

e, Pr[ai = 1] = 1/2 e Pr[ai 6= 1] = 1/2. Considere as variaveis aleatorias


desemp[A] e
(
se o primeiro 1 em d est
a na posicao
p(d) =
n caso contr
ario
Temos desemp[A] = 2p + 1 (veja os resultados do exemplo 2.1). Para i estar
na primeira posic
ao com elemento 1 as posic
oes 1, . . . , i1 devem ser diferente
de 1, e ai deve ser 1. Logo para 1 i < n
Pr[p = i] = Pr[a1 6= 1] Pr[ai1 6= 1] Pr[ai = 1] = 2i .
O caso p = n tem duas causas: ou a posic
ao do primeiro 1 e n ou a sequencia
n
ao contem 1. Ambas tem probabilidade 2n e logo Pr[p = n] = 21n .

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)

A seguinte tabela mostra os custos medios para 1 n 9


n
1 2
3
4
5
6
7
8
9
Cm 3 4 4.5 4.75 4.875 4.938 4.969 4.984 4.992

Exemplo 2.14 (Ordena


c
ao por inser
c
ao direta)
(Continuando exemplo 2.7.)
Ordenac
ao por inserc
ao direta
Qual o n
umero medio de comparac
oes?
Observac
ao: Com as entradas distribudas uniformemente, a posicao da
chave i na sequencia j
a ordenada tambem e.
Logo chave i precisa
X

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

Exemplo 2.15 (Bubblesort)


(Continuando exemplo 2.6.)
O n
umero de comparac
oes do Bubblesort e independente da entrada. Logo,
com essa operac
ao b
asica temos uma complexidade pessimista e media de
(n2 ).

50

2.3. Complexidade media


Bubblesort: Transposic
oes
Qual o n
umero de transposic
oes em media?
Distribuio das transposies no Bubblesort para n=9

2.5x104

Quantidade

2.0x104

1.5x104

1.0x10

5.0x103

10

15

20

25

30

35

Nmero de transposies

Qual a complexidade contando o n


umero de transposicoes? A figura acima
mostra no exemplo das inst
ancias com tamanho 9, que o trabalho varia entre 0 transposic
oes (sequencia ordenada) e 36 transposicoes (pior caso) e na
maioria dos casos, precisamos 18 transposic
oes. A analise no caso em que
todas entradas s
ao permutac
oes de [1, n] distribudas uniformemente resulta
em n/4(n 1) transposic
oes em media, a metade do pior caso.
Invers
oes
Uma invers
ao em uma permutac
ao e um par que nao esta ordenado, i.e.
i<j

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

2.3. Complexidade media


M
aximo
ximo?
Qual o n
umero esperado de atualizac
oes no algoritmo Ma
Para uma permutac
ao considere a tabela de invers
oes b1 , . . . , bn .
bi e o n
umero de elementos na esquerda de i que sao maiores que i.
Exemplo: Para 53142

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

Exemplo 2.17 (Quicksort)


Nessa sec
ao vamos analisar e Quicksort, um algoritmo de ordenacao que foi
inventado pelo C.A.R. Hoare em 1960 [37].
Quicksort
Exemplo: o metodo Quicksort de ordenacao por comparacao.
Quicksort usa divis
ao e conquista.
Ideia:
Escolhe um elemento (chamado pivo).
Divide: Particione o vetor em elementos menores que o pivo e
maiores que o piv
o.
Conquiste: Ordene as duas partic
oes recursivamente.

Particionar

Algoritmo 2.10 (Partition)


Entrada Indices l, r e um vetor a com elementos al , . . . , ar .
Sada Um ndice m [l, r] e a com elementos ordenados tal que ai am
para i [l, m[ e am ai para i ]m, r].
1
2
3
4
5
6
7
8
9
10
11

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

2.3. Complexidade media


Escolher o piv
o
Partition combina os primeiros dois passos do Quicksort..
Operac
oes relevantes: N
umero de comparac
oes entre chaves!
O desempenho de Partition depende da escolha do pivo.
Dois exemplos
Escolhe o primeiro elemento.
Escolhe o maior dos primeiros dois elementos.
Vamos usar a segunda opc
ao.
Complexidade de particionar

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

Algoritmo 2.11 (Quicksort)


Entrada Indices l, r e um vetor a com elementos al , . . . , ar .
Sada a com os elementos em ordem n
ao-decrescente, i.e. para i < j temos
ai aj .

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

desemp[QS](al , . . . , ar ) = desemp[P ](al , . . . , ar )


+ desemp[QS](al , . . . , am1 ) + desemp[QS](am+1 , . . . , ar )
desemp[QS](al , . . . , ar ) = 0

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

= n + max desemp[QS](dl ) + desemp[QS](dr )


dDn

= n + max cp [QS](i 1) + cp [QS](n i)


1in

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

= max maxi desemp[QS](dl ) + desemp[QS](dr )


1in dDn

= max maxi cp [QS](i 1) + cp [QS](n i)


1in dDn

56

separando Dn

2.3. Complexidade media


eou
ltimo passo e justificado, porque a partic
ao de uma permutacao aleatoria
gera duas partic
oes aleat
orias independentes, e existe uma entrada d em que
as duas sub-partic
oes assumem o m
aximo. Para determinar o maximo da
u
ltima express
ao, podemos observar que ele deve ocorrer no ndice i = 1 ou
i = bn/2c (porque a func
ao f (i) = cp [QS](i 1) + cp [QS](n i) e simetrico
com eixo de simetria i = n/2).
Complexidade pessimista
O m
aximo ocorre para i = 1 ou i = n/2
Caso i = 1
cp [QS](n) = n + cp [QS](0) + cp [QS](n 1) = n + cp [QS](n 1)
X
= =
(i 1) = (n2 )
1in

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

Pr[d](desemp[P ](d) + desemp[QS](dl ) + desemp[QS](dr ))

dDn

=n+

Pr[d](desemp[QS](dl ) + desemp[QS](dr ))

dDn

=n+

Pr[X = i](cm [QS](i 1) + cm [QS](n i))

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|

(cm [QS](i 1) + cm [QS](n i))

Pr[X = i](cm [QS](i 1) + cm [QS](n i))

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 +

Pr[X = i] (Ti1 + Tni )

1in

com base Tn = 0 para n 1. A probabilidade de escolher o i-esimo elemento


como piv
o depende da estrategia da escolha. Vamos estudar dois casos.
1. Escolhe o primeiro elemento como piv
o. Temos Pr[X = i] = 1/n. Como
Pr[X = i] n
ao depende do i a equac
ao acima vira
Tn = n 1 + 2/n

Ti

0i<n

(com uma comparac


ao a menos no particionamento).
2. Escolhe o maior dos dois primeiros elementos2 . Temos Pr[X = i] =
2(i 1)/(n(n 1)).
2 Supomos

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

2.3. Complexidade media

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

multiplicando por n obtemos


X

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

subtraindo a segunda da primeira obtemos


nTn (n 1)Tn1 = 2n + 2Tn1

para n > 0, verificando n = 1

nTn = (n + 1)Tn1 + 2n
multiplicando por 2/(n(n + 1))
2
4
2
Tn = Tn1 +
n+1
n
n+1

60

2.4. Outros tpos de analise


substituindo An = 2Tn /(n + 1)
An = An1 +

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)

2.4. Outros tpos de an


alise
2.4.1. An
alise agregada
Para alguns algoritmos uma an
alise pessimista baseada na analise pessimista
dos componentes resulta em uma complexidade demais pessimista.
Exemplo 2.19 (Busca em Largura)

Busca em Largura

Algoritmo 2.12 (Busca em Largura)


Entrada Um n
o origem s e um grafo n
ao-direcionado G = (V, E).
Sada Dist
ancia mnima (em n
umero de arcos) dv de s para cada vertice
v.
1
2
3
4
5
6

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

Algoritmo 2.13 (Dijkstra)


Entrada Grafo direcionado G = (V, E) com pesos ce , e E nas arestas,
e um vertice s V .
Sada A dist
ancia mnima dv entre s e cada vertice v V .
1
2
3
4
5
6
7
8
9
10

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

2.4. Outros tpos de analise

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

Pelo mesmo argumento dado na an


alise da busca por profundidade, podemos
ver
Proposi
c
ao 2.1
O algoritmo de Dijkstra possui complexidade
O(n) + n deletemin + n insert + m update.

Usando uma implementac


ao da fila de prioridade por um heap binario que
realiza todas operac
oes em O(log n), a complexidade pessimista do algoritmo
de Dijkstra e O((m + n) log n).
O caso m
edio do algoritmo de Dijkstra Dado um grafo G = (V, E) e um
vertice inicial arbitr
ario. Alem disso sup
oe que temos um conjunto C(v) nde
pesos positivos com |C(v) |= |N (v)| para cada v V . Nos vamos atribuir
permutac
oes dos pesos em C(v) aleatoriamente para os arcos entrantes em v.
Proposi
c
ao 2.2 (Noshita [55])
O algoritmo de Disjkstra chamada update em media n log(m/n) vezes neste
modelo.
Prova. Para um vertice v os arcos que podem levar a uma operacao update
em v s
ao de forma (u, v) com dist(s, u) dist(s, v). Supoe que existem k
arcos (u1 , v), . . . , (uk , v) desse tipo, ordenado por dist(s, ui ) nao-decrescente.
Independente da atribuic
ao dos pesos aos arcos, a ordem de processamento
mantem-se. O arco (ui , v) leva a uma operac
ao update caso
dist(s, ui ) + dui v < min dist(s, uj ) + duj v .
j:j<i

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

A desigualdade e e justificada pela equac


ao (A.24) observando que ln n e
concava.

Com isso complexidade media do algoritmo de Dijkstra e
O(m + n deletemin + n insert + n ln(m/n) update).
Usando uma implementac
ao da fila de prioridade por um heap binario que
realiza todas operac
oes em O(log n) a complexidade media do algoritmo de
Dijkstra e O(m + n log m/n log n).
2.4.2. An
alise amortizada
Exemplo 2.21
Temos um contador bin
ario com k bits e queremos contar de 0 ate 2k 1.
An
alise tradicional: um incremento tem complexidade O(k), porque no caso
pior temos que alterar k bits. Portanto todos incrementos custam O(k2k ).
An
alise amortizada: Poupamos operac
oes extras nos incrementos simples,
para gast
a-las nos incrementos caros. Concretamente, setando um bit, gastamos duas operac
oes, uma para setar, outra seria poupado. Incrementando, usaremos as operac
oes poupadas para zerar bits. Desta forma, um
incremento custa O(1) e temos custo total O(2k ).
Outra forma de an
alise amortizada, e usando uma func
ao potencial , que
associa a cada estado de uma estrutura de dados um valor positivo (a poupanca). O custo amortizado de uma operac
ao que transforma uma estrutura
e1 em uma estrutura e2 e c (e1 ) + (e2 ), com c o custo de operacao. No
exemplo do contador, podemos usar como (i) o n
umero de bits na representac
ao bin
ario de i. Agora, se temos um estado e1
1} 0 |{z}

|11 {z

p bits um

q bits um

com (e1 ) = p + q, o estado ap


os de um incremento e
0} 1 |{z}

|00 {z
0

64

2.4. Outros tpos de analise


com (e2 ) = 1 + q. O incremento custa c = p + 1 operacoes e portanto o custo
amortizado e
c (e1 ) + (e2 ) = p + 1 p q + 1 + q = 2 = O(1).

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?

Algoritmo 2.14 (Alg1)


Entrada Um problema de tamanho n.
1 f o r i := 1 . . . n do
2
f o r j := 1 . . . 2i
3
o p e r a c
oes constantes
4
j := j + 1 // i t e r a c
o e s com v a l o r e s mpares de j
5
end f o r
6 end f o r

66

2.6. Exerccios

Algoritmo 2.15 (Alg2)


Entrada Um problema de tamanho n.
1 f o r i := 1 . . . n do
2
f o r j := 1 . . . 2i
3
o p e r a c
o e s com complexidade O(j 2 )
4
j := j + 1
5
end f o r
6 end f o r

Algoritmo 2.16 (Alg3)


Entrada Um problema de tamanho n.
1 f o r i := 1 . . . n do
2
f o r j := i . . . n
3
o p e r a c
o e s com complexidade O(2i )
4
end f o r
5 end f o r

Algoritmo 2.17 (Alg4)


Entrada Um problema de tamanho n.
1 f o r i := 1 . . . n do
2
j := 1
3
while j i do
4
o p e r a c
o e s com complexidade O(2j )
5
j := j +1
6
end f o r
7 end f o r

67

2. An
alise de complexidade

Algoritmo 2.18 (Alg5)


Entrada Um problema de tamanho n.
1 f o r i := 1 . . . n do
2
j := i
3
while j n do
4
o p e r a c
o e s com complexidade O(2j )
5
j := j +1
6
end f o r
7 end f o r

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

= n 1 + 2/n O(n2 ) = n 1 + O(n) = O(n)


e logo, a complexidade media do Quicksort e O(n). Qual o problema?
Exerccio 2.3
Escreve um algoritmo que determina o segundo maior elemento de uma sequencia
a1 , . . . , an . Qual a complexidade pessimista dele considerando uma comparac
ao como operac
ao b
asica?
Exerccio 2.4
Escreve um algoritmo que, dado uma sequencia a1 , . . . , an com ai N determina um conjunto de ndices C [1, n] tal que


X
X

ai
ai

iC

i6C

e mnimo. Qual a complexidade pessimista dele?

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

Algoritmo 2.19 (Count6)


Entrada Uma sequencia a1 , . . . , an com ai [1, 6].
Sada O n
umero de elementos tal que ai = 6.
1 k := 0
2 f o r i = 1, . . . , n do
3
i f ai = 6 then
4
k := k + 1
5
end i f
6 end f o r

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]

para m [2, n]. (Ela e chamada a soluc


ao can
onica.)
Proposi
c
ao 4.1
Se vi+1 |vi para 1 i < n a soluc
ao gulosa e mnima.
Prova. Sejam os divisores vi = fi vi+1 com fi 2 para 1 i < n e define
fn = vn = 1. Logo cada valor tem a representacao vi = fi fi+1 fi+2 fn .
Seja c1 , . . . , cn uma soluc
ao mnima. A contribuicao de cada valor satisfaz
ci vi < vi1 sen
ao seria possvel de substituir fi1 unidades de vi para uma
de vi1 , uma contradic
ao com a minimalidade da solucao (observe que isso
somente e possvel porque os fi s
ao n
umeros inteiros; senao o resto depois da
substituic
ao pode ser fracional e tem quer ser distribudo pelos valores menores

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]

= vm1 vn = vm1 1 < vm1


Agora aplique lema 4.1.

Otimalidade da abordagem gulosa


A pergunta pode ser generalizada: Em quais circunstancias um algoritmo guloso produz uma soluc
ao
otima?
Se existe um soluc
ao gulosa: freq
uentemente ela tem uma implementacao
simples e e eficiente.
Infelizmente, para um grande n
umero de problemas nao tem algoritmo
guloso
otimo.
Uma condic
ao (que se aplica tambem para programacao dinamica) e a
subestrutura
otima.
A teoria de matroides e greedoides estuda as condicoes de otimalidade
de algoritmos gulosos.
Defini
c
ao 4.1 (Subestrutura
otima)
Um problema de otimizac
ao tem subestrutura
otima se uma solucao otima
(mnima ou m
axima) do problema consiste em solucoes otimas das subproblemas.
Exemplo
Considere
entre dois
tambem e
curto).

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.

Para aplicar a definic


ao 4.1 temos que conhecer (i) o conjunto de subproblemas de um problema e (ii) provar, que uma solucao otima contem uma
(sub-)soluc
ao que e
otima para um subproblema. Se sabemos como estender uma soluc
ao de um subproblema para uma solucao de todo problema, a
subestrutura
otima fornece um algoritmo generico da forma

Algoritmo 4.1 (Solu


c
ao gen
erica de problemas com subestrutura
otima
Entrada Uma inst
ancia I de um problema.
Sada Uma soluc
ao
otima S de I.
1
2
3
4
5
6
7
8
9

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

Informalmente, um algoritmo guloso e caracterizado por uma subestrutura


otima e a caracterstica adicional, que podemos escolher o subproblema que

leva a soluc
ao
otima atraves de uma regra simples. Portanto, o algoritmo
guloso evite resolver todos subproblemas.

78

4.2. Algoritmos em grafos


Uma subestrutura
otima e uma condic
ao necess
aria para um algoritmo guloso
ou de programac
ao din
amica ser
otima, mas ela n
ao e suficiente.

4.2. Algoritmos em grafos

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

4.2. Algoritmos em grafos


Prova

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.

AEM: Algoritmo de Prim

Algoritmo 4.2 (AEM-Prim)


Entrada Um grafo conexo n
ao-orientado G = (V, EG ) com pesos c : VG
R+
P
Sada Uma
arvore T = (V, ET ) com custo eET c(e) mnimo.

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

AEM: Algoritmo de Kruskal

Algoritmo 4.3 (AEM-Kruskal)


Entrada Um grafo conexo n
ao-orientado G = (V, EG ) com pesos c : VG
R+
P
Sada Uma
arvore T = (V, ET ) com custo eET c(e) mnimo.
1
2
3
4
5

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

4.2. Algoritmos em grafos


Implementac
ao do algoritmo de Prim
Problema: Como manter a informac
ao sobre a distancia mnima de
forma eficiente?
Mantenha uma dist
ancia do conjunto V 0 para cada no em V \ V 0 .
N
os que n
ao s
ao acessveis em um passo tem distancia .
Caso um novo n
o seja selecionado: atualiza as distancias.
Implementac
ao do algoritmo de Prim
Estrutura de dados adequada:
Fila de prioridade Q de pares (e, v) (chave e elemento).
Operac
ao Q. min() remove e retorna (e, c) com c mnimo.
Operac
ao Q.atualiza(e, c0 ) modifica a chave de e para v 0 caso v 0 e
menor que a chave atual.
Ambas operac
oes podem ser implementadas com custo O(log n).
AEM: Algoritmo de Prim

Algoritmo 4.4 (AEM-Prim)


Entrada Um grafo conexo n
ao-orientado G = (V, EG ) com pesos c : VG
R+
P
Sada Uma
arvore T = (V, ET ) com custo eET c(e) mnimo.
1
2
3
4
5
6
7
8
9
10

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

4.3. Algoritmos de seq


uenciamento
Aproximac
ao: Uma id
eia
1. Comeca com uma estimativa vi
avel: d(s) = 0 e d(t) = para todo no
em V \ {s}.
2. Depois escolhe uma aresta e = (u, v) E tal que d(u) + c(e) d(v) e
atualiza d(v) = d(u) + c(e).
3. Repete ate n
ao ter mais arestas desse tipo.
Esse algoritmo e correto? Qual a complexidade dele?

4.3. Algoritmos de seq


uenciamento
Seq
uenciamento de intervalos
Considere o seguinte problema
enciamento de intervalos
Sequ
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 Um conjunto compatvel C S de intervalos, i.e. cada par
i1 , i2 C temos i1 i2 = .
Objetivo Maximiza a cardinalidade |C|.

(ingles: interval scheduling)

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

Algoritmo 4.5 (Seq


uenciamento de intervalos)
Entrada Um conjunto de intervalos S = {[ci , fi ] | 1 i n}, cada com
comeco ci e fim fi tal que ci < fi .
Sada Um conjunto m
aximo de intervalos compatveis C.
1 C :=
2 while S 6= do
3
S e j a [c, f ] S com f mnimo
4
C := C [c, f ]
5
S := S \ {i S | i [c, f ] 6= }
6 end while
7 return C

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

4.3. Algoritmos de seq


uenciamento
Complexidade
Uma implementac
ao detalhada pode
Ordenar os intervalos pelo fim deles em tempo O(n log n)
Comecando com intervalo 1 sempre escolher o intervalo atual e
depois ignorar todos intervalos que comecam antes que o intervalo
atual termina.
Isso pode ser implementado em uma varredura de tempo O(n).
Portanto o complexidade pessimista e O(n log n).
Conjunto independente m
aximo
Considere o problema
ximo, CIM
Conjunto independente ma
Inst
ancia Um grafo n
ao-direcionado G = (V, E).
Soluc
ao Um conjunto independente M V , i.e. todo m1 , m2 V temos
{m1 , m2 } 6 E.
Objetivo Maximiza a cardinalidade |M |.

(ingles: maximum independent set, MIS)

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

Algoritmo 4.6 (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 os intervalos tal que cada conjunto de intervalos com a mesma r
otula e compatvel.
Objetivo Minimiza o n
umero de r
otulos diferentes.
1
2
3
4
5
6

88

Ordene S em ordem de comec o c r e s c e n t e .


f o r i := 1, . . . , n do
Exclui r
o t u l o s de i n t e r v a l o s
precedentes c on f li t an t es
A t r i b u i ao i n t e r v a l o i o n
u mero
i n t e i r o mnimo 1 que s o b r a

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.

Resultado: 2b/bp e 3332b total.


Melhor abordagem: Considere as freq
uencias, use codigos de diferente comprimento
A
.18

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

Custo: 0.36 1 + 0.30 2 + 0.18 3 + 0.16 3 = 1.98b/bp, 3299b total.


C
odigos livre de prefixos
Os exemplos mostram
Dependendo das freq
uencias, um c
odigo com comprimento variavel
pode custar menos.
Para evitar ambig
uedades, nenhum prefixo de um codigo pode ser
outro c
odigo: ele e livre de prefixos (ingles: prefix-free).
Observac
ao: Esses c
odigos correspondem a arvores binarias.

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).

Algoritmo 4.7 (PrefixTree)


Entrada Um conjunto de c
odigos C livre de prefixos.
Sada Uma
arvore bin
aria, representando os c
odigos.
1 i f |C |= 0 then
2
return N i l
{ n
ao tem
a rvore }
3 end i f
4 i f C = {} then
5
return L e a f
{ u
nico c
o digo vazio }
6 end i f
7 E s c r e v e C = 0C1 1C2
8 return Node ( P r e f i x T r e e ( C1 ) , P r e f i x T r e e ( C2 ) )

Contrariamente, temos tambem

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.

Como achar o melhor c


odigo?
Observac
ao 1: Uma soluc
ao
otima e uma arvore completa.

@
@
@@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

Algoritmo 4.8 (Huffman)


Entrada Um alfabeto de smbolos S com uma freq
uencia fs para cada
s S.
Sada Uma
arvore bin
aria que representa o melhor codigo livre de prefixos
para S.
1 Q := {Leaf(fs ) | s S} { f i l a de prioridade }
2 while |Q| > 0 do
3
b1 := Q. min() com b1 = Node(fi , bi1 , bi2 )
4
b2 := Q. min() com b2 = Node(fj , bj1 , bj2 )
5
Q := Q.add(Node(fi + fj , b1 , b2 ))
6 end while

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

que precisa 4.201 b/bp (compare com log2 20 4.32).

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

Como os pares somente produzem filhos depois de dois meses, temos


Fn =

Fn1
| {z }

popula
ca
o antiga

com a recorrencia completa


(
Fn1 + Fn2
Fn =
1

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

e foi publicado por Binet em 1843.)


Qual o problema dessa soluc
ao? De um lado temos um n
umero exponencial
de caminhos das chamadas recursivas
Fn


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. Comparacao de sequencias

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

Teorema: Subestrutura Otima


de uma SCML
Sejam as sequencias X = hx1 , x2 , . . . , xm i e Y = hy1 , y2 , . . . , yn i, e seja Z =
hz1 , z2 , . . . , zk i qualquer SCML de X e Y
Se xm = yn , ent
ao zk = xm = yn e Zk1 e uma SCML de Xm1 e Yn1
Se xm 6= yn , ent
ao zk 6= xm implica que Z e uma SCML de Xm1 e Y
Se xm 6= yn , ent
ao zk 6= ym implica que Z e uma SCML de X e Yn1
Notac
ao: Se Z = hz1 , z2 , . . . , zn i, para 0 k n, Zk = hz1 , z2 , . . . , zk i
Denotando com S(X, Y ) a subsequencias mais longa entre X e Y , isso leva ao
definic
ao recursiva
S(X, Y ) =

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 = 

Qual a complexidade de implementac


ao recursiva (naiva)? No pior caso
executamos
T (n, m) = T (n 1, m) + T (n, m 1) + (1)
operac
oes. Isso com certeza e mais que o n
umero de caminhos de (n, m) ate
(0, 0), que e maior que m+n
,
i.e.
exponential
no pior caso.
n
Com memoizac
ao ou armazenamento de valores intermediarios, podemos reduzir o tempo e espaco para O(nm):
SCML

Algoritmo 5.1 (SCML)


Entrada Dois strings X e Y e seus respectivos tamanhos m e n medidos
em n
umero de caracteres.
Sada O tamanho da maior subsequencia comum entre X e Y .
1 m := comprimento (X)
2 n := comprimento (Y)
3 f o r i := 0 t o m do c [ i , 0 ] := 0 ;
4 f o r j := 1 t o n do c [ 0 , j ] := 0 ;
5 f o r i := 1 t o m do
6
f o r j := 1 t o n do
7
i f xi = yj then

100

5.2. Comparacao de sequencias

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:

SCML que permite mostrar a subsequ


encia

Algoritmo 5.2 (SCML-2)


Entrada Dois strings X e Y e seus respectivos tamanhos m e n medidos
em n
umero de caracteres.
Sada O tamanho da maior subsequencia comum entre X e Y e o vetor
b para recuperar uma SCML.
1 m := comprimento [X]
2 n := comprimento [Y]
3 f o r i := 0 t o m do c [ i , 0 ] := 0 ;
4 f o r j := 1 t o n do c [ 0 , j ] := 0 ;
5 f o r i := 1 t o m do
6
f o r j := 1 t o n do
7
i f xi = yj then
8
c[i, j] := c[i 1, j 1] + 1
9
b[i, j] := 10
e l s e i f c[i 1, j] c[i, j 1] then
11
c[i, j] := c[i 1, j]
12
b[i, j] :=
13
else
14
c[i, j] := c[i, j 1]
15
b[i, j] :=
16 return c e b

Exemplo

102

5.2. Comparacao de sequencias

.
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

Algoritmo 5.3 (Print-SCML)


Entrada Matriz b {, -, }mn .
Sada A maior subsequencia Z comum entre X e Y obtida a partir de b.
1
2
3
4
5
6
7
8

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

com caracteres a, b diferentes. O caso (a, a) somente se aplica, se os u


ltimos
caracteres s
ao iguais, o caso (a, b) somente, se eles sao diferentes. Portanto,
considerando todos casos possveis fornece uma solucao otima:
(
max(|s|, |t|)
se |s |= 0 ou |t |= 0
d(s, t) =
min(d(s0 , t) + 1, d(s, t0 ) + 1, d(s0 , t0 ) + [c1 6= c2 ]) se s = s0 c1 e t = t0 c2
Essa dist
ancia est
a conhecida como dist
ancia de Levenshtein [48]. Uma implementac
ao direta e
Dist
ancia de Edic
ao

Algoritmo 5.4 (Dist


ancia)
Entrada Dois strings s, t e seus respectivos tamanhos n e m medidos em
n
umero de caracteres.
Sada A dist
ancia mnima entre s e t.

104

5.2. Comparacao de sequencias

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

Algoritmo 5.5 (PD-dist


ancia)
Entrada Dois strings s e t, e n e m, seus respectivos tamanhos medidos
em n
umero de caracteres.
Sada A dist
ancia mnima entre s e t.
Coment
ario O algoritmo usa uma matriz M = (mi,j ) N(n+1)(m+1)
que armazena as dist
ancias mnimas mi,j entre os prefixos s[1 . . . i]
e t[1 . . . j].
1 PD d i s t
a n c i a ( s , t , n ,m):=
2
f o r i := 0, . . . , n do mi,0 := i
3
f o r i := 1, . . . , m do m0,i := i
4
f o r i := 1, . . . , n do
5
f o r j := 1, . . . , m do
6
i f ( si = tj ) then
7
sol0 := mi1,j1
8
else
9
sol0 := mi1,j1 + 1
10
end i f

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

Algoritmo 5.6 (PD-dist


ancia)
Entrada Dois strings s e t, e n e m, seus respectivos tamanhos medidos
em n
umero de caracteres.
Sada A dist
ancia mnima entre s e t e uma matriz P = (pi,j ) que armazena a sequencia de operac
oes.
Coment
ario O algoritmo usa uma matriz M = (mi,j ) N(n+1)(m+1)
que armazena as dist
ancias mnimas mi,j entre os prefixos s[1 . . . i]
e t[1 . . . j].
1 PD d i s t
a n c i a ( s , t , n ,m):=
2
f o r i := 0, . . . , n do mi,0 = i; pi,0 := 1
3
f o r i := 1, . . . , m do m0,i = i; p0,i := 1

106

5.2. Comparacao de sequencias

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

Algoritmo 5.7 (PD-opera


c
oes)
Entrada Uma matriz P = (pij ) de tamanho n m com marcacao de
operac
oes, strings s, t, posic
oes i e j.
Sada Uma sequencia a1 , a2 , ax de operac
oes executadas.
1 PD o p e r a c
o e s (P , s , t , i , j ):=
2
case
3
pi,j = 1 :
4
return
5
pi,j = 0 :
6
PD o p e r a c
oes (s ,t ,i 1 ,j 1)
7
p r i n t ( M )
8
pi,j = 1 :
9
PD o p e r a c
oes (s ,t ,i ,j 1)
10
print ( I )
11
pi,j = 2 :
12
PD o p e r a c
oes (s ,t ,i 1 ,j )
13
p r i n t ( D )
14
end case

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.

5.3. Problema da Mochila


Mochila (ingl. Knapsack)
Inst
ancia Um conjunto de n itens com valores vi e peso wi , 1 i n, e
um limite de peso da mochila W .
P
Soluc
ao Um subconjunto S [1, n] que cabe na mochila, i.e. iS wi
W.
P
Objetivo Maximizar o valor total iS vi dos itens selecionados.

Ideia: Ou item i faz parte da soluc


ao
otima com itens i . . . n ou nao.
Caso sim: temos uma soluc
ao com valor vi a mais do que a solucao otima
para itens i + 1, . . . , n com capacidade restante W wi .
Caso n
ao: temos um valor correspondente `a solucao otima para itens
i + 1, . . . , n com capacidade W .
Seja M (i, w) o valor da soluc
ao m
axima para itens em [i, n] e capacidade W .
A ideia acima define uma recorrencia

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

Menor tamanho entre os dois


X
iS (k1,vvk )

ti + tk

ti .

iS (k1,v)

Melhor valor: Escolhe S (n, v) com o valor m


aximo de v definido.
P
Tempo e espaco: O(n i vi ).

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

(2(2n 1)) = O(4n /n3/2 ) e temos

obter uma soluc


ao usando func
oes geratrizes. (Cn1 )n1 s
ao os n
umeros Catalan, que t
em diversas aplicaco
es na combinat
orica.

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.

Algoritmo 5.8 (Multi-Mat-1)


Entrada Cadeia de matrizes (A1 , A2 , . . . , An ) e suas respectivas dimens
oes bi , 0 i n. A
matriz Ai tem dimens
ao bi1 bi .
Sada N
umero mnimo de multiplica
c
oes.
1
2
3
4
5
6
7
8
9
10
11
12

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

n + 4nu u 4u2 = O(n3 )

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.

Algoritmo 5.9 (Multi-Mat-1)


Entrada Cadeia de matrizes (A1 , A2 , . . . , An ) e suas respectivas dimens
oes armazenadas no
vetor b.
Sada N
umero mnimo de multiplica
c
oes.
1
2
3
4
5
6
7
8
9
10
11
12
13
14

112

f o r i:=1 t o n do mi,j := 0 { i n i c i a l i z a diagonal p r i n c i p a l }


f o r d:=1 t o n 1 do { para todas diagonais s u p e r i o r e s }
f o r i:=1 t o n u do { para cada posi
c
a o na diagonal}
j :=i + u
{u=j i }
mi,j :=
f o r k:=i t o j do
c:= mi,k + mk+1,j + bi1 bk bj
i f c < mi,j then
mi,j :=c
Pi,j = k
end f o r
end f o r
end f o r
return m1,n , p

5.5. Topicos
Algoritmo Print-Parentizac
ao

Algoritmo 5.10 (Print-Parentiza


c
ao)
Entrada Matriz P , ndices i e j .
Sada Impress
ao da parentizac
ao entre os ndices i e j.
1 i f i = j then
2
p r i n t Ai
3 else
4
p r i n t (
5
P r i n t P a r e n t i z a c
a o ( P, i, Pi,j )
6
P r i n t P a r e n t i z a c
a o ( P, Pi,j + 1, j )
7
p r i n t )
8 end i f

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

Algoritmo 5.11 (Algoritmo de Floyd-Warshall)


Entrada Um grafo G = (V, E) com n = |V | vertices, representado por
uma matriz quadrada D = (dij ) Rnn com distancia dij entre
ij E ou dij = , caso ij 6 E.
Sada Uma matriz quadrada com cada celula contendo a distancia
mnima entre i e j.
1
2
3
4
5
6

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

5.5.2. Caixeiro viajante


O problema de caixeiro viajante e um exemplo em que a programacao dinamica
ajuda reduzir um trabalho exponencial. Esperadamente, o algoritmo final
ainda e exponencial (o problema e NP-completo), mas significadamente menor.
Problema do Caixeiro Viajante
Inst
ancia Um grafo G=(V,E) com pesos d (distancias) atribudos aos
links. V = [1, n] sem perda de generalidade.
Soluc
ao Uma rota que visita todos vertices exatamente uma vez, i.e. uma
permutac
ao de [1, n].
P
Objetivo Minimizar o custo da rota 1i<n d{i,i+1} + d{n,1} .

O algoritmo e baseado na seguinte ideia (proposta por Bellman [8]). Seja


v1 , v2 , . . . uma soluc
ao
otima. Sem perda de generalidade, podemos supor que
v1 = 1. Essa soluc
ao tem como sub-soluc
ao
otima o caminho v2 , v3 , . . . que
passa por todos vertices exceto v1 e volta. Da mesmo forma a u
ltima subsolucao tem o caminho v3 , v4 , . . . que passa por todos vertices exceto v1 , v2
e volta, como sub-soluc
ao. Essa soluc
oes tem sub-estrutura otima, porque
qualquer outro caminho menor pode ser substitudo para o caminho atual.

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 ) =

minvV div + T (v, V \ {v}) V 6=


di1
caso 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

f o r i [1, n] do Ti,0 := di1 { base }


f o r j [1, 2n 1] do
f o r i [1, n] do
Ti,j := min2k &j=2k dik + Ti,j2k { tempo O(n) ! }
end f o r
end f o r
A complexidade de tempo desse algoritmo e n2 2n porque a minimzacao na
linha 4 precisa O(n) operac
oes. A complexidade do espacao e O(n2n ). Essa e
atualmente o melhor algoritmo exato conhecido para o problema do caixeiro
viajante (veja tambem xkcd.com/399).

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

Pr[ai < c < ai+1 ](prof(]ai , ai+1 [) 1);

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

Pr[ai < c < ai+1 ](prof(]ai , ai+1 [)1)

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

Pr[ai < c < ai+1 ](prof(]ai , ai+1 [) 1)

e1i<r

Pr[c = ai ]prof(ai ) +

r<id

Pr[ai < c < ai+1 ](prof(]ai , ai+1 [) 1)

rid

Pr[ai < c < ai+1 ] +

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

Algoritmo 5.12 (ABB-OTIMA)


Entrada Probabilidades pi = Pr[c = ai ] e qi = Pr[ai < c < ai+1 ].
Sada Vetores c e r como descrita acima.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

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

Finalmente, queremos analisar a complexidade desse algoritmo. Sao tres lacos,


cada com n
ao mais que n iterac
oes e com trabalho constante no corpo. Logo
a complexidade pessimista e O(n3 ).
5.5.4. Caminho mais longo
Encontrar o caminho mais longo e um problema NP-completo. Em particular,
n
ao podemos aplicar programac
ao din
amica da mesma forma que no problema
do caminho mais curto, porque o caminho mais longo nao possui a mesma
subestrutura
otima: dado um caminho mais longo u vw, u v nao e um
caminho mais longo entre u e v, porque podemos passar pelo vertice w para
achar um caminho ainda mais longo (ver Fig 5.1). Porem, exluindo o vertice

120

5.6. Exerccios
u

Figura 5.1.: Esquerda: O subcaminho uv de uvw n


ao e o caminho mais longo
entre u e v.
w, u v e o caminho mais longo entre u e v. Isso nos permite definir C(s, t, V )
como caminho mais longo entre s e t sem passar pelos vertices em V , e temos

maxuN (t)\V C(s, u, V {t}) + dut caso s 6= t e N (t) \ V 6=


C(s, t, V ) =
caso s 6= t e N (t) \ V =

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

Algoritmo 6.1 (DC)


Entrada Uma inst
ancia I de tamanho n.
1 i f n = 1 then
2
return S o l u c
ao d i r e t a
3 else
4
D i v i d e I em sub i n s t
a n c i a s I1 , . . . , I k , k > 0
5
com tamanhos ni < n .
6
R e s o l v e r e c u r s i v a m e n t e : I1 , . . . , Ik .
7
R e s o l v e I usando sub s o l u c
o e s DC(I1 ), . . . , DC(Ik ) .
8 end i f

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

Algoritmo 6.2 (Mergesort)


Entrada Indices p, r e um vetor A com elementos Ap , . . . , Ar
Sada O vetor A ordenado em ordem n
ao-decrescente, i.e. para i < j
temos Ai Aj .
1 i f p < r then
2
q = b(p + r)/2c
3
MergeSort (A, p , q ) ;
4
MergeSort (A, q+1, r ) ;
5
Merge (A, p , q , r )
6 end i f

124

6.2. Resolver recorrencias


Recorr
encias simplificadas
Formalmente, a equac
ao de recorrencia do Mergesort e
(
(1)
se n = 1
T (n) =
T (dn/2e) + T (bn/2c) + (n) se n > 1
que simplificaremos para
T (n) = 2 T (n/2) + (n)
Para simplificar a equac
ao, sem afetar a an
alise de complexidade correspondente, em geral:
sup
oe-se argumentos inteiros para func
oes (omitindo pisos e tetos)
omite-se a condic
ao limite da recorrencia
Recorr
encias: caso do Mergesort
A equacao de recorrencia do Mergesort e
T (n) = 2 T (n/2) + (n)
Sendo que:
T(n) representa o tempo da chamada recursiva da funcao para um problema de tamanho n.
2 T (n/2) indica que, a cada iterac
ao, duas chamadas recursivas serao
executadas para entradas de tamanho n/2.
Os resultados das duas chamadas recursivas serao combinados (merged )
com um algoritmo com complexidade de pior caso (n).

6.2. Resolver recorr


encias
M
etodos para resolver recorr
encias
Existem v
arios metodos para resolver recorrencias:
Metodo da substituic
ao
Metodo de
arvore de recurs
ao
Metodo mestre

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

e o resduo. A prova objetiva mostrar que o resduo e negativo.


Como fazer um bom palpite
Usar o resultado de recorrencias semelhantes. Por exemplo, considerando a recorrencia T (n) = 2T (bn/2c + 17) + n, tem-se que T (n)
O(n log n).
Provar limites superiores (ou inferiores) e reduzir o intervalo de incerteza.
Por exemplo, para equac
ao do Mergesort podemos provar que T (n) =
(n) e T (n) = O(n2 ). Podemos gradualmente diminuir o limite superior
e elevar o inferior, ate obter T (n) = (n log n).

126

6.2. Resolver recorrencias


Usa-se o resultado do metodo de
arvore de recursao como limite hipotetico para o metodo da substituic
ao.
Exemplo 6.1
Vamos procurar o m
aximo de uma sequencia por divisao e conquista:

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 )

Isso leva a recorrencia


T (n) = T (bn/2c) + T (dn/2e) + 1

Algumas sutilezas nas resoluc


oes
Considere T (n) = T (bn/2c) + T (dn/2e) + 1. Prove que T (n) = O(n).
possvel provar que T (n) = O(n)?
Considere T (n) = 2T (bn/2c) + n. E

Considere T (n) = 2T (b nc)+log n. Prove que T (n) = O(log n log log n)


Proposta de exerccios: 4.1-1, 4.1-2, 4.1-5 e 4.1-6 do Cormen (pag. 54 da edicao
traduzida).
Substituic
ao direta
Supomos que a recorrencia tem a forma
(
f (1)
T (n) =
T (n 1) + f (n)

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

(Os substituem uma prova por inducao.)


simples generalizar isso para
E
T (n) = T (n/c) + f (n)
= f (n) + f (n/c) + f (n/c2 ) +
X
=
f (n/ci )
0ilogc n

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

6.2. Resolver recorrencias


Para coloc
a-la na forma acima, vamos dividir primeiro por n para obter
T (n)/n = 1 + T (n/2)/(n/2)
e depois substituir A(n) = T (n)/n, que leva `
a recorrencia
A(n) = 1 + A(n/2)
P

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).

Tambem podemos generalizar isso. Para


f (n) = 2f (n/2)
e simples de ver que
f (n) = 2f (n/2) = 22 f (n/4) = = 2log2 n n = n
(observe que toda func
ao f (n) = cn satisfaz a recorrencia).
Generalizando obtemos
f (n) = cf (n/2) = = clog2 n = nlog2 c
logc2 n

f (n) = c1 f (n/c2 ) = = c1

= nlogc2 c1

O caso mais complicado e o caso combinado


T (n) = c1 T (n/c2 ) + f (n).
logc2 n

O nosso objetivo e nos livrar da constante c1 . Se dividimos por c1


T (n)
log n
c1 c2

T (n/c2 )
log n/c2
c1 c2

logc2 n

e substituindo A(n) = T (n)/c1

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 .

Logo o produto possui a representac


ao
pq = (pl 2n/2 + pr )(ql 2n/2 + qr )
= 2n pl ql + 2n/2 ( pl qr + pr ql ) + pr qr .
Observac
ao:
pl qr + pr ql = (pl + pr )(ql + qr ) pl ql pr qr .
Portanto a multiplicac
ao de dois n
umeros bin
arios com n bits e possvel com
tres multiplicacoes de n
umeros bin
arios com aproximadamente n/2 bits.

Algoritmo 6.4 (mult-bin [41])


Entrada Dois n
umeros bin
arios p, q com n bits.
Sada O produto pq (com 2n bits).
1 i f n = 1 then return pq
2 else
3
x1 := mult-bin(pl , ql )
4
x2 := mult-bin(pr , qr )
5
x3 := mult-bin(pl + pr , ql + qr )
6
return x1 2n + (x3 x2 x1 )2n/2 + x2
7 end i f

130

6.2. Resolver recorrencias


O algoritmo multiplica dois n
umeros bin
arios com no maximo dn/2e bits, e
os n
umeros pl + pr e ql + qr com no m
aximo dn/2e + 1 bits, e portanto possui
complexidade
(
(1)
se n 1
T (n) =
2T (dn/2e) + T (dn/2e + 1) + (n) caso contrario
que podemos simplificar para
T (n) = 3T (n/2) + cn.
Dividindo por 3log2 n obtemos
T (n/2)
cn
T (n)
= log n/2 + log n
3log2 n
3 2
3 2
e substituindo A(n) = T (n)/3log2 n temos
A(n) = A(n/2) +

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

Prova por substituic


ao usando o resultado da
arvore de recorr
encia
O limite de O(n2 ) deve ser um limite restrito, pois a primeira chamada
recursiva e (n2 ).

132

6.2. Resolver recorrencias


Prove por induc
ao que T (n) = (n2 )
T (n) 3T (bn/4c) + cn2
2

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)

Proposta de exerccios: 4.2-1, 4.2-2 e 4.2-3 do Cormen [15].


6.2.3. M
etodo Mestre
M
etodo Mestre
Para aplicar o metodo mestre deve ter a recorrencia na seguinte forma:
T (n) = aT (n/b) + f (n)
onde a 1, b > 1 e f (n) e uma func
ao assintoticamente positiva. Se a
recorrencia estiver no formato acima, ent
ao T (n) e limitada assintoticamente
como:
1. Se f (n) = O(nlogb a ) para algum  > 0, entao T (n) = (nlogb a )
2. Se f (n) = (nlogb a ), ent
ao T (n) = (nlogb a log n)
3. Se f (n) = (nlogb a+ ) para algum  > 0, e se af (n/b) cf (n) para
c < 1 e para todo n suficientemente grande, entao T (n) = (f (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

Algoritmo 6.5 (Potencia


c
ao-Trivial (PT))
Entrada Uma base a R e um exponente n N.

134

6.2. Resolver recorrencias

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

A complexidade dessa recorrencia e linear, ou seja, T (n) O(n).


Algoritmo Potenciac
ao para n = 2i

Algoritmo 6.6 (Potencia


c
ao-Npot
encia2 (P2))
Entrada Uma base a R e um exponente n N.
Sada A potencia an .
1 i f n = 1 then
2
return a
3 else
4
x := P2 ( a , n 2 )
5
return x x
6 end i f

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

Algoritmo 6.7 (Busca-Bin


aria(i,f,x,S))
Entrada Um inteiro x, ndices i e f e uma sequencia S = a1 , a2 , . . . an de
n
umeros ordenados.
Sada Posic
ao i em que x se encontra na sequencia S ou caso x
/ S.
1 i f i = f then
2
i f ai = x return i
3
e l s e return
4 end ji f k
5 m := f i
+i
2
6 i f x < am then
7
return Busca B i n
aria (i , m 1)
8 else
9
return Busca B i n
aria (m + 1 , f )
10 end i f

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

Algoritmo 6.8 (Quicksort)


Entrada Indices l, r e um vetor a com elementos al , . . . , ar .
Sada a com os elementos em ordem n
ao-decrescente, i.e. para i < j temos
ai aj .
1
2

136

i f l < r then
m := P a r t i t i o n ( l , r , a ) ;

6.2. Resolver recorrencias

3
Quicksort (l ,m 1 ,a ) ;
4
Quicksort (m + 1 ,r ,a ) ;
5 end i f

Complexidade do Quicksort no pior caso


(
T (n) =

(1)
T (n 1) + (n)

se n = 1
se n > 1

A complexidade dessa recorrencia e quadr


atica, ou seja, T (n) O(n2 )
Complexidade do Quicksort no melhor caso
(
(1)
T (n) =
2T (n/2) + (n)

se n = 1
se n > 1

A complexidade dessa recorrencia e T (n) O(n log n)


Complexidade do Quicksort com Particionamento Balanceado
(
T (n) =

(1)
n
T ( 9n
10 ) + T ( 10 ) + (n)

se n = 1
se n > 1

A complexidade dessa recorrencia e T (n) O(n log n)


Agora, vamos estudar dois exemplos, em que o metodo mestre nao se aplica.
Exemplo 6.7 (Contra-exemplo 1)
Considere a recorrencia T (n) = 2T (n/2)+n log n. Nesse caso, a funcao f (n) =
n log n n
ao satisfaz nenhum dos criterios do teorema Mestre (ela fica entre
casos 2 e 3), portanto temos que analisar com
arvore de recorrencia que resulta
em
X
T (n) =
(n log n in) + (n) = (n log2 n)
0i<log2 n

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

n/j + (n) = nHn + (n) = (n log log n)

1jlog n

Prova do Teorema Master


Consideremos o caso simplificado em que n = 1, b, b2 , ..., ou seja, n e
uma potencia exata de dois e assim n
ao precisamos nos preocupar com
tetos e pisos.
Prova do Teorema Master
Lema 4.2: Sejam a 1 e b > 1 constantes, e seja f (n) uma funcao nao
negativa definida sobre potencias exatas de b. Defina T (n) sobre potencias
exatas de b pela recorrencia:
(
T (n) = (1)
se n = 1
n
T (n) = aT ( b ) + f (n) se n = bi
onde i e um inteiro positivo. Ent
ao
logb (n1)

T (n) = (nlogb a ) +

aj f (n/bj )

j=0

Prova do Teorema Master


Lema 4.4: Sejam a 1 e b > 1 constantes, e seja f (n) uma funcao nao negativa
definida sobre potencias exatas de b. Uma funcao g(n) definida sobre potencias
exatas de b por
logb (n1)

g(n) =

X
j=0

138

aj f (n/bj )

6.2. Resolver recorrencias


1. Se f (n) = O(nlogb a ) para algum  > 0 R+ , entao T (n) = (nlogb a )
2. Se f (n) = (nlogb a ), ent
ao T (n) = (nlogb a lgn)
3. Se af (n/b) cf (n) para c < 1 e para todo n b, entao g(n) = (f (n))
Prova do Teorema Master
Lema 4.4: Sejam a 1 e b > 1 constantes, e seja f (n) uma funcao nao
negativa definida sobre potencias exatas de b. Defina T (n) sobre potencias
exatas de b pela recorrencia
(
T (n) = (1)
se n = 1
T (n) = aT ( nb ) + f (n) se n = bi
onde i e um inteiro positivo. Ent
ao T (n) pode ser limitado assintoticamente
para potencias exatas de b como a seguir:
Prova do M
etodo Mestre
1. Se f (n) = O(nlogb a ) para algum  > 0 R+ , entao T (n) = (nlogb a )
2. Se f (n) = (nlogb a ), ent
ao T (n) = (nlogb a lgn)
3. Se f (n) = (nlogb a+ ) para algum  > 0 R+ , e se a f (n/b) c f (n)
para c < 1 e para todo n suficientemente grande, entao T (n) = (f (n))
6.2.4. Um novo m
etodo Mestre
O metodo Master se aplica somente no caso que a arvore de recursao esta
balanceado. O metodo de Akra-Bazzi [3] e uma generalizacao do metodo
Master, que serve tambem em casos n
ao balanceados1 . O que segue e uma
vers
ao generalizada de Leighton [47].
Teorema 6.1 (M
etodo Akra-Bazzi e Leighton)
Dado a recorrencia
(
(1)
se x x0
T (x) = P
ario
1ik ai T (bi x + hi (x)) + g(x) caso contr
com constantes ai > 0, 0 < bi < 1 e func
oes g, h, que satisfazem
|g 0 (x)| O(xc );
1 Uma

|hi (x)| x/ log1+ x

abordagem similar foi proposta por [57].

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

= (n(1 + log2 (n)/2))


= (n log2 (n))
2 As

140

condic
oes exatas s
ao definidas em Leighton [47].

6.3. Algoritmos usando divisao e conquista

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 +

1/(u log u) du)) = (n(1 + [log log u]n1 )

= (n(1 + log log n))


= (n log(log n))

6.3. Algoritmos usando divis


ao e conquista
6.3.1. O algoritmo de Strassen
No captulo 2.2.2 analisamos um algoritmo para multiplicar matrizes quadradas de tamanho (n
umero de linhas e colunas) n com complexidade de O(n3 )
multiplicac
oes. Um algoritmo mais eficiente foi proposto por Strassen [63].
A ideia do algoritmo e: subdivide os matrizes num produto A B = C em
quatro sub-matrizes com a metade do tamanho (e, portanto, um quarto de
elementos):


A11
A21

A12
A22

B11
B21

B12
B22


=

C11
C21

C12
C22


.

Com essa subdivis


ao, o produto AB obtem-se pelas equacoes
C11 = A11 B11 + A12 B21
C12 = A11 B12 + A12 B22
C21 = A21 B11 + A22 B21
C22 = A21 B12 + A22 B22
e precisa-se de oito multiplicac
oes de matrizes de tamanho n/2 ao inves de
uma multiplicac
ao de matrizes de tamanho n. A recorrencia correspondente,
considerando somente multiplicac
oes e
T (n) = 8T (n/2) + O(1)

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

6.3. Algoritmos usando divisao e conquista


o par de menor dist
ancia e entre os
dois subconjuntos. Para conseguir a
complexidade O(n log n) temos que
encontrar um tal par, caso existe, em
tempo linear no n
umero de pontos.
A figura 6.1 mostra como isso e
possvel. Sabemos que caso o par de
pontos de menor dist
ancia e entre os
dois subconjuntos, os dois pontos se
encontram numa faixa da dist
ancia
no m
aximo da linha de divis
ao.
Subdividindo esta faixa por celulas
quadradas de tamanho /2, em cada
celula se encontra no m
aximo um
ponto (por que?). Portanto em uma lista dos pontos nesta faixa, ordenada
pelo coordenado ortogonal ao coordenada de divis
ao, um par de pontos de
dist
ancia menor que e no m
aximo 13 posic
oes distante. Portanto podemos
testar para cada ponto em tempo constante, se existe outro de distancia menor
que .

Algoritmo 6.9 (Menor dist


ancia)
Entrada Conjunto de pontos p1 , . . . , pn no plano.
Pr
e-processamento Ordenar os pontos por x para obter x1 , . . . , xn e por
y para obter y1 , . . . , yn .
Sada O par p, q de pontos de menor dist
ancia euclidiana.
1 md( x1 , . . . , xn , y1 , . . . , yn ) :=
2
i f n 3 then
3
r e s o l v e o problema d i r e t a m e n t e
4
end i f
5
m := bn/2c
6
sejam Y1 o s p o n t o s com x xm o r d e n a d o s por y
7
sejam Y2 o s p o n t o s com x > xm o r d e n a d o s por y
8
(p, q) := md(x1 , . . . , xm , Y1 )
9
(p0 , q 0 ) := md(xm+1 , xn , Y2 )
10
i f ||p0 q 0 || < ||p q|| then (p, q) := (p0 , q 0 )
11
:= ||p q||
12

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)

Figura 6.2.: Funcionamento do algoritmo recursivo para selecao.

13
14
15
16
17
18
19
20

Sejam y10 , . . . , yk0 o s p o n t o s o rd e n a d o s por y


com d i s t
a n c i a em x menos que para xm .
f o r i [k] do
f o r j {i, . . . , i + 13} [k] do
i f ||yi yj || < ||p q|| then (p, q) := (yi , yj )
end f o r
end f o r
return (p, q)

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

6.3. Algoritmos usando divisao e conquista


sequencia. Logo, caso i = k m e o k-esimo elemento. Caso i > k temos que
procurar o k-esimo elemento em L, caso i < k temos que procurar o ki-esimo
elemento em R (ver figura 6.2).
O algoritmo e eficiente, porque a selec
ao do elemento particionador m garante
que o subproblema resolvido na segunda recurs
ao e no maximo um fator 7/10
do problema original. Mais preciso, o n
umero de medianos e maior que n/5,
logo o n
umero de medianos antes de m e maior que n/10 1, o n
umero de
elementos antes de m e maior que 3n/10 3 e com isso o n
umero de elementos
depois de m e menor que 7n/10 + 3. Por um argumento similar, o n
umero de
elementos antes de m e tambem menor que 7n/10 + 3. Portanto temos um
custo no caso pessimista de
(
(1)
se n 5
T (n) =
T (dn/5e) + (7n/10 + 3) + (n) caso contrario
e com 5p + (7/10)p = 1 temos p = log2 7 0.84 e

T (n) = n

1+

= (np (1 + (n

u
1
1p


du

/(1 p) 1/(1 p)))

= (c1 n + c2 n) = (n).

Algoritmo 6.10 (Sele


c
ao)
Entrada N
umeros x1 , . . . , xn , posic
oa k.
Sada O k-esimo maior n
umero.
1 S(k, {x1 , . . . , xn }) :=
2
if n 5
3
c a l c u l a e r e t o r n e o k e simo e l e m e n t o
4
end i f
5
mi := median(x5i+1 , . . . , xmin(5i+5,n) ) para 0 i < dn/5e .
6
m := S(m1 , . . . , mdn/5e1
7
L := {xi | xi < m, 1 i n}
8
R := {xi | xi m, 1 i n}
9
i := |L| + 1
10
i f i = k then
11
return m

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

6.3. Algoritmos usando divisao e conquista


Exemplo 6.14 (Bluestein [10], Algoritmo chirp-z)
A transformada de Fourier discreta de uma sequencia x0 , . . . , xn1 e a sua
inversa e definido por
X
X
Xk =
xj kj ;
xk = 1/n
Xj kj
0j<n

0j<n

com = e2i/n . Usando kj = (k 2 + j 2 (k j)2 )/2 podemos escrever


X

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

. Uma transformacao similar se

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 )

grau n 1 em n pontos x0 , . . . , xn1

x20
x21

x2n1

a
0
xn1
0
n1 a1
x1

..
xn1
n1
an1

Uma matriz desta forma se chamaQ


uma matriz Vandermonde. Uma matriz
Vandermonde possui determinante 0i<j<n xi xj . Logo, caso todos pares
xi e xj s
ao diferentes, ela possui inversa e a multiplicacao de um vetor de valores nos pontos A(x0 ), . . . , A(xn1 ) nos fornece os coeficientes ai , i.e., resolve
o problema da interpolac
ao.

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

Aplicando essa recurs


ao para o ponto x tem custo (n), logo um custo total de
(n2 ) para a avaliac
ao de n pontos. Observacao: a avaliacao do par x possui
o mesmo custo! Logo podemos avaliar o polinomio A(x) de grau n 1 nos n
pontos x0 , . . . , xn/21 com duas avaliac
oes de polinomios de grau (n 1)/2
nos n/2 pontos x20 , . . . , x2n1 e um trabalho adicional de O(n). Sendo T (n) o
tempo para avaliar um polin
omio de grau n 1 em n pontos temos
T (n) 2T (n/2 + 1/2) + O(n) = O(n log n).
Esta recorrencia somente e correto, caso temos sempre pares de n
umeros xi
em todos nveis. Como no primeiro nvel temos n
umeros x2i , isso nao e obviamente possvel. Para garantir isso, podemos observar que os n n-esimas razes
complexas ek2i/n , 0 k < n da unidade satisfazem essa condicao: temos que
ek2i/n = ei ek2i/n = e(n/2+k)2i/n para 0 k < n/2 e os quadrados desses
n
umeros s
ao os n/2 n/2-esimas raizes complexas ek2i/(n/2) , 0 k < n/2 da

148

6.3. Algoritmos usando divisao e conquista


unidade. Em total a avaliac
ao procede em log2 n nveis
1, e2i/n , e22i/n , e32i/n , . . . , e(n1)2i/n
1, e2i/(n/2) , e22i/(n/2) , e32i/(n/2) , . . . , e(n/21)2i/(n/2)

1, i, 1, i
1, 1
1

Algoritmo 6.11 (FFT)


P
i
k
Entrada Polin
omio A(x) =
0i<n ai x de grau n 1 (n = 2 ) e a
n-esima raiz da unidade = e2i/n .
Saida Os valores A( j ), 0 j < n.
1
2
3
4
5
6
7
8

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

Nesta caso especfico e simples obter a inversa: observandoque a inversa de


uma matriz unit
aria e a sua conjugada transposta e que V / n e unitaria.
Lema 6.1
aria.
A matriz V / n e unit
Prova. Uma criterio para uma matriz Cnn ser unitaria e que as colunas
formam uma base ortonormal de Cn . O produto das colunas j e k da e
1/n

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

O problema das n-rainhas


Problema das n-rainhas
Inst
ancia Um tablado de xadrez de dimens
ao n n, e n rainhas.
Soluc
ao Todas as formas de posicionar as n rainhas no tablado sem que
duas rainhas estejam na mesma coluna, linha ou diagonal.

O problema das n-rainhas (simplificado: sem restric


ao da diagonal)
O que representam as folhas da
arvore de busca para este problema?

154

7.1. Backtracking

O problema das n-rainhas


A melhor soluc
ao conhecida para este problema e via Backtracking.
Existem

n2
n

formas de posicionar n rainhas no tablado.

Restringe uma rainha por linha: nn .


Restringe ainda uma rainha por coluna problema: n!.
Pela aproximac
ao de Stirling
n!

2n

 n n
e

(1 + O(1/n))

(7.1)

O problema das n-rainhas


Se considerarmos tambem a restric
ao de diagonal podemos reduzir ainda mais
o espaco de busca (neste caso, nenhuma soluc
ao e factvel)

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

Problema do Caixeiro Viajante


Inst
ancia Um grafo G=(V,E) com pesos p (distancias) atribudos aos
links. V = [1, n] sem perda de generalidade.
Soluc
ao Uma rota que visita todos vertices exatamente uma vez, i.e. uma
permutac
ao de [1, n].
P
Objetivo Minimizar o custo da rota 1i<n p{i,i+1} + p{n,1} .

O problema do caixeiro viajante


c
a

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

Vantagens x Desvantagens e Caractersticas Marcantes


Vantagens
F
acil implementac
ao
Linguagens da
area de programac
ao l
ogica (prolog, ops5) trazem mecanismos embutidos para a implementac
ao de backtracking
Desvantagens
Tem natureza combinat
oria. A busca exaustiva pode ser evitada com o
teste de restric
oes, mas o resultado final sempre e combinatorio
Caracterstica Marcante
Backtracking = retornar pelo caminho: constroem o conjunto de
soluc
oes ao retornarem das chamadas recursivas.

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

Algoritmo 7.1 (Redu


c
ao de cobertura por v
ertices)
Entrada Grafo n
ao-direcionado G = (V, E).
Sada Um conjunto C V e um grafo G0 , tal que cada cobertura de
vertices contem C, e a uni
ao de C com a cobertura mnima de G0 e
uma cobertura mnima de G.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

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

Algoritmo 7.2 (Arvore


de busca)
Entrada Grafo n
ao-direcionado G = (V, E).
Sada Cobertura por vertices S V mnima.
1
2
3

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

Figura 7.1.: Cobertura mnima: Dois subcasos para vertice v.


7
8
9

C1 := {v} mvc0 (G \ {v})


C2 := N (v) mvc0 (G \ N (v) \ {v})
return a menor c o b e r t u r a e n t r e C1 e C2
Qual a complexidade do algoritmo? Observe que existem mais folhas que nos
internos: ara simplificar vamos s
o contar folhas. O n
umero de folhas obedece
T (n) T (n 1) + T (n 4)
Para resolver essa recorrencia podemos aplicar teorema 7.1 com vetor de bifurcacao (1, 4). O polin
omio caracterstico e z 4 z 3 + 1 e possui a maior raiz
1.39 com multiplicidade 1. Portanto o n
umero de folhas e (n ) e a
n
complexidade O( ).
3-SAT

Formula em forma normal conjuntiva com 3 literais por cla


usula
^
(x1 , . . . , xn ) =
li1 li2 li3
i

Problema: Existe atribuicao a : xi 7 {F, V } que satisfaz ?


Forca bruta: (2n ) testes.

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

Figura 7.2.: Cobertura mnima: Arvore


de busca para n = 9
3-SAT

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

Algoritmo 7.3 (B&B)


n
Inst
ancia Programa inteiro P = max{ct x | Ax b, x Z+
}.
Saida Soluca
o inteira o
tima.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

{ 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

Exemplo 7.2 (Aplica


c
ao Branch&Bound no PCV)
Considera uma aplicacao do PCV no grafo
1
2

1
1

2
1
3

3
2

1
4

Aplicando somente backtracking obtemos a seguinta arvore de busca:

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.

O problema do caixeiro viajante


Para cada chamada recursiva existem diversos vertices que podem ser
selecionados
Vertices ainda n
ao selecionados s
ao os candidatos possveis
A busca exaustiva e gerada caso nenhuma restricao for imposta
Todas as permutac
oes de cidades geram as solucoes factveis (Pn = n(n
1)(n 2)...1 = n!)
Este problema tem soluc
ao n2 2n usando programacao dinamica.
Mas: para resolver em PD e necess
ario n2n de memoria!

O problema do caixeiro viajante


Alguma ideia de como diminuir ainda mais o espaco de busca?

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?

O problema da Mochila fracion


ario e polinomial
O problema da Mochila 0/1 e NP-Completo
A enumerac
ao de todos os conjuntos gera uma solucao de custo
exponencial 2n
Solucao via PD possui complexidade de tempo O(Kn) (pseudopolinomial) e de espaco O(K)
Problema de colorac
ao em grafos
o em Grafos
Problema de Colorac
a
Inst
ancia Um grafo G=(V,A) e um conjunto infinito de cores.
Soluc
ao Uma colorac
ao do grafo, i.e. uma atribuicao c : V C de cores
tal que vertices vizinhos n
ao tem a mesma cor: c(u) 6= c(v) para
(u, v) E.

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.

De quantas cores precisamos?

f
a

e
d

De quantas cores precisamos?

f
a

f
a

e
d

(Precisamos de 4 cores!)
Backtracking

Algoritmo 7.4 (bt-coloring)


Entrada Grafo n
ao-direcionado G=(V,A), com vertices V = [1, n].
Sada Uma colorac
ao c : V [1, 4] do grafo.
Objetivo Minimiza o n
umero de cores utilizadas.

170

7.2. Branch-and-bound

Para um vertice v V , vamos definir o conjunto de cores adjacentes


C(v) := {c(u) | {u, v} A}.
1 return bt coloring(1, 1)
2
3 b o o l e a n bt coloring(v, cv ) :=
4
if v > n
5
return t r u e
6
7
i f c 6 C(v) then { v c o l o rv e l com cv ? }
8
c(v) := cv
9
f o r cu [1, 4] do
10
i f bt coloring(v + 1, cu )
11
return t r u e
12
end f o r
13
else
14
return f a l s e
15
end i f
16 end

De quantas cores precisamos?

c
d
e

De quantas cores precisamos?

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.

Cada rota comeca e termina no dep


osito.
Cada cidade V \ v0 e visitada uma u
nica vez e por somente um veculo
(que atende sua demanda total).
A demanda total de qualquer rota n
ao deve superar a capacidade do
caminh
ao.
Roteamento de Veculos
Mais de um dep
osito
veculos com capacidades diferentes
Entrega com janela de tempo (perodo em que a entrega pode ser realizada
Periodicidade de entrega (entrega com restric
oes de data)
Entrega em partes (uma entrega pode ser realizada por partes)
Entrega com recebimento: o veculo entrega e recebe carga na mesma
viagem
Entrega com recebimento posterior: o veculo recebe carga apos todas
entregas
...
Backtracking versus Branch & Bound
Backtracking: enumera todas as possveis solucoes com exploracao de
busca em profundidade.

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

7.3. Analisar arvores de busca


Fato 7.1 (Graham, Knuth e Patashnik [32, cap. 7.3])
Uma express
ao para os termos gn de sequencia gn que satisfaz uma recorrencia
pode ser obtido da seguinte maneira:
1. Expressa a recorrencia em forma de uma equacao u
nica que e valida
para todo inteiro n, supondo que g1 = g2 = = 0.
2. Multiplica a equac
ao por z n e soma sobre todos
P n. Com isso obtemos
uma equac
ao com a func
ao geradora G(z) = n gnn no lado da esquerda.
Manipula o lado da direita para obter uma expressao que depende de
G(z).
3. Resolve a equac
ao para obter uma f
ormula fechada para G(z).
4. Expande G(z) em uma serie de potencias. O coeficiente de z n e uma
express
ao fechada para gn .
Caso G(z) = P (z)/Q(z) e uma func
ao racional temos ainda

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)

com fk (n) um polin


omio de grau mk 1.
Corol
ario 7.1 (Graham, Knuth e Patashnik [32])
Dado a recorrencia
(
(1)
tn = P

i[k]

i tndi

n max1ik di
caso contr
ario

seja a raiz com a maior valor absoluto com multiplicidade l do polin


omio
caracterstico
z d 1 z dd1 k z ddk
com d = maxk dk . Ent
ao
tn = (nl1 n ) = (n ).
((d1 , . . . , dk ) e o vetor de bifurcac
ao.)

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

com 0 = 1 e d0 = 0. Logo o criterios do teorema 7.1 sao satisfeitos. Mas


os coeficientes l s
ao as razes do polin
omio
z d 1 z dd1 k z ddk
e portanto, pelo teorema 7.1 obtemos assintoticamente para a maior raz
com multiplicidade m
tn = (f (n)n )
com f (n) um polin
omio de grau m 1.

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

Algoritmo 8.1 (Cobertura por v


ertices)
Entrada Grafo n
ao-direcionado G = (V, E).
Sada Cobertura por vertices C V .
1
2
3
4
5
6
7
8

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

e o grau medio dos vertices em Gi satisfaz


P
kGi k
kGi k
G (v)

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

Algoritmo 8.2 (Cobertura por v


ertices)
Entrada Grafo n
ao-direcionado G = (V, E).
Sada Cobertura por vertices C V .
1
2
3
4
5
6
7
8
9
10
11
12
13
14

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

Algoritmo 8.3 (Cobertura por v


ertices)
Entrada Grafo n
ao-direcionado G = (V, E).
Sada Cobertura por vertices C V .
1
2
3
4
5
6
7
8

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

OPT + p/(p 1)OPT = (2 1/p)OPT




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

8.3. Aproximacoes gulosas


Aproximac
ao?
Surpresa: Algoritmo e 2-aproximac
ao.
Prova. Seja X a vari
avel aleat
oria que denota o n
umero de cla
usulas satisfeitas. Afirmac
ao: E[X] (1 2l )n com l o n
umero mnimo de literais por
cla
usula. Portanto, com l 1, temos E[X] n/2.
Prova da afirmac
ao: P [[[Ci ]] = f ] 2l e logo P [[[Ci ]] = v] (1 2l ) e
X
X
E[X] =
E[[[Ci ]] = v] =
P [[[Ci ]] = v] = (1 2l )n.
1ik

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

8.3. Aproximacoes gulosas


Tentativa 2: Modificac
ao
1 KG ( vi , ti ) :=
2
S1 := P
KG( vi , ti )
3
v1 :=
iS1 vi
4
S2 := P
{argmaxi vi }
5
v2 :=
iS2 vi
6
i f v1 > v2 then
7
return S1
8
else
9
return S2
10
end i f
Aproximac
ao boa?
O algoritmo melhorou?
Surpresa
Proposi
c
ao 8.5
K-G e uma 2-aproximac
ao, i.e. OPT(x) < 2K-G0 (x).
Prova. Seja j o primeiro item que K-G n
ao coloca na mochila. Nesse ponto
temos valor e tamanho
X
vj =
vi K-G (x)
(8.1)
1i<j

tj =

ti M

(8.2)

1i<j

Afirmacao: OPT(x) < vj + vj . Nesse caso


1. Seja vj vj .
OPT(x) < vj + vj 2vj 2K-G (x) 2K-G0
2. Seja vj > vj
OPT(x) < vj + vj < 2vj 2vmax 2K-G0
Prova da afirmac
ao: No momento em que item j nao cabe, temos espaco
M tj < tj sobrando. Como os itens s
ao ordenados em ordem de densidade

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

Empacotamento unidimensional (ingl. bin packing).

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).

Por exemplo: Itens 6, 7, 6, 2, 5, 10 com limite 12.

188

8.3. Aproximacoes gulosas

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.

Portanto: Assintoticamente a taxa de aproximacao 2 e estrito.


Melhores estrat
egias
Primeiro que cabe (PiC), on-line, com estoque na memoria
Primeiro que cabe em ordem decrescente: PiCD, off-line.

190

8.3. Aproximacoes gulosas


Taxa de aproximac
ao?
PiC (x) d1.7OPT(x)e
PiCD (x) 1.5OPT(x) + 1
Prova. (Da segunda taxa de aproximac
ao.) Considere a particao A B C
D = {v1 , . . . , vn } com
A = {vi | vi > 2/3}
B = {vi | 2/3 vi > 1/2}
C = {vi | 1/2 vi > 1/3}
D = {vi | 1/3 vi }
PiCD primeiro vai abrir |A| containeres com os itens do tipo A e depois |B|
containeres com os itens do tipo B. Temos que analisar o que acontece com
os itens em C e D.
Supondo que um container contem somente itens do tipo D, os outros containeres tem espaco livre menos que 1/3, sen
ao seria possvel distribuir os itens
do tipo D para outros containeres. Portanto, nesse caso


V
B
3/2V + 1 3/2OPT(x) + 1.
2/3
Caso contr
ario (nenhum container contem somente itens tipo D), PiCD encontra a soluc
ao
otima. Isso pode ser justificado pelos seguintes observacoes:
1. O n
umero de containeres sem itens tipo D e o mesmo (eles sao os u
ltimos
distribudos em n
ao abrem um novo container). Logo e suficiente mostrar
PiCD (x \ D) = OP T (x \ D).
2. Os itens tipo A n
ao importam: Sem itens D, nenhum outro item cabe
junto com um item do tipo A. Logo:
PiCD (x \ D) = |A| + PiCD (x \ (A D)).
3. O melhor caso para os restantes itens s
ao pares de elementos em B e C:
Nesse situac
ao, PiCD acha a soluc
ao
otima.


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

8.4. Esquemas de aproximac


ao
Novas considerac
oes
Freq
uentemente uma r-aproximac
ao n
ao e suficiente. r = 2: 100% de
erro!
Existem aproximac
oes melhores? p.ex. para SAT? problema do mochila?
Desej
avel: Esquema de aproximac
ao em tempo polinomial (EATP);
polynomial time approximation scheme (PTAS)
Para cada entrada e taxa de aproximacao r:
Retorne r-aproximac
ao em tempo polinomial.
Um exemplo: Mochila m
axima (Knapsack)
Problema de mochila (veja p
agina 185):
Algoritmo MM-PD com programac
ao dinamica (pag. 108): tempo O(n
Desvantagem: Pseudo-polinomial.
Denotamos uma inst
ancia do problema do mochila com I = ({vi }, {ti }).
1 MMPTAS( I , r ) :=
2
vmax:= maxi {vi }
vmax
3
t := log r1
r
n
0
t
4
vi := bvi /2 c para i = 1, . . . , n
5
D e f i n e nova i n s t
a n c i a I 0 = ({vi0 }, {ti })
0
6
return MM PD( I )
Teorema 8.1
MM-PTAS e uma r-aproximac
ao em tempo O(rn3 /(r 1)).

192

vi ).

8.4. Esquemas de aproximacao


Prova. A complexidade da preparac
ao nas linhas 13 e O(n). A chamada
para MM-PD custa
 X 
 X

vi
0
O n
vi = O n
((r 1)/r)(vmax /n)
i
i




X
r
r
2
3
=O
n
vi /vmax = O
n .
r1
r1
i
Seja S = MM-PTAS(I) a soluc
ao obtida pelo algoritmo e S uma solucao
otima.
X
X 

MM-PTAS (I, S) =
vi
2t vi /2t
definicao de bc
iS

iS



2t vi /2t

otimalidade de MM-PD sobre vi0

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

e com 2t n/vmax (r 1)/r


OPT(I) rMM-PTAS (I, S).

Considerac
oes finais Um EATP frequentemente n
ao e suficiente para resolver um problema adequadamente. Por exemplo temos um EATP para
o problema do caixeiro viajante euclidiano com complexidade O(n3000/ )
(Arora, 1996);

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

Figura 9.1.: Grafo (esquerda) com circulacao (direita)

9.1. Fluxos em redes


Defini
c
ao 9.1
Para um grafo direcionado G = (V, E) (E V V ) escrevemos + (v) =
{(v, u) | (v, u) E} para os arcos saintes de v e (v) = {(u, v) | (u, v) E}
para os arcos entrantes em v.
Seja G = (V, E, c) um grafo direcionado e capacitado com capacidades c :
E R nos arcos. Uma atribuic
ao de fluxos aos arcos f : E R em G se
chama circulac
ao, se os fluxos respeitam os limites da capacidade (fe ce ) e
satisfazem a conservac
ao do fluxo
X
X
f (v) :=
fe
fe = 0
(9.1)
e + (v)

e (v)

(ver Fig. 9.1).


Lema 9.1
P
Qualquer atribuic
ao de fluxos f satisfaz vV f (v) = 0.
Prova.
X

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

9.1. Fluxos em redes


A circulac
ao vira um fluxo, se o grafo possui alguns vertices que sao fontes
ou destinos de fluxo, e portanto n
ao satisfazem a conservacao de fluxo. Um
fluxo st possui um u
nico fonte s e um u
nico destino t. Um objetivo comum
(transporte, etc.) e achar um fluxo st m
aximo.
ximo
Fluxo st ma
Inst
ancia Grafo direcionado G = (V, E, c) com capacidades c nos arcos,
um vertice origem s V e um vertice destino t V .
Soluc
ao Um fluxo f , com f (v) = 0, v V \ {s, t}.
Objetivo Maximizar o fluxo f (s).

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.

9.1.1. Algoritmo de Ford-Fulkerson


Nosso objetivo: Achar um algoritmo combinatorial mais eficiente. Ideia
b
asica: Comecar com um fluxo vi
avel fe = 0 e aumentar ele gradualmente.

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.

Problema no caso acima: para aumentar o fluxo e manter a conservacao do


fluxo num vertice interno v temos quatro possibilidades: (i) aumentar o fluxo
num arco entrante e sainte, (ii) aumentar o fluxo num arco entrante, e diminuir
num outro arco entrante, (iii) diminuir o fluxo num arco entrante e diminuir
num arco sainte e (iv) diminuir o fluxo num arco entrante e aumentar num
arco entrante (ver Fig. 9.3).
Isso e a motivac
ao para definir para um dado fluxo f o grafo residual Gf com
Vertices V
Arcos para frente (forward) E com capacidade ce fe , caso fe < ce .
Arcos para atras (backward) E 0 = {(v, u) | (u, v) E} com capacidade c(v,u) = f(u,v) , caso f(u,v) > 0.

200

9.1. Fluxos em redes

+
+

Figura 9.3.: Manter a conservac


ao do fluxo.
Observe que na Fig. 9.2 o grafo residual possui um caminho P = (s, w, u, t)
que aumenta o fluxo por 10. O algoritmo de Ford-Fulkerson [25] consiste em,
repetidamente, aumentar o fluxo num caminho st no grafo residual.

Algoritmo 9.1 (Ford-Fulkerson)


Entrada Grafo G = (V, E, c) com capacidades ce no arcos.
Sada Um fluxo f .
1 f o r a l l e E : fe := 0
2 while e x i s t e um caminho s t em Gf do
3
S e j a P um caminho s t s i m p l e s
4
Aumenta o f l u x o f um v a l o r g(f, P )
5 end while
6 return f

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

9.1. Fluxos em redes


Prova. Seja f um fluxo st. Temos
f (s) = f (X) = f (X,X) f (X, X) f (X,X) c(X,X).

Consequencia: O fluxo m
aximo e menor ou igual a o corte mnimo. De fato,
a relacao entre o fluxo m
aximo e o corte mnimo e mais forte:
Teorema 9.1 (Fluxo m
aximo corte mnimo)
O valor do fluxo m
aximo entre dois vertices s e t e igual a do corte mnimo.
Lema 9.8
Quando o algoritmo de Ford-Fulkerson termina, o valor do fluxo e maximo.
Prova. O algoritmo termina se n
ao existe um caminho entre s e t em Gf . Po tal que X e o conjunto de vertices alcancaveis
demos definir um corte (X, X),
Para um
em Gf a partir de s. Qual o valor do fluxo nos arcos entre X e X?
temos fe = ce , sen
arco e F (X, X)
ao Gf ter
a um arco forward e, uma
contradic
ao. Para um arco e = (u, v) F (X, X) temos fe = 0, senao Gf tera
um arco backward e0 = (v, u), uma contradic
ao. Logo
f (s) = f (X) = f (X,X) f (X, X) = f (X,X) = c(X,X).

Pelo lema 9.7, o valor de um fluxo arbitr


ario e menor ou igual que c(X, X),
portanto f e um fluxo m
aximo.

Prova. (Do teorema 9.1) Pela an
alise do algoritmo de Ford-Fulkerson.

Desvantagens do algoritmo de Ford-Fulkerson O algoritmo de Ford-Fulkerson
tem duas desvantagens:
1. O n
umero de iterac
oes C pode ser alto, e existem grafos em que C
iterac
oes s
ao necess
arias (veja Fig. 9.4). Alem disso, o algoritmo com
complexidade O((n + m)C) e somente pseudo-polinomial.
possvel que o algoritmo n
2. E
ao termina para capacidades reais (veja
Fig. 9.4). Usando uma busca por profundidade para achar caminhos st
ele termina, mas e ineficiente [17].
9.1.2. O algoritmo de Edmonds-Karp
O algoritmo de Edmonds-Karp elimina esses problemas. O princpio dele e
simples: Para achar um caminho st simples, usa busca por largura, i.e. selecione o caminho mais curto entre s e t. Nos temos (sem prova)

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

pela desigualdade triangular

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

9.1. Fluxos em redes


aumentou nessa iteracao. Em particular, vu foi parte de um caminho mnimo
de s para u. Para v = t isso e uma contradic
ao imediata. Caso v 6= t, temos
f (v) = f (u) 1
f 0 (u) 1

(*)

= (v) 2

porque uv est
a num caminho mnimo em Gf 0 ,

f0

novamente uma contradic


ao com a hip
otese que a distancia de v diminuiu.
Logo, o vertice v n
ao existe.

Prova. (do teorema 9.2)
Chama um arco num caminho que aumenta o fluxo com capacidade igual
ao gargalo crtico. Em cada iterac
ao existe ao menos um arco crtico que
disparece do grafo residual. Provaremos que cada arco pode ser crtico no
m
aximo n/2 1 vezes, que implica em no m
aximo m(n/2 1) = O(mn)
iteracoes.
No grafo Gf em que um arco uv E e crtico pela primeira vez temos f (u) =
f (v)1. O arco s
o aparece novamente no grafo residual caso alguma iteracao
diminui o fluxo em uv, i.e., aumenta o fluxo vu. Nessa iteracao, com fluxo f 0 ,
f 0 (v) = f 0 (u) 1. Em soma temos
f 0 (u) = f 0 (v) + 1
f (v) + 1

pelo lema 9.9

= 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

Tabela 9.1.: Complexidade para diversos algoritmos de fluxo maximo [60].

206

9.1. Fluxos em redes

Figura 9.5.: Reduc


oes entre variac
oes do problema do fluxo maximo. Esquerda: Fontes e destinos m
ultiplos. Direita: Limite inferior e
superior para a capacidade de arcos.

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

9.1. Fluxos em redes

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

Para G = (V, E, b, c) com limites inferi-

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

9.1. Fluxos em redes


s
19

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

Figura 9.6.: Exemplo da construc


ao para uma imagem 2 2. Direita: Tabela
com valores pele/n
ao-pele. Esquerda: Grafo com penalidade fixa
pij = 10.

Figura 9.7.: Segmentacao de imagens com diferentes penalidades p. Acima:


(a) Imagem original (b) Segmentac
ao somente com probabilidades (p = 0) (c) p = 1000 (d) p = 10000. Abaixo: (a) Walter
Gramatte, Selbstbildnis mit rotem Mond, 1926 (b) Segmentacao
com p = 5000. A probabilidade de um pixel representar pele foi
determinado conforme Jones e Rehg [39].

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|

Entrada Grafo direcionado G = (V, E) com capacidades c R+ e custos


|E|
r R+ nos arcos, um vertice origem s V , um vertice destino
t V , e valor v R+ .

212

9.1. Fluxos em redes

Soluc
ao Um fluxo s-t f com valor v.
P
Objetivo Minimizar o custo eE ce fe do fluxo.

Diferente do problema de menor fluxo, o valor do fluxo e fixo.

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 .

Um emparelhamento se chama perfeito se todo vertice possui vizinho em M .


Uma variac
ao comum do problema e
Emparelhamento perfeito de peso mnimo (EPPM)
Entrada Um grafo G = (V, E, c) n
ao-direcionado com pesos c : E Q
nas arestas.
Soluc
ao Um emparelhamento perfeito M E, i.e. um conjunto de arcos,
tal que para todos vertices v temos |N (v) M |= 1.

214

9.2. Emparelhamentos

Objetivo Minimiza o valor c(M ) de M .

Observe que os pesos em todos problemas podem ser negativos. O problema de


encontrar um emparelhamento de peso mnimo em G = (V, E, c) e equivalente
com EPM em G := (V, E, c) (por que?). Ate EPPM pode ser reduzido
para EPM.
Teorema 9.3
EPM e EPPM s
ao problemas equivalentes.
Prova. Seja G = (V, E, c) uma inst
ancia de EPM. Define um conjunto de
vertices V 0 que contem V e mais |V | novos vertices e um grafo completo
G0 = (V 0 , V 0 V 0 , c0 ) com
(
ce caso e E
0
ce =
.
0
caso contr
ario
Dado um emparelhamento M em G podemos definir um emparelhamento perfeito M 0 em G0 : M 0 inclui todas arestas em M . Alem disso, um vertice em
V n
ao emparelhado em M ser
a emparelhado com o novo vertice correspondente em V 0 com uma aresta de custo 0 em M 0 . Similarmente, os restantes
vertices n
ao emparelhados em V 0 s
ao emparelhados em M 0 com arestas de
custo 0 entre si. Pela construc
ao, o valor de M 0 e c0 (M 0 ) = c(M ). Dado
um emparelhamento M 0 em G0 podemos obter um emparelhamento M em G
com valor c(M 0 ) removendo as arestas que n
ao pertencem a G. Portanto,
um EPPM em G0 e um EPM em G.
Conversamente,
seja G = (V, E, c) uma inst
ancia de EPPM. Define C :=
P
1 + eE |ce |, novos pesos c0e = C ce e um grafo G0 = (V, E, c0 ). Para
emparelhamentos M1 e M2 arbitr
arios temos
X
X
X
c(M2 ) c(M1 )
ce
ce =
|ce | < C.
eE
ce >0

eE
ce <0

eE

Portanto, um emparelhamento de peso m


aximo em G0 tambem e um emparelhamento de cardinalidade m
axima: Para |M1 | < |M2 | temos
c0 (M1 ) = C|M1 ` c(M1 ) < C|M1 | + C c(M2 ) C|M2 | c(M2 ) = c0 (M2 ).
Se existe um emparelhamento perfeito no grafo original G, entao o EPM em
G0 e perfeito e as arestas do EPM em G0 definem um EPPM em G.


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

Figura 9.8.: Esquerda: Polgono ortogonal com vertices de reflexo (pontos) e


cordas (pontilhadas). Direita: grafo de interseccao.

Figura 9.9.: Reduc


ao do problema de emparelhamento maximo para o problema do fluxo m
aximo
Prova. Introduz dois vertices s, t, liga s para todos vertices em V1 , os vertices
em V1 com vertices em V2 e os vertices em V2 com t, com todos os pesos
unit
arios. Aplica o algoritmo de Ford-Fulkerson para obter um fluxo maximo.
O n
umero de aumentos e limitado por n, cada busca tem complexidade O(m),
portanto o algoritmo de Ford-Fulkerson termina em tempo O(mn).

Teorema 9.7
O valor do fluxo m
aximo e igual a cardinalidade de um emparelhamento
m
aximo.
Prova. Dado um emparelhamento m
aximo M = {v11 v21 , . . . , v1n v2n }, podemos construir um fluxo com arcos sv1i , v1i v2i e v2i t com valor |M |.
Dado um fluxo m
aximo, existe um fluxo integral equivalente (veja lema (9.3)).
Na construc
ao acima os arcos possuem fluxo 0 ou 1. Escolhe todos arcos entre

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.

Teorema 9.8 (Hopcroft e Karp [38])


Seja M um emparelhamento m
aximo e M um emparelhamento arbitrario. O
conjunto M M contem ao menos k = |M ` |M | caminhos M -aumentantes
disjuntos (de vertices). Um deles possui comprimento menor que |V |/k 1.
Prova. Considere os componentes de G em relacao aos arcos M := M
M . Cada vertice possui no m
aximo grau 2. Portanto, cada componente
e ou um vertice livre, ou um caminhos simples ou um ciclo. Os caminhos
e ciclos possuem alternadamente arcos de M e M . Portanto os ciclos tem
comprimento par. Os caminhos de comprimento impar sao ou M -aumentantes
ou M -aumentantes, mas o segundo caso e impossvel, porque M e maximo.
Agora
|M \ M |= |M ` |M M |= |M ` |M M | + k = |M \ M | + k
e portanto M M contem k arcos mais de M que de M . Isso mostra que
existem ao menos |M ` |M | caminhos M -aumentantes, porque somente os
caminhos de comprimento impar possuem exatamente um arco mais de M .
Ao menos um desses caminhos tem que ter um comprimento menor ou igual
que |V |/k 1, porque no caso contr
ario eles contem em total mais que |V |
vertices.

Corol
ario 9.1 (Berge [9])
Um emparelhamento e m
aximo sse n
ao existe um caminho M -aumentante.

219

9. Algoritmos em grafos
Rascunho de um algoritmo:

Algoritmo 9.2 (Emparelhamento m


aximo)
Entrada Grafo n
ao-direcionado G = (V, E).
Sada Um emparelhamento m
aximo M .
1 M =
2 while ( e x i s t e um caminho M aumentante P ) do
3
M := M P
4 end while
5 return M

Problema: como achar caminhos M -aumentantes de forma eficiente?


Observa
c
ao 9.6
Um caminho M -aumentante comeca num vertice livre em V1 e termina num
vertice livre em V2 . Ideia: Comeca uma busca por largura com todos vertices
livres em V1 . Segue alternadamente arcos livres em M para encontrar vizinhos
em V2 e arcos em M , para encontrar vizinhos em V1 . A busca para ao encontrar
um vertice livre em V2 ou ap
os de visitar todos vertices. Ela tem complexidade
O(m).

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

|M ` |M | n, porque no caso contr


ario eles possuem mais que n vertices
em total. Como o emparelhamento
cresce
ao menos um em cada fase, o algo
umero total de fases
ritmoexecutar no m
aximo mais n fases. Portanto, o n
e O( n).

O algoritmo de Hopcroft-Karp e o melhor algoritmo conhecido para encontrar
emparelhamentos m
aximos em grafos bipartidos nao-ponderados1 . Para subclasses de grafos bipartidos existem algoritmos melhores. Por exemplo, existe
um algoritmo randomizado para grafos bipartidos regulares com complexidade
de tempo esperado O(n log n) [30].
1 Feder

222

e Motwani [23, 24] melhoraram o algoritmo para O( nm(2 logn m)).

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,

porque o DAG se chama a


rvore h
ungara na literatura.

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.

O dual do problema 9.15 e a motivac


ao para
Defini
c
ao 9.3
Um rotulamento e uma atribuic
ao y : V R+ . Ele e vi
avel caso yu + yv
ce para todas arestas e = (u, v). (Um rotulamento viavel e c-cobertura por
vertices.) Uma aresta e apertada (ingl. tight) caso yu + yv = ce . O subgrafo
de arestas apertadas e Gy = (V, E 0 , c) com E 0 = {e E | e apertada em y}.
Pelo teorema forte de dualidade e o fato que a relaxacao linear dos sistemas
acima possui uma soluc
ao integral (ver observac
ao 9.3) temos
Teorema 9.11 (Egerv
ary [22]) .
Para um grafo bi-partido G = (S T, E, c) com pesos nao-negativos c : E
Q+ nas arestas, o maior peso de um emparelhamento perfeito e igual ao peso
da menor c-cobertura por vertices.
O m
etodo h
ungaro A aplicac
ao de um caminho
P = (v1 v2 . . . v2n+1 )
P M -aumentanteP
resulta num emparelhamento de peso c(M ) + i impar cvi vi+1 i par cvi vi+1 .
Isso motiva a definic
ao de uma
arvore h
ungara ponderada. Para um emparelhamento M , seja HM o grafo direcionado com as arestas e M orientadas
de T para S com peso le := we , e com as restantes arestas e E \ M orientadas de S para T com peso le := we . Com isso a aplicacao do caminho
M -aumentante
P produz um emparelhamento de peso c(M ) l(P ) em que
P
l(P ) = 1i2n lvi vi+1 e o comprimento do caminho P .
Com isso podemos modificar o algoritmo para emparelhamentos maximos para

Algoritmo 9.3 (Emparelhamento de peso m


aximo)
Entrada Grafo n
ao-direcionado ponderado G = (V, E, c).
Sada Um emparelhamento de maior peso c(M ).
1
2
3
4

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

Para ver que o algoritmo e correto, chama um emparelhamento M extremo


caso ele possui o maior peso entre todos emparelhamentos de tamanho |M |.
Teorema 9.12
Cada emparelhamento encontrado no algoritmo 9.3 e extremo.
Prova. Por induc
ao. Para M = o teorema e correto. Seja M um emparelhamento extremo, P o caminho aumentante encontrado pelo algoritmo 9.3
e N um emparelhamento de tamanho |M | + 1 arbitrario. Como |N | > |M |,
M N contem uma componente que e um caminho Q M -aumentante (por
um argumento similar com aquele da prova do teorema de Hopcroft-Karp 9.8).
Sabemos l(Q) l(P ) pela minimalidade de P . N Q e um emparelhamento
de cardinalidade |M |, logo c(N Q) c(M ). Com isso temos
w(N ) = w(N Q) l(Q) w(M ) l(P ) = w(M P ).

Proposi
c
ao 9.1
Caso n
ao existe caminho M -aumentante com comprimento negativo no algoritmo 9.3, M e m
aximo.

226

9.2. Emparelhamentos
v10

v9

v8

v7

v1

v2

v6

v3

v4

v10
v5

v9

v8

v7

v1

v2

v6

v3

v4

v5

Figura 9.10.: Grafo com emparelhamento e grafo auxiliar.

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)).

9.2.3. Emparelhamentos em grafos n


ao-bipartidos
O caso n
ao-ponderado Dado um grafo n
ao-direcionado G = (V, E) e um
emparelhamento M , podemos simplificar a
arvore h
ungara para um grafo
direcionado D = (V, A) com A = {(u, v) | x V : ux E, xv M }.
Qualquer passeio M -alternante entre dois vertices livres em G corresponde
com um caminho M -alternante em D.
O problema no caso n
ao-bipartido s
ao lacos impares. No caso bi-partido,
todo laco e par e pode ser eliminado sem consequencias: de fato o caminho
M -alternante mais curto n
ao possui laco. No caso n
ao bi-partido nao todo caminho no grafo auxiliar corresponde com um caminho M -alternante no grafo
original. O caminho v1 v3 v5 v7 v9 corresponde com o caminho M -alternante
v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 , mas o caminho v1 v8 c6 v5 v7 v9 que corresponde com o
passeio v1 v9 v8 v7 v6 v4 v5 v6 v7 v8 v0 v10 n
ao e um caminho M -alternante que aumento o emparelhamento. O problema e que o laco impar v6 v4 v5 v6 nao pode
ser eliminado sem consequencias.

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]

O(nm + n2 log n) [44, 54]


O(n3 ) [21] O(mn + n2 log n) [29]

Tabela 9.2.: Resumo emparelhamentos


9.2.4. Exerccios
Exerccio 9.1
possvel somar uma constante c R para todos custos de uma instancia do
E
EPM ou EPPM, mantendo a otimalidade da solucao?

228

10. Algoritmos de aproximac


ao
(As notas seguem Vazirani [67].)
Um algoritmo de aproximac
ao calcula uma soluc
ao aproximada para um problema de otimizac
ao. Diferente de uma heurstica, o algoritmo garante a
qualidade da aproximac
ao no pior caso. Dado um problema e um algoritmo de aproximac
ao A, escrevemos A(x) = y para a solucao aproximada
da inst
ancia x, (x, y) para o valor dessa soluc
ao, y para a solucao otimo e

OPT(x) = (x, y ) para o valor da soluc


ao
otima. Lembramos que uma aproximac
ao absoluta garante que D(x, y) = |OPT(x) (x, y)| D para uma
constante D e todo x, enquanto uma aproximac
ao relativa garante que o erro
relativo E(x, y) = D(x, y)/ max{OPT(x), (x, y)} E para uma constante E
e todos x.
Defini
c
ao 10.1
Uma reduc
ao preservando a aproximaca
o entre dois problemas de minimizacao
1 e 2 consiste em um par de func
oes f e g (computaveis em tempo polinomial) tal que para inst
ancia x1 de 1 , x2 := f (x1 ) e instancia de 2 com
OPT2 (x2 ) OPT1 (x1 )

(10.1)

e para uma soluc


ao y2 de 2 temos uma soluc
ao y1 := g(x1 , y2 ) de 1 com
1 (x1 , y1 ) 2 (x2 , y2 )

(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

10. Algoritmos de aproximac


ao

2
1

2
1

2
1

2
1

Figura 10.1.: Grafo com fecho metrico.


subgrafo conexo mnimo que inclui um dado conjunto de vertices necess
arios
R V (terminais). Esse subgrafo sempre e uma arvore (ex. 10.1). O conjunto
V \ R forma
P os vertices Steiner. Para um conjunto de arcos A, define o custo
c(A) = aA ca .
Observa
c
ao 10.1
ASM e NP-completo. Para um conjunto fixo de vertices Steiner V 0 V \
R, a melhor soluc
ao e a
arvore geradora mnima sobre R V 0 . Portanto a
dificuldade e a selec
ao dos vertices Steiner da solucao otima.

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

10.2. Aproximacoes para o PCV

2
1

2
Figura 10.2.: AGM sobre R e melhor soluc
ao.
Steiner.

: vertice em R,

: vertice

Prova. Considere a soluc


ao
otima S de ASM. Duplica todas arestas1 tal
que todo vertice possui grau par. Acha um caminho Euleriano nesse grafo.
Remove vertices duplicados nesse caminho. O custo do caminho C obtido
dessa forma n
ao e mais que o dobro do custo original: o grafo com todas
arestas custa 2c(S ) e a remoc
ao de vertices duplicados nao aumenta esse
custo, pela metricidade. Como esse caminho e uma arvore geradora, temos
c(A) c(C) 2c(S ) para AGM A.


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

transforma G num multigrafo.

231

10. Algoritmos de aproximac


ao
2. Duplica todas arestas de A.
3. Acha um caminho Euleriano nesse grafo.
4. Remove vertices duplicados.
Teorema 10.4
O algoritmo acima define uma 2-aproximac
ao.
Prova. A melhor soluc
ao do PCV menos uma aresta e uma arvore geradora de
G. Portanto c(A) OPT. A soluc
ao S obtida pelo algoritmo acima satisfaz
c(S) 2c(A) e portanto c(S) 2OPT, pelo mesmo argumento da prova do
teorema 10.2.

O fator 2 dessa aproximac
ao e resultado do passo 2 que duplica todas arestas
para garantir a existencia de um caminho Euleriano. Isso pode ser garantido
mais barato: A AGM A possui um n
umero par de vertices com grau impar
(ver exerccio 10.2), e portanto podemos calcular um emparelhamento perfeito
mnimo E entre esse vertices. O grafo com arestas A E possui somente
vertices com grau par e portanto podemos aplicar os restantes passos nesse
grafo.
Teorema 10.5
A algoritmo usando um emparelhamento perfeito mnimo no passo 2 e uma
3/2-aproximac
ao.
Prova. O valor do emparelhamento E n
ao e mais que OPT/2: remove vertices
n
ao emparelhados em E da soluc
ao
otima do PCV. O ciclo obtido dessa forma
e a uni
ao dois emparelhamentos perfeitos E1 e E2 formados pelas arestas pares
ou impares no ciclo. Com E1 o emparelhamento de menor custo, temos
c(E) c(E1 ) (c(E1 ) + c(E2 ))/2 = OPT/2
e portanto
c(S) = c(A) + c(E) OPT + OPT/2 = 3/2OPT.


10.3. Algoritmos de aproximac


ao para cortes
Seja G = (V, A, c) um grafo conectado com pesos c nas arestas. Lembramos
que. um corte C e um conjunto de arestas que separa o grafo em dois partes
S V \ S. Dado dois vertices s, t V , o problema de achar um corte mnimo
que separa s e t pode ser resolvido via fluxo maximo em tempo polinomial.
Generalizac
oes desse problema s
ao:

232

10.3. Algoritmos de aproximacao para cortes

Figura 10.3.: Identificac


ao de dois terminais e um corte no grafo reduzido.
Vertices em verde, terminais em azul. A grafo reduzido possui
m
ultiplas arestas entre vertices.
Corte m
ultiplo mnimo (CMM): Dado terminais s1 , . . . , sk determine o
menor corte C que separa todos terminas.
k-corte mnimo (k-CM): Mesmo problema, sem terminais definidos. (Observe que todos k componentes devem ser n
ao vazios).
Fato 10.1
CMM e NP-difcil para qualquer k 3. k-CM possui uma solucao polinomial
2
em tempo O(nk ) para qualquer k, mas e NP-difcil, caso k faz parte da
entrada.
Soluc
ao de CMM Chamamos um corte que separa um vertice dos outros
um corte isolante. Ideia: A uni
ao de cortes isolantes para todo si e um corte
m
ultiplo. Para calcular o corte isolante para um dado terminal si , identificamos os restantes terminais em um u
nico vertice S e calculamos um corte
mnimo entre si e S. (Na identificac
ao de vertices temos que remover selfloops, e somar os pesos de m
ultiplas arestas.)
Isso leva ao algoritmo

Algoritmo 10.1 (CI)


Entrada Grafo G = (V, A, c) e terminais s1 , . . . , sk .
Sada Um corte m
ultiplo que separa os si .
1. Para cada i [1, k]: Calcula o corte isolante Ci de si .

233

10. Algoritmos de aproximac


ao

Figura 10.4.: Corte m


ultiplo e decomposicao em cortes isolantes.

2. Remove o maior desses cortes e retorne a uniao dos restantes.

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

10.3. Algoritmos de aproximacao para cortes

Figura 10.5.: Exemplo de um grafo em que o algoritmo 10.1 retorne uma 2


2/k-aproximac
ao.

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

10. Algoritmos de aproximac


ao

Algoritmo 10.2 (KCM)


Entrada Grafo G = (V, A, c).
Saida Um k-corte.
1. Calcula uma AGH T em G.
2. Forma a uni
ao dos k 1 cortes mais leves definidos por k 1
arestas em T .

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 .

Removendo C de G gera componentes V1 , . . . , Vk : Define um grafo sobre esses


componentes identificando vertices de uma componente com arcos da AGH T
entre os componentes, e eventualmente removendo arcos ate obter uma nova
arvore T 0 . Seja Ck o corte de maior peso, e define Vk como raiz da arvore.

Desta forma, cada componente V1 , . . . , Vk1 possui uma aresta associada na


direc
ao da raiz. Para cada dessas arestas (u, v) temos
w(Ci ) w0 (u, v)
porque Ci isola o componente Vi do resto do grafo (particularmente separa u
e v), e w0 (u, v) e o peso do menor corte que separa u e v. Logo
X
X
X
w(C)
w0 (a)
w(Ci ) (11/k)
w(Ci ) = 2(11/k)w(C ).
aT 0

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

11. Do algoritmo ao problema


11.1. Introduc
ao
Motivac
ao
An
alise e projeto: Foca em algoritmos.
Teoria de complexidade: Foca em problemas.
Qual a complexidade intrnsica de problemas?
Classes de complexidade agrupam problemas.
Interesse particular: Relac
ao entre as classes.
Abstrac
oes: Alfabetos, linguagens
Seja um alfabeto finito de smbolos.
Codificac
ao: Entradas e sadas de um algoritmo sao palavras sobre o
alfabeto .
Tipos de problemas:
Problema construtivo: Func
ao Alternativa permitindo
v
arias soluc
oes: relac
ao R .
Problema de decis
ao: Func
ao {S, N } Equivalente: conjunto

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

11. Do algoritmo ao problema


Modelo de computac
ao: M
aquina de Turing

Foco: Estudar as limitac


oes da complexidade, nao os
algoritmos.
Portanto: Modelo que facilite o estudo teorica, nao a
implementac
ao.
Soluc
ao: M
aquina de Turing.
But I was completely convinced only by Turings paper.
(G
odel em uma carta para Kreisel, em maio
de 1968, falando sobre uma definica
o da computaca
o.).

Alan Mathison
Turing (*1912,
+1954)

Computing is normally done by writing certain symbols on paper.


We may suppose this paper is divided into squares like a childs
arithmetic book. In elementary arithmetic the two-dimensional
character of the paper is sometimes used. But such a use is
always avoidable, and I think that it will be agreed that the twodimensional character of paper is no essential of computation. I assume then that the computation is carried out on one-dimensional
paper, i.e. on a tape divided into squares. I shall also suppose that
the number of symbols which may be printed is finite. If we were
to allow an infinity of symbols, then there would be symbols differing to an arbitrarily small extent. The effect of this restriction of
the number of symbols is not very serious. It is always possible to
use sequences of symbols in the place of single symbols. Thus an
Arabic numeral such as 17 or 999999999999999 is normally treated
as a single symbol. Similarly in any European language words are
treated as single symbols (Chinese, however, attempts to have an
enumerable infinity of symbols). The differences from our point of
view between the single and compound symbols is that the compound symbols, if they are too lengthy, cannot be observed at one
glance. This is in accordance with experience. We cannot tell at
a glance whether 9999999999999999 and 999999999999999 are the
same. [66].

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

Regras : Q Q {L, R}, escritas da forma


q, a q 0 a0 D
(com q, q 0 Q, a, a0 e D {L, R}).

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

11. Do algoritmo ao problema


entrar no estado qa : a computac
ao termina e aceita, ou
entrar no estado qr : a computac
ao termina e rejeita.
Outra possibilidade: a computac
ao nao termina.
Exemplo 11.1 (Decidir wwR )

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})

Linguagem de uma MTD


O conjunto de palavras que uma MTD M aceita e a linguagem reconhecida de M .
L(M ) = {w | M aceita w}
Uma linguagem tal que existe um MTD M que reconhece ela e Turingreconhecvel por M .
L Turing-reconhecvel M : L = L(M )
Observe que uma MTD n
ao precisa parar sempre. Se uma MTD sempre
para, ela decide a sua linguagem.
Uma linguagem Turing-reconhecvel por uma MTD M que sempre para
e Turing-decidvel.
L Turing-decidvel M : L = L(M ) e M sempre para
Observa
c
ao 11.1
Para representar problemas sobre n
umeros inteiros, ou estruturas de dados
mais avancados como grafos, temo que codificar a entrada como palavara em
. Escrevemos hxi para codificac
ao do objeto x.

243

11. Do algoritmo ao problema


Linguagem de uma MTND
Conjunto de linguagens Turing-reconhecveis: linguagens recursivamente
enumer
aveis ou computavelmente enumer
aveis.
Conjunto de linguagens Turing-decidveis: linguagens recursivas ou comput
aveis.
Para uma m
aquina n
ao-determinstica temos que modificar a definicao:
ela precisa somente um estado que aceita e
ela reconhece a linguagem
L(M ) = {w | existe uma computacao tal que M aceita w}
ela decide uma linguagem se todas computacoes sempre param.
M
aquina de Turing n
ao-determinstica
Resposta sim, se existe uma computac
ao que responde sim.

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

11. Do algoritmo ao problema


Observa
c
ao 11.2
Uma modelo conveniente com k > 1 fitas e usar a primeira fita como fita de
entrada e permitir somente leitura; uma outra fita das k 1 restantes e usado
como fita da sada caso a MT calcula uma funcao.

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

11. Do algoritmo ao problema


Decibilidade versus complexidade
Qual e o poder computacional?
Surpreendentemente (?), v
arios problemas nao sao decidveis.
Exemplo: O Entscheidungsproblem de Hilbert, o problema de parada,
etc.
A equivalencia dos modelos significa que o modelo concreto nao importa?
Sim para computabilidade, n
ao para complexidade!
Exemplo de um modelo diferente: A m
aquina de RAM.
A m
aquina RAM
A m
aquina RAM (random access machine) e o modelo padrao para analise
de algoritmos. Ela possui
um processador com um ou mais registros, e com apontador de instruc
oes,
uma mem
oria infinita de n
umeros inteiros e
instruc
oes elementares (controle,transferencia inclusive enderecamento
indireto,aritmetica).
A m
aquina RAM
Existem RAMs com diferentes tipos de instrucoes aritmeticas
SRAM : somente sucessor
RAM : adic
ao e subtrac
ao
MRAM : multiplicac
ao e divis
ao
e com diferentes tipos de custos
Custo uniforme: cada operac
ao em O(1)
Custo logartmico: proporcional ao n
umero de bits dos operandos

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

12. Classes de complexidade


12.1. Definic
oes b
asicas
Complexidade pessimista
Recursos b
asicos: tempo e espaco.
A complexidade de tempo (pessimista) e uma funcao
t:NN
tal que t(n) e o n
umero m
aximo de passos para entradas de tamanho n.
A complexidade de espaco (pessimista) e uma funcao
s:NN
tal que s(n) e o n
umero m
aximo de posic
oes usadas para entradas de
tamanho n.
Uma MTND tem complexidades de tempo t(n) ou espaco s(n), se essas func
oes s
ao limites superiores para todas computacoes possveis de
tamanho n.
Func
oes construtveis
No que segue, consideraremos somente func
oes t e s que sao tempoconstrutveis e espaco-construtveis.
Defini
c
ao 12.1
Uma func
ao t(n) e tempo-construtvel caso existe uma MTD com complexidade de tempo t(n) que precisa t(n) passos para alguma entrada
de tamanho n. Uma func
ao s(n) e espaco-construtvel caso existe uma
MTD com complexidade de espaco s(n) que precisa s(n) posicoes para
alguma entrada de tamanho n.
Exemplos: nk , log n, 2n , n!, . . ..

251

12. Classes de complexidade


Observa
c
ao 12.1
A restric
ao para func
oes tempo- ou espaco-construtveis exclui funcoes naocomput
aveis ou difceis de computar e assim permite uma simulacao eficiente
por outras MT. Existem func
oes que n
ao s
ao espaco-construtveis; um exemplo
simples e uma func
ao que n
ao e comput
avel; um outro exemplo e dlog log ne.

Classes de complexidade fundamentais


Uma classe de complexidade e um conjunto de linguagens.
Classes fundamentais: Para t, s : N N e um problema L
L DTIME[t(n)] se existe uma m
aquina Turing determinstica tal
que aceita L com complexidade de tempo t(n).
L NTIME[t(n)] se existe uma m
aquina Turing nao-determinstica
que aceita L com complexidade de tempo t(n).
L DSPACE[s(n)] se existe uma maquina Turing determinstica
que aceita L com complexidade de espaco s(n).
L NSPACE[s(n)] se existe uma m
aquina Turing nao-determinstica
que aceita L com complexidade de espaco s(n).

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 ]

12.2. Hierarquias basicas


Prova. (Da observac
ao.) Como uma m
aquina n
ao-determinstica e uma extens
ao da uma m
aquina determinstica, temos obviamente DTIME[F (n)]
NTIME[F (n)] e DSPACE[F (n)] NSPACE[F (n)]. A inclusao NTIME[F (n)]
DSPACE[F (n)] segue, porque todas computac
oes que precisam menos que
F (n) passos, precisam menos que F (n) espaco tambem.

Classes de complexidade

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

12. Classes de complexidade


Hierarquia de tempo (1)
possvel que a decis
E
ao de todos problemas tem um limite superior (em
termos de tempo ou espaco)? N
ao.
Teorema 12.2
Para t(n) e s(n) total e recursivo, existe um linguagem L tal que L 6 DTIME[t(n)]
ou L 6 DSPACE[s(n)], respectivamente.
Prova. (Rascunho). Por diagonalizac
ao. As maquinas de Turing sao enumer
aveis: seja M1 , M2 , . . . uma enumerac
ao deles e seja x1 , x2 , . . . uma enumerac
ao das palavras em . Define
L = {xi | Mi na
o aceita xi em tempo t(|xi |)}.
Essa linguagem e decidvel: Uma MT primeiramento calcula t(|xi |) (que e
possvel porque t(n) e recursivo e total.). Depois com entrada xi , ela determina
i e a m
aquina Mi correspondente e simula Mi t(|xi |) passos. Se Mi aceita, ela
rejeita, sen
ao ela aceita.
Essa linguagem n
ao pertence a DTIME[t(n)]. Prova por contradicao: Seja
L = L(Mi ). Ent
ao xi L? Caso sim, Mi n
ao aceita em tempo t(|xi |), uma
contradic
ao. Caso n
ao, Mi n
ao aceita em tempo t(|xi |), e portanto xi L,
outra contradic
ao.

Hierarquia de tempo (2)
Alem disso, as hierarquias de tempo s
ao razoavelmente densos:
Teorema 12.3 (Hartmanis,Stearns, 1965)
Para f, g com g tempo-construtvel e f log f = o(g) temos
DTIME(f ) ( DTIME(g).
Para func
oes f, g, com g(n) log2 n espaco-construtvel e f = o(g) temos
DSPACE(f ) ( DSPACE(g).
Prova. (Rascunho.) Para provar o segundo parte (que e mais facil) temos que
mostrar que existe uma linguagem L tal que L DSPACE[g] mas L 6
DSPACE[f ]. Vamos construir uma MT M sobre alfabeto de entrada = {0, 1}
tal que L(M ) satisfaz essas caracterstica. A ideia basica e diagonalizacao:
com entrada w simula a m
aquina Mw sobre w e garante nunca reconhecer a
mesma linguagem que Mw caso ela e limitada por f .
Para realizer essa ideia:

254

12.2. Hierarquias basicas


1. Temos que garantir que M precisa n
ao mais que g(n) espaco. Portanto,
M comeca de marcar g(|w|) espaco no comeco (isso e possvel porque g
e espaco-construtvel). Caso a simulac
ao ultrapassa o espaco marcado,
M rejeita.

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

12. Classes de complexidade

Teorema 12.4 (Savitch)


Para cada func
ao espaco-construtvel s(n) log2 n
2

NSPACE[s(n)] DSPACE[s(n) ]
Corol
ario: DSPACE = NSPACE
N
ao-determinismo ajuda pouco para espaco!
Walter
J. Savitch
(*1943)

Prova. (Rascunho.) Caso L NSPACE[s(n)] o tempo e limitado por um cs(n) .


A construc
ao do Savitch procura deterministicamente uma transicao do estado
inicial para um estado final com menos que cs(n) passos. A abordagem e por
divis
ao e conquista: Para saber se existe uma transicao A B com menos
de 2i passos, vamos determinar se existem transicoes A I e I B que
passam por um estado intermedi
ario I, cada um com 2i1 passos. Testando
isso todas configurac
oes I que precisam espaco menos que s(n). A altura
da
arvore de busca resultante e O(s(n)) e o espaco necessario em cada nvel
2
tambem e O(s(n)), resultando em O(s(n) ) espaco total.

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.


Espaco polinomial (2)

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

13. Teoria de NP-completude


13.1. Caracterizac
oes e problemas em NP
A hierarquia de Chomsky classifica linguagens em termos de automatos e
gram
aticas que aceitam ou produzem elas:
Linguagem
Regular

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)

O seguinte teorema relaciona a hierarquia de Chomsky com as classes de


complexidade (sem prova, referencias em [13], [7, Th. 25.6] e [61, Th. 7.16]).
Teorema 13.1 (Complexidade das linguagens da hierarquia de Chomsky)
REG = DSPACE[O(1)] = DSPACE[o(log log n)]
REG DTIME[n]
CFL DSPACE[n3 ]
CSL = NSPACE[n]
Normalmente, nosso interesse s
ao soluc
oes, n
ao decisoes: Ao seguir vamos
definir P e NP em termos de soluc
oes. As perguntas centrais como P 6= NP
acabam de ter respostas equivalentes.
P e NP em termos de busca
A computac
ao de uma soluc
ao pode ser vista como funcao
Exemplo: Problema SAT construtivo: Uma solucao e uma atribuicao.
Definic
ao alternativa: Uma computac
ao e uma relacao R .
Vantagem: Permite mais que uma soluc
ao para cada entrada.

259

13. Teoria de NP-completude


Intuic
ao: Uma relac
ao e a especificac
ao de um problema de busca: para
entrada x queremos achar alguma solucao y tal que (x, y) R.
Nosso interesse s
ao soluc
oes que podem ser escritas em tempo polinomial:
Defini
c
ao 13.1
Uma relac
ao bin
aria R e polinomialmente limitada se
p poly : (x, y) R : |y| p(|x|)

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

13. Teoria de NP-completude


C--difcil, se L0 L para todos L0 C. Um problema L que e C--difcil e
completo, se L C.
Motivo: Estudar a complexidade relativa de problemas; achar problemas
difceis para separar classes.
Do interesse particular: A separac
ao de P e NP. Denotamos a classe de
problemas N P -completos NPC.

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

BHALT = {hM, w, 1n i | MT M para com entrada w em n passos}


e NP-completo.

Prova. BHALT NP porque podemos verificar uma execucao em n passos em


tempo polinomial. Observe que a codificac
ao de uma execucao em limitada
polinomialmente em termos da entrada hM, w, 1n i pela codificacao de n em
un
ario. Logo e suficiente de mostrar que qualquer problema em NP pode ser
reduzido para BHALT.
Para alguma linguagem L NP, seja M uma MTND com L = L(M ) que
aceita L em tempo nk . Podemos reduzir uma entrada w L em tempo
k
polinomial para w0 = hM, w, 1n i, temos w L w0 BHALT. Logo
L P BHALT.


Ladrilhar: Exemplo

Ladrilhar: Soluc
ao

263

13. Teoria de NP-completude

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)?

Teorema 13.4 (Levin)


Ladrilhamento e NP-completo.
Prova. O problema e em NP, porque dado um conjunto de tipos de ladrilhos e um ladrilhamento, podemos verificar as restricoes das cores em tempo
polinomial.
Vamos reduzir qualquer problema em L NP para Ladrilhamento. Seja
L = L(M ) para alguma MTND e seja k tal que M precisa tempo nk . Para
entrada w, vamos construir uma inst
ancia de Ladrilhamento do tamanho
(|w|k )2 . Ideia: os cores dos cantos de sul e de norte vao codificar um smbolo
da fita a informac
ao se a cabeca est
a presente e o estado da maquina. Os
cores dos cantos oeste e este v
ao codificar informac
ao adicional para mover a
cabeca. O canto sul da grade v
ao ser colorido conforme o estado inicial da
m
aquina, o canto norte com o estado final e vamos projetor as ladrilhas de tal
forma que ladrilhar uma linha (de sul para o norte) e somente possvel, se as
cores no sul e norte representam configurac
oes sucessores.
Nos vamos usar as cores Q {} na direc
ao norte/sul e Q {L, R} {}
na direc
ao oeste/este. Para uma regra q, a q 0 , a0 , L os ladrilhos tem a forma
(, a0 )
(q 0 , L)

(q, a)

e para q, a q 0 , a0 , R
(, a0 )
(q 0 , R)

(q, a)
Alem disso, tem ladrilhos

265

13. Teoria de NP-completude


(q, a)

(q, a)

(, a)

(q, L)

(, a)
(, a)
(, a)
As cores no sul da grade representam a configuracao inicial
(q, R)

(q0 , a1 )(, a2 ) (, an )(, ) (, )


as cores no norte a configurac
ao final (supondo que a maquina limpa a fita
depois, que sempre e possvel)
(qa , )(, ) (, )
e as cores dos lados oeste e este todos s
ao . Pela construcao uma computac
ao da MT que aceita corresponde com um ladrilhamento e vice versa.
A construc
ao do grade e das tipos de ladrilhos pode ser computado por uma
m
aquina de Turing em tempo polinomial.

Resultado intermedi
ario
Primeiros problemas em NPC: Para uma separacao e so provar que
Ladrilhamento 6 P ou BHALT 6 P.
Infelizmente: a prova e difcil, mesmo que a maioria das pesquisadores
acredita P 6= NP.
Outro valor: Para provar que um problema L NPC, e suficiente de
mostrar que, por exemplo
Ladrilhamento P L.
Proposi
c
ao 13.3
Se A B e A e fechado para baixo em relac
ao a` reducao e L e B--completo
ent
ao
L A A = B.
Exemplo: O problema SAT
SAT
Inst
ancia F
ormula proposicional
(x1 , . . . , xn ).

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

13. Teoria de NP-completude


Sejam cx,y as cores na bordas. Seja a conjuncao de
^

Lc,x,y

Toda posicao tem um ladrilho

Sx,1,cx,1 Nx,n,cx,n

Cores corretas nas bordas N,S

W1,y,c1,y En,y,cn,y

Cores corretas nas bordas W,E

x[1,n] y[1,n] c[1,k]

^
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.

I have heard it said, with a straight face, that a proof of P = NP


would be important because it would airlines schedule their flight
better, or shipping companies pack more boxes in their trucks! [1]
Mais um problema NP-completo
ncia
Minesweeper consiste
Inst
ancia Uma matriz de tamanho b b cada campo ou livre, ou com um
n
umero ou escondido.

269

13. Teoria de NP-completude

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

Woegingers pagina sobre P vs. NP


270

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 ate PSPACE


A classe co-NP
NP: Resposta sim, se existe uma computac
ao que responde sim.

Ou: Dado um certificado, verific


avel em tempo polinomial.
co-NP: Resposta sim, se todas as computac
oes respondem sim

Ou: Dado um falsificado, falsific


avel em tempo polinomial.

O mundo da complexidade ao redor do P

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

14.1. De P ate PSPACE


Para provar a completude, temos que mostrar que toda linguagem L PSPACE
pode ser reduzido para QBF. Assume que existe uma MT que reconhece
L = L(M ) em espaco nk e seja w L. A ideia principal e construir uma
formula q,s,t que e verdadeira caso existe uma transicao do estado q para
s em no m
aximo t passos. Com isso podemos testar q0 ,qf ,2cf (n) com 2cf (n)
sendo o n
umero m
aximo de estados para entradas de tamanho n.
Um estado pode ser codificado por um string de |w|k bits. Para q,r,1 podemos
usar basicamente a mesma f
ormula do teorema de Cook. Para t > 1 a formula
q,s,t = r(q,r,t/2 r,s,t/2 )
e verdadeiro caso existe uma transic
ao com estado intermediario r. Essa
formula infelizmente tem t smbolos (que e demais para 2cf (n) ), mas a formula
q,s,t = r(a, b) {(q, r), (r, s)}(a,b,t/2 )
evite a ocorrencia dupla de a tem comprimento polinomial.

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

Classe das linguagens reconhecidas por um maquina de Turing com alternac


oes sem limite: APTIME
As m
aquinas correspondentes s
ao m
aquinas de Turing com alternaca
o
com tempo t(n): ATIME[t(n)].
Teorema 14.2 (Chandra, Kozen, Stockmeyer)
Para t(n) n
[
2
ATIME[t(n)] DSPACE[t(n)]
ATIME[ct(n) ].
c>0

Corol
ario 14.1
ATIME = PSPACE
Esta caracterizac
ao facilita entender por que QBF e PSPACE-completo

278

14.1. De P ate PSPACE


A hierarquia polinomial

Mais exemplos da classe PSPACE


Observac
ao: Uma quest
ao com alternac
ao e tpica para resolver jogos.
Ganhar um jogo em um passo: Existe um passo tal que possa ganhar?
Ganhar um jogo em dois passos: Existe um passo, tal que para todos
os passos do advers
ario, existe um passo tal que possa ganhar?
Ganhar um jogo:
p1 p2 p3 p4 p2k+1 :
p1 , p2 , p3 , . . . , p2k+1e uma sequencia de passos para ganhar.
Portanto, v
arios jogos s
ao PSPACE-completos: Generalized Hex, generalized Geography, . . .
Mais exemplos da classe PSPACE (2)
Jogo de geografia para dois jogadores.
Em alternac
ao cada jogador diz o nome de um pas. Cada nome
tem que comecar com a u
ltima letra do nome anterior. O primeiro
jogador que n
ao e capaz de dizer um novo pas, perde.

Peru...

279

14. Fora do NP
Mais exemplos da classe PSPACE (3)

Geografia generalizada (ingl. Generalized geography)


Inst
ancia Um grafo G = (V, E) e um n
o v0 V
Decis
ao Jogando geografiacom este grafo, o primeiro jogador pode ganhar com certeza?

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

14.2. De PSPACE ate ELEMENTAR


Agora, consideramos os seguintes classes
EXP = DTIME[2n

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:

Xadrez generalizada (ingl. Generalized chess)


Inst
ancia Uma configurac
ao de xadrez com tabuleiro de tamanho n n.
Decis
ao Branco pode forcar o ganho?

Problemas ainda mais intrat


aveis
As classes k EXP, k NEXP e k EXPSPACE tem k nveis de exponenciac
ao!
2k

Por exemplo, considere a torre de dois de altura tres: 22


0
4

1
16

2
65536

3
1.16 1077

4
2 1019728

Problemas desse tipo s


ao bem intrat
aveis
ELEMENTAR =

k EXP

k0

Mas tem ainda problemas decidveis fora desta classe!

281

14. Fora do NP
O mundo at
e ELEMENTAR

Um corte final: Express


oes regulares
Uma express
ao regular e
0 ou 1 (denota o conjunto L(0) = {0} e L(1) = {1}).
e f , se e um operador, e e, f s
ao expressoes regulares.
Operadores possveis: , , 2 , , .
Decis
ao: Dadas as express
oes regulares e, f , L(e) 6= L(f )?
Express
oes regulares com
,
, ,
, ,2
, ,2 ,
, ,

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

15. Complexidade de circuitos


(As notas seguem Arora/Barak.)
Um modelo alternativo de computac
ao s
ao circuitos booleanos. Circuitos tem
a vantagem de ser matem
aticamente mais simples que maquinas de Turing:
o modelo de execuc
ao e a propagac
ao dos valores de entrada na direcao
da sada, e nenhum elemento do circuito e alterado. Isso fez pesquisadores
esperar que encontrar limitantes inferiores para complexidade de circuitos e
mais simples. (Uma esperanca que n
ao se realizou ate hoje.)
Defini
c
ao 15.1 (Circuito booleano)
Para cada n N um circuito com n entradas e uma sada e um grafo direcionado acclico C = (V, E). O grau de entrada de um vertice se chama o seu
fan-in, o grau de sada o fan-out. O grafo possui n fontes (vertices com fan-in
0) e um destino (com fan-out 0). Os restantes vertices sao as portas l
ogicas
rotulados com land, ou . Os vertices rotulados com ou possuem fanin 2 e os vertices rotulados com fan-in 1. O tamanho |C| de C e igual ao
n
umero de vertices de C.
Para um circuito C e entrada x {0, 1}n a sada correspondente e definida
por C(x) = v(d), com d o vertice destino e v(d) e definido recursivamente por

v(e1 ) v(e2 ) caso d e rotulado com e (e1 , d), (e2 , d) E

v(e ) v(e ) caso d e rotulado com e (e , d), (e , d) E


1
2
1
2
v(d) =

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

15. Complexidade de circuitos

x1

x2

x3

x4

Para estudar a complexidade assint


otica, um u
nico circuito nao e suficiente,
porque o n
umero de entradas e fixo: temos que estudar famlias de circuitos.
Defini
c
ao 15.2
Para uma func
ao t : N N, uma famlia de circuitos de tamanho t(n) e uma
sequencia {Cn }nN de circuitos booleanos. O circuito Cn tem n entradas e
uma sada e tamanho |Cn | t(n). Uma linguagem L pertence `a classe de
complexidade SIZE(t(n)) caso existe um famlia de circuitos de tamanho t(n)
{Cn }nN tal que para todo x {0, 1} temos x L sse C|x| (x) = 1.
Proposi
c
ao 15.1
Cada func
ao f : {0, 1}n {0, 1} pode ser calculada por um circuito de
tamanho O(n2n ).
Prova. Para toda atribuic
ao a {0, 1}n existe uma cla
usula (maxterm)
Ca tal que Ca (a) = 0 e Ca (a0 ) = 1 para toda atribuicao a0 6= a. Podemos
construir uma f
ormula em forma normal conjuntivo que e a conjuncao de
todas cla
usulas Ca para a {0, 1}n tal que f (a) = 0:
^
(x) =
Ca (x)
a:f (a)=0

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

Portanto, a classe SIZE(2n2n ) contem todas func


oes booleanas computaveis.
Para o estudo de complexidade essa classe e poderoso demais. Ela contem
ate func
oes n
ao comput
aveis como o problema de parada (por que?). Isso e o
motivo para investigar quais func
oes booleanas s
ao computaveis com menos
portas l
ogicas.
Defini
c
ao 15.3 (Circuitos com um n
umero polinomial de portas)
A classe de complexidade P/poly contem todas linguagens decidveis por familias de circuitos de tamanho polinomial, i.e.,
[
P/poly =
SIZE(nk )
k>0

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

Para terminar a construc


ao do circuito, temos que definir as entradas de acordo
com o estado inicial da m
aquina, e definir uma sada do circuito. Isso e possvel
usando uma MTD modificada M 0 que antes de aceitar posiciona a cabeca na
primeira celula da fita e escreve o smbolo 0 nessa posicao. Com isso a sada
do circuito e st(n),1,(0,qa ) .
O n
umero de portas l
ogicas necess
arias para implementar o circuito e no
m
aximo k(k 3 1 + 2k 3 ) = O(k 4 ) por celula, e portanto O(t(n)2 ).


287

15. Complexidade de circuitos


Corol
ario 15.1
P P/poly
Prova. Caso L P, L DTIME(nk ) para algum k N. Pelo lema 15.1
temos L SIZE(O(n2k )) e portanto L P/poly.

Existe uma separac
ao entre P e P/poly? Sim.
Proposi
c
ao 15.2
Cada linguagem L {0, 1} un
aria (L {1} ) pertence a P/poly.
V
Prova. Para 1n L escolhe i xi , sen
ao o circuito constante 0.

Uma linguagem que n


ao pertence a P mas a P/poly e a versao unaria do
problema de parada
UHALT = {1n |a representac
ao bin
aria de n representa uma par hM, xi
tal que M (x) para}.
O u
ltimo resultado mostre que P/poly e ainda uma classe poderosa, que
contem linguagens indecidveis. O problema com a definicao da classe e que
ela sup
oe somente a existencia de uma famlia de circuitos que resolve o problema para cada tamanho de entrada n. Os circuitos para cada n podem
ser bem diferentes: de fato pode ser difcil atualmente construir os circuitos
para um dado n. Por isso, uma ideia e s
o permitir as familias de circuitos
construtveis:
Defini
c
ao 15.4 (Circuitos P-uniformes)
Uma famlia {Cn } de circuitos e P-uniforme caso existe um MTD M que em
tempo polinomial calcula uma descric
ao de Cn para entrada 1n .
Porem, com esse restric
ao o poder da classe disparece:
Teorema 15.1
Uma linguagem L e decidvel por uma famlia P-uniforme de circuitos sse
L P.
Prova. (Rascunho.) Caso L e decidvel por uma famlia P-uniforme de circuitos podemos construir uma MTD que para entrada w primeira calcula C|w|
em tempo polinomial e depois avalia C|w| (w).
Para provar a outra direc
ao podemos usar a construcao do lema 15.1 observando que a construc
ao e possvel em tempo polinomial em n.


288

M
aquinas de Turing com conselho
e como MT com conselho.

Uma caracterizacao alternativa de P/poly

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

15. Complexidade de circuitos


Teorema 15.3
P
Seja (x1 , . . . , xn ) = 1in xi mod 2 a funcao de paridade. 6 AC0 .
Prova. Seja C algum circuito em AC0 . Podemos supor a seguinte forma
normal:
C tem fan-out 1: caso contr
ario podemos introduzir copias de subcircuitos, mantendo um tamanho polinomial e a mesma profundidade (constante).
C tem todas negac
oes nas entradas ou equivalente temos 2n entradas
xi , xi , 1 i n.
Os nveis de C alternadamente s
ao conjuncoes e disjuncoes: como a
fan-in e ilimitado d
a para juntar cascatas de operacoes do mesmo tipo.
Ou
ltimo nvel s
ao conjunc
oes com fan-in 1.
Sejam nb o tamanho e d a profundidade desse circuito. A ideia da prova e:
(i) converter os u
ltimos dois nveis em FNC para FND ou em FND para FNC
(ii) juntar dois nveis com a mesma operac
ao aumentando o fan-in do circuito
e diminuindo a profundidade por um (iii) repetir passos (i) e (ii) d 2 vezes,
(iv) aplicar o lema 15.6 d 2 para argumentar que isso com alta probabilidade
e possvel (v) argumentar que o circuito restrito resultante nao pode obtido
por alguma restric
ao da func
ao da paridade.
A i-gesima restric
ao vai resultar num circuito de tamanho
ni com fan-in ki no

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)

Prova. Seja ak + bk = maxi ai + bi . Logo




max ai + bi = ak + bk max ai + bi max ai + max bi .
i


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.1. Funcoes comuns


Proposi
c
ao A.3 (Regras para pisos e tetos)
Pisos e tetos satisfazem
x dxe < x + 1

(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

Temos a seguinte aproximac


ao do fatorial (f
ormula de Stirling)
 n n

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!

que combinado ficam


(n/e)n n! nn .
Revis
ao: Logaritmos

loga 1 = 0
loga n

=n

(A.12)
por definic
ao

(A.13)

loga nm) = loga n + loga m

propriedade do produto

(A.14)

loga n/m = loga n loga m

propriedade da divisao

(A.15)

loga nm = m loga n

propriedade da potencia

(A.16)

loga n = (logb n)(loga b)


logc n
loga n =
logc a
1
logb a =
loga b

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


Uma analise detalhada rende


Proposi
c
ao A.5
Hn = ln n + + n1 /2 + O(n2 )
com 0.5772156649 a constante de Euler-Mascheroni.
Defini
c
ao A.5
O logaritmo iterado e
(
log n =

0
1 + log (log n)

se n 1
caso contrario

O logaritmo iterado e uma func


ao que cresce extremamente lento; para valores
pr
aticos de n, log n n
ao ultrapassa 5.

296

A.1. Funcoes comuns

0
0

10

Figura A.1.: Cota inferior e superior dos n


umeros harmonicos.
Defini
c
ao A.6
Uma func
ao f e convexa se ela satisfaz a desigualdade de Jensen
f (x + (1 )y) f (x) + (1 )f (y).

(A.21)

Similarmente uma func


ao f e concava caso f e convexo, i.e., ela satisfaz
f (x + (1 )y) f (x) + (1 )f (y).

(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)

Prova. Provaremos somente o caso convexo por inducao, o caso concavo


sendo similar. Para n = 1 a desigualdade e trivial, para n = 2 ela e valida por

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

No exemplo da regra acima, temos C = [0, n] e (i) = p i e logo


X
X
X
api =
ap(ip) =
ai .
0in

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.

Algoritmo A.1 (CopiaMTI)


Entrada Matrizes quadr
aticos A e B e dimens
ao n.
Sada Matriz A com a matriz triangular inferior copiada de B.
1 f o r i := 1 t o n do
2
f o r j := 1 t o i do
3
Aij = Bij
4
end f o r
5 end f o r

Uma an
alise simples deste algoritmo seria:
n X
i
X
i=1 j=1

1=

n
X

i = n(n + 1)/2 = O(n2 )

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)

serie geometrica, para x 6= 1

(A.32)

299

A. Conceitos matem
aticos
se |x| < 1 ent
ao

X
k=0

xk =

1
1x

serie geometrica infinitamente decrescente

(A.33)

Serie geometrica com limites arbitr


arios:

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

Mais geral para alguma sequencia fi temos


X

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

e com x = 1/2 temos


X
i2i = 2(2(21 2n1 )n2n1 ) = 2((12n )n2n1 ) = 22n (n+2)
1in

(A.39)
Em particular
(
f (n) =

X
1in

ix =

(nxn ) caso x > 1


(1)
caso x < 1

(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).

Demonstre a propriedade dos expoentes.


Encontre uma f
ormula alternativa para
n
X

2i 1

i=1

e prove seu resultado via induc


ao matematica.
Use inducao matem
atica para provar que
n1
X

qi =

i=0

qn 1
.
q1

Resolva os exerccios do captulo 1.

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)

A.5. Probabilidade discreta


Lema A.1 (Defini
c
ao alternativa do limite)
possvel substituir < com na definic
E
ao do limite.
lim f (n) = c  > 0 n0 n > n0 |f (n) c| 

Prova. e obvio. Para , escolhe 0 = /2 < .

A.5. Probabilidade discreta


Probabilidade: Noc
oes b
asicas
Espaco amostral finito de eventos elementares e .
Distribuic
ao de probabilidade Pr[e] tal que
X
Pr[e] 0;
Pr[e] = 1
e

Eventos (compostos) E com probabilidade


X
Pr[E] =
Pr[e]
eE

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)

Pr[e]Y (e)) = E[X] + E[Y ]


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

Pr[Y = i]i = Pr[Y = 1] = 1/2E[X + Y ]

= 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

Isso implica, que para o mesmo n0 , n > n0 f < cg e logo f O(g).


Prova de 1.7:
: Seja f o(g), i.e. para todo c > 0 temos um n0 tal que n > n0 f cg.
Logo n > n0 f (n)/g(n) c, que justifique limn f (n)/g(n) = 0 (veja
lema A.1).
: Seja limn f (n)/g(n) = 0, i.e. para todo c > 0 existe um n0 tal que
n > n0 f (n)/g(n) < c pela definic
ao do limite. Logo n > n0 f cg, tal que
f o(g).
Prova de 1.8:
: Seja f (g). Como i(n) = inf mn f (m)/g(m) e nao-decrescente, e
suficiente mostrar, que existe um n tal que i(n) > 0. Pela definicao de
existem c > 0 e n0 tal que n > n0 f cg. Logo n > n0 f (n)/g(n) c > 0,
i.e. i(n0 + 1) > 0.
: Suponha lim inf n f (n)/g(n) = l > 0. Vamos considerar os casos
l < e l = separadamente.
Caso l < : Escolhe, por exemplo, c = l/2. Pela definicao do limite existe n0
tal que n > n0 |l f /g| l/2. Logo f l/2g (f /g aproxima l por baixo) e
f (g).
Caso l = , i(n) n
ao tem limite superior, i.e. (c > 0)n0 i(n0 ) > c. Como
i(n) e n
ao-decrescente isso implica (c > 0)n0 (n > n0 ) i(n) > c. Portanto
n > n0 f > cg e f (g) (g).

307

B. Soluc
oes dos exerccios
Prova de 1.9:
f (g)

(c > 0)n0 (n > n0 ) : f cg

(c > 0)n0 (n > n0 ) : f (n)/g(n) c

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!

que mostra que essa prova n


ao funciona.
Solu
c
ao do exerccio 1.10.
E simples ver que f o(g) implica f o(g). Para mostrar a outra direcao
suponha que f o(g). Temos que mostrar que c > 0 : n0 tal que f < cg.
Escolhe um c. Como f o(g) sabemos que existe um n0 tal que f c/2g para
n > n0 . Se g 6= 0 para n > n00 ent
ao c/2g < g tambem. Logo f c/2g < cg
para n > max(n0 , n00 ).
Solu
c
ao do exerccio 1.11.
Primeira verifique-se que satisfaz + 1 = 2 .
Prova que fn O(n ) com induc
ao que fn cn . Base: f0 = 0 c e
f1 = 1 c para c 1/ 0.62. Passo:
fn = fn1 + fn2 cn1 + cn2 = (c + c)n2 cn
caso c + c c2 .
Prova que fn (n ) com induc
ao que fn cn . Base: Vamos escolher
n0 = 1. f1 = 1 c e f2 = 1 c2 caso c 2 0.38. Passo:
fn = fn1 + fn2 cn1 + cn2 = (c + c)n2 cn
caso c + c c2 .
Solu
c
ao do exerccio [64, p. 2.3].
1. 3n + 7 5n + 2 5 2n 2.5 n (equacao linear)

2. 5n + 7 3n2 + 1 0 3n2 5n 6 5/6 + 97/6 n (equacao


quadr
atica)
3. 5 log2 n + 7 5n + 1 75 + 27 2 25n 16933 25n
2.809 . . . n
4. Veja item (b)
5. 52n + 3 3n2 + 5n n 2n (3n2 + 5n 3)/5 2n n2 .

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

(para constantes c1 , c2 , d1 , d2 .) Logo


d1 f q g f d2 f q
d1 (c1 np )q g d2 (c2 np )q
f1 cq1 np+q g d2 cq2 np+q
g (np+q )

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

O algoritmo tem complexidade pessimista cp = O(n) + O(2n nc) = O(n2n ).


Solu
c
ao do exerccio 2.5.
Para um dado n temos sempre n bn/2c atualizac
oes. Logo, o n
umero medio
de atualizac
oes e a mesma.
Solu
c
ao do exerccio 2.6.
Seja A, A1 , . . . , An as vari
aveis aleat
orias que denotam o n
umero total de
atualizac
oes, e o n
umero de atualizac
oes devido a posicao i, respectivamente.
Com a distribuic
ao uniforme temos E[Ai ] = 1/6 e pela linearidade
 X

E[A] = E
Ai = n/6.
1in

Com o mesmo argumento a segunda distribuic


ao leva a E[Ai ] = 1/10 e E[A] =
n/10 finalmente.
Solu
c
ao do exerccio 2.7.
P
Cada chave em nvel i [1, k] precisa i comparac
oes e a arvore tem 1ik 2i1 =
2k 1 n
os e folhas em total. Para o n
umero de comparacoes C temos
E[C] =

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:

Algoritmo B.1 (Subsequ


encia)
Entrada Sequencia S 0 = s01 . . . s0m e S = s1 . . . sn .
Sada true, se S 0 S (S 0 e uma subsequencia de S)
1
2
3
4
5
6
7
8

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

e tem complexidade O(n). A corretude resulta de observacao que para cada


subsequencia possvel temos outra subsequencia que escolhe o elemento mais
esquerda em S. Portanto, podemos sempre escolher gulosamente o primeiro
elemento da sequencia maior.
Solu
c
ao do exerccio 4.2.
O seguinte algoritmo resolve o problema:

Algoritmo B.2 (Bases)


Entrada Uma sequencia de posic
oes xi de n cidades, 1 i n.
Sada Uma sequencia mnima de posic
oes bi de bases.
1
2
3
4
5
6
7

Sejam S = x01 . . . x0n a s p o s i c o e s em ordem c r e s c e n t e


B=
while S 6  do
S e j a S = x0 S 0
B := B, (x0 + 4) { aumenta a sequ
e ncia B }
Remove t o d o s o s e l e m e n t o s x x0 + 8 de S
end while

O algoritmo tem complexidade O(n) porque o laco tem ao maximo n iteracoes.


Prova de corretude: Seja bi as posic
oes do algoritmo guloso acima, e b0i as
posic
oes de alguma outra soluc
ao. Afirmac
ao: bi b0i . Portanto, a solucao
gulosa n
ao contem mais bases que alguma outra solucao. Prova da afirmacao
com induc
ao: A base b1 b01 e correto porque toda solucao tem que alimentar
a primeira casa e o algoritmo guloso escolhe a u
ltima posicao possvel. Passo:
Seja bi b0i e sejam h, h0 as posic
oes da pr
oximas casas sem base. O algoritmo
guloso escolha h + 4, mas como bi b0i e h h0 temos b0i+1 h0 + 4 porque
h0 precisa uma base. Logo, xi+1 = h + 4 h0 + 4 b0i+1 .

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

2. T (n) = 2T (n/2) + n log n


X
T (n) =

2i (n/2i ) log2 n/2i + (2log2 n )

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)

cn2 (7/4)i + 7h+1

0ih

= (4/3)cn2 ((7/4)h+1 1) + 7h+1


(7c/3 + 1)7h (4/3)cn2

com 4h+1 4n2

com 7h 7 7log2 n

(49c/3 + 1)nlog2 7 = O(nlog2 7 ).


Para aplicar o metodo de substituic
ao, podemos estimar T (n) anc bn2
com c = log2 7 que resulta em
T (n) = 7T (n/2) + dn2
7a/2c nc 7b/4n2 + dn2
= anc bn2 + (d 3b/4)n2
que e satisfeito para d 3/4 0 b (4/3)d.
Para aplicar o metodo Master, e suficiente de verificar que com (n2 ) =
O(nlog2 7 ) se aplica o caso 1, e portanto a complexidade e (nlog2 7 ).
Solu
c
ao do exerccio 6.4.
O algoritmo obedece a recorrencia
T (n) = T (n/5) + T (7n/10 + 6) + O(n)
(sem considerar o teto). Na aplicac
ao da
arvore de recorrencia, enfrentamos
dois problemas: (i) Os ramos tem comprimento diferente, porque os subproblemas tem tamanho diferente (portanto o metodo Master nao se aplica nesse
caso). (ii) O tamanho 7n/10+6 do segundo subproblema leva a somas difceis.
Por isso, vamos estimar o custo da
arvore da seguinte forma: (i) Temos que
garantir, que o segundo subproblema sempre e menor: 7n/10 + 6 < n. Isso e
satisfeito para n > 20. (ii) Vamos substituir o sub-problema 7n/10 + 6 com
a cota superior (7 + )n/10 para um  > 0 pequeno. Isso e satisfeito para
n 60/. (iii) Sejam c1 := 1/5, c2 := (7 + )/10 e c := c1 + c2 . Entao a
arvore tem custo cin no nvel i e no ramo mais longo (que corresponde a c2 )

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

F (n) cn pode ser verificado com substituic


ao (resolvido no livro do Cormen). O metodo Master n
ao se aplica nesta recorrencia.

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

custo (funcao de custos), 32


desemp (funcao de desempenho), 32
desigualdade de Jensen, 297
Dijkstra, Edsger, 85
distancia de Levenshtein, 104
distribuicao, 303
divisao e conquista, 54, 123
Edmonds-Karp, 204
Eliminacao de Gauss (algoritmo),
13
emparelhado, 219
emparelhamento, 214
perfeito, 214
emparelhamento de peso maximo,
214
emparelhamento maximo, 214
emparelhamento perfeito de peso mnimo,
215
espaco amostral, 303
espaco-construtvel, 251
Euler, Leonhard, 20
Euler-Mascheroni
constante de, 296
evento, 303
elementar, 303
exec (funcao de execucao), 32
f
ormula de Stirling, 295
fan-in, 285
fan-out, 285
fatorial, 295
Flajolet, Philippe, 48
Floyd, Robert W, 113
Floyd-Warshall (algoritmo), 113
fluxo, 199
st maximo, 199
de menor custo, 213
formulacao linear, 199
Ford-Fulkerson, 200, 201

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

Kruskal, Joseph Bernard, 81


Levenshtein, Vladimir Iosifovich, 104
Levin, Leonid, 270
limite
inferior, 164
superior, 164
linearidade do valor esperado, 304
linguagem, 239
livre, 219
logaritmo, 296
logaritmo iterado, 296
Loteria Esportiva (algoritmo), 45
m
aquina de RAM, 31
m
aquina de Turing, 241
determinstica, 243
n
ao-determinstica, 243
M
aximo (algoritmo), 43, 53
metodo
da substituicao, 125, 126
de
arvore de recursao, 125, 132
mestre, 125, 134
maximum independent set (problema),
87
maximum Knapsack, 108
memoizac
ao, 97
Mergesort, 19
recorrencia, 125
mochila maxima, 108
Multiplicacao de matrizes, 19, 47,
111
algoritmo de Coppersmith-Winograd,
47
algoritmo de Strassen, 47, 142
multiplicacao de n
umeros (algoritmo),
131, 317
n
umero cromatico, 169
n
umero de clique, 169
n
umero harmonico, 296

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

programacao dinamica, 95, 98


quantidade de informacao, 92
Quicksort (algoritmo), 54, 56
recorrencia
simplificar, 125
reducao, 262
relacao
polinomialmente limitada, 178,
260
relacao de crescimento, 25
, 26
, 26
, 26
, 26
, 26
retrocedimento, 153
serie aritmetica, 300
serie geometrica, 300
Savitch, Walter J., 256
seq
uenciamento
de intervalos (algoritmo), 86
de intervalos (problema), 85
sequencia, 36, 37
Shannon, Claude, 92
single-source shortest paths, 84
somatorio, 298
straight insertion sort (algoritmo),
42, 50
Strassen, Volker, 142
subestrutura otima, 77
subgrafo, 305
induzido, 305
subsequencia, 99
subsequencia comum mais longa, 99
tabela de inversoes, 53
tam (tamanho de entradas), 32
tempo-construtvel, 251

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]

Scott Aaronson. NP-complete problems and physical reality. Em:


ACM SIGACT News (mar. de 2005).

[2]

Manindra Agrawal, Neeraj Kayal e Nitin Saxena. PRIMES is in P.


Em: Annals of Mathematics 160 (2004), pp. 781793.

[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]

H. Alt et al. Computing


a maximum cardinality matching in a bipartite
graph in time O(n1.5 m log n). Em: Information Processing Letters 37
(1991), pp. 237240.

[6]

Sanjeev Arora e Boaz Barak. Computational Complexity: A Modern Approach. Cambridge University Press, 2009.

[7]

Mikhail J. Atallah, ed. Algorithms and theory of computation handbook.


CRC Press, 1999.

[8]

Richard Bellman. Dynamic Programming Treatment of the Travelling


Salesman Problem. Em: J. ACM 9.1 (1962), pp. 6163.

[9]

Claude Berge. Two theorems in graph theory. Em: Proc. National


Acad. Science 43 (1957), pp. 842844.

[10]

Leo I. Bluestein. A linear filtering approach to the computation of the


discrete Fourier transform. Em: IEEE Trans. Audio Electroacoust AU18.451 (1970).

[11]

Timothy M. Chan. More Algorithms for All-Pairs Shortest Paths in


Weighted Graphs. Em: STOC07. 2007.

[12]

Jens Clausen. Branch and Bound Algorithms Principles and examples.


1999.

[13] Complexity zoo. Online.


[14]

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]

Thomas H. Cormen et al. Introduction to Algorithms. 2nd. The MIT


Press, 2001.

[16]

L.J. Cowen, Robert Cowen e Arthur Steinberg. Totally Greedy Coin


Sets and Greedy Obstructions. Em: The Electronic Journal of Combinatorics 15 (2008).

[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]

Matthew Delacorte. Graph Isomorphism is PSPACE-complete. arXiv:0708.4075. 2007.

[19]

Reinhard Diestel. Graph theory. 3rd. Springer, 2005.

[20]

Ding-Zhu Du e Ker-I Ko, eds. Advances in Algorithms, Languages, and


Complexity - In Honor of Ronald V. Book. Kluwer, 1997.

[21]

J. Edmonds. Paths, Trees, and Flowers. Em: Canad. J. Math 17


(1965), pp. 449467.

[22]

Jen
o Egerv
ary. Matrixok kombinatorius tulajdonsagairol (On combinatorial properties of matrices). Em: Matematikai es Fizikai Lapok 38
(1931), pp. 1628.

[23]

T. Feder e R. Motwani. Clique partitions, graph compression and


speeding-up algorithms. Em: Proceedings of the Twenty Third Annual
ACM Symposium on Theory of Computing (23rd STOC). 1991, pp. 123
133.

[24]

T. Feder e R. Motwani. Clique partitions, graph compression and


speeding-up algorithms. Em: Journal of Computer and System Sciences 51 (1995), pp. 261272.

[25]

L. R. Ford e D. R. Fulkerson. Maximal flow through a network. Em:


Canadian Journal of Mathematics 8 (1956), pp. 399404.

[26]

C. Fremuth-Paeger e D. Jungnickel. Balanced network flows


VIII:
a revised theory of phase-ordered algorithms and the
O( nm log(n2 /m)/ log n bound for the nonbipartite cardinality matching problem. Em: Networks 41 (2003), pp. 137142.

[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]

Ashish Goel, Michael Kapralov e Sanjeev Khanna. Perfect Matchings in


O(n log n) Time in Regular Bipartite Graphs. Em: STOC 2010. 2010.

[31]

A. V. Goldberg e A. V. Karzanov. Maximum skew-symmetric flows and


matchings. Em: Mathematical Programming A 100 (2004), pp. 537568.

[32]

Ronald Lewis Graham, Donald Ervin Knuth e Oren Patashnik. Concrete


Mathematics: a foundation for computer science. Addison-Wesley, 1988.

[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]

Dan S. Hirschberg. A linear space algorithm for computing maximal


common subsequences. Em: Comm. of the ACM 18.6 (1975), pp. 341
343.

[37]

C. A. R. Hoare. Quicksort. Em: Computer Journal 5 (1962), pp. 10


15.

[38]

J. E. Hopcroft e R. Karp. An n5/2 algorithm for maximum matching


in bipartite graphs. Em: SIAM J. Comput. 2 (1973), pp. 225231.

[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]

Tardos. Algorithm design. Addison-Wesley, 2005.


Jon Kleinberg e Eva

[43]

Donald E. Knuth. The art of computer programming. 2nd. Vol. III, Sorting and searching. Addison-Wesley, 1998.

[44]

H. W. Kuhn. The Hungarian Method for the assignment problem.


Em: Naval Re4search Logistic Quarterly 2 (1955), pp. 8397.

[45]

Richard Ladner. On the structure of polynomial time reducibility.


Em: Journal of the ACM (1975). url: http://weblog.fortnow.com/
2005/09/favorite-theorems-np-incomplete-sets.html.

[46]

Jan van Leeuwen, ed. Handbook of theoretical computer science. Vol. A:


Algorithms and complexity. MIT Press, 1990. url: http : / / www .
amazon . com / Handbook - Theoretical - Computer - Science - Vol / dp /
0262720140.

[47]

Tom Leighton. Manuscript, MIT. 1996.

[48]

Vladimir Iosifovich Levenshtein. Binary codes capable of correcting


deletions, insertions, and reversals. Em: Soviet Physics Doklady (1966),
pp. 707710.

[49]

Leonid Levin. Universalny e pereborny e zadachi (Universal Search


Problems: in Russian). Em: Problemy Peredachi Informatsii 9.3 (1973),
pp. 265266.

[50]

Seth Lloyd. Computational capacity of the universe. Em: Physical


Review Letters 88.23 (2002). http://focus.aps.org/story/v9/st27.

[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]

A. R. Meyer e L. J. Stockmeyer. The equivalence problem for regular


expression with squaring requires exponential time. Em: Proc. 12th
IEEE Symposium on Switching and Automata Theory. 1972, pp. 125
129.

[53]

B. Monien e E. Speckenmeyer. Solving satisfiability in less than 2n


steps. Em: Discrete Appl. Math 10 (1985), pp. 287295.

[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]

Salvador Roura. Improved Master Theorems for Divide-and-Conquer


Recurrences. Em: Journal of the ACM 48.2 (2001), pp. 170205.

[58]

J.R. Sack e J. Urrutia, eds. Handbook of computational geometry. Elsevier, 2000.

[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]

Michael Sipser. Introduction to the theory of computation. Thomson,


2006.

[62]

Michael Sipser. The history and status of the P versus NP question.


Em: Proceedings of the 24th Annual ACM Symposium on the Theory of
Computing. 1992, pp. 603619.

[63]

Volker Strassen. Guassian Elimination is not Optimal. Em: Numer.


Math 13 (1969), pp. 354356.

[64]

Laira Vieira Toscani e Paula A. S. Veloso. Complexidade de Algoritmos.


2a. Editora Sagra Luzzatto, 2005. url: http://www.inf.ufrgs.br/
~laira/.

[65]

Luca Trevisan. P and NP. http://lucatrevisan.wordpress.com/


2010/04/24/cs254-lecture-2-p-and-np. 2010.

[66]

Alan Mathison Turing. On computable numbers with an application to

the Entscheidungsproblem. Em: Proc. London MathSoc.


2.42 (1936),
pp. 230265.

[67]

Vijay V. Vazirani. Approximation algorithms. Springer, 2001.

[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]

Jie Wang. Advances in Algorithms, Languages, and Complexity - In


Honor of Ronald V. Book. Em: Kluwer, 1997. Cap. Average-Case Intractable NP Problems.

[71] Wilkinson Microwave Anisotropy Probe. Online. 2010. url: http://


map.gsfc.nasa.gov (acedido em 13/03/2011).

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

Vous aimerez peut-être aussi