Você está na página 1de 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 7
1. Introduc
ao e conceitos b asicos 9
1.1. Notac
ao assintotica . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.2. Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.3. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2. Analise de complexidade 31
2.1. Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2. Complexidade pessimista . . . . . . . . . . . . . . . . . . . . . 35
2.2.1. Metodologia de an alise de complexidade . . . . . . . . . 35
2.2.2. Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.3. Complexidade media . . . . . . . . . . . . . . . . . . . . . . . . 47
2.4. Outros tpos de an alise . . . . . . . . . . . . . . . . . . . . . . . 61
2.4.1. An alise agregada . . . . . . . . . . . . . . . . . . . . . . 61
2.4.2. An alise amortizada . . . . . . . . . . . . . . . . . . . . . 64
2.5. Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.6. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

II. Projeto de algoritmos 71


3. Introduc
ao 73

4. Algoritmos gulosos 75
4.1. Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.2. Algoritmos em grafos . . . . . . . . . . . . . . . . . . . . . . . . 79

4.2.1. Arvores espalhadas mnimas . . . . . . . . . . . . . . . . 79
4.2.2. Caminhos mais curtos . . . . . . . . . . . . . . . . . . . 84
4.3. Algoritmos de seq uenciamento . . . . . . . . . . . . . . . . . . 85
4.4. Topicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
4.5. Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
4.6. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

1
Conte
udo

5. Programac ao dinamica 95
5.1. Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.2. Comparac ao de sequencias . . . . . . . . . . . . . . . . . . . . . 99
5.2.1. Subsequencia Comum Mais Longa . . . . . . . . . . . . 99
5.2.2. Similaridade entre strings . . . . . . . . . . . . . . . . . 104
5.3. Problema da Mochila . . . . . . . . . . . . . . . . . . . . . . . . 108
5.4. Multiplicacao de Cadeias de Matrizes . . . . . . . . . . . . . . . 109
5.5. Topicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
5.5.1. Algoritmo de Floyd-Warshall . . . . . . . . . . . . . . . 113
5.5.2. Caixeiro viajante . . . . . . . . . . . . . . . . . . . . . . 115

5.5.3. Arvore de busca bin aria
otima . . . . . . . . . . . . . . 116
5.5.4. Caminho mais longo . . . . . . . . . . . . . . . . . . . . 120
5.6. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

6. Divis
ao e conquista 123
6.1. Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
6.2. Resolver recorrencias . . . . . . . . . . . . . . . . . . . . . . . . 125
6.2.1. Metodo da substituic ao . . . . . . . . . . . . . . . . . . 126
6.2.2. Metodo da arvore de recurs ao . . . . . . . . . . . . . . . 131
6.2.3. Metodo Mestre . . . . . . . . . . . . . . . . . . . . . . . 134
6.2.4. Um novo metodo Mestre . . . . . . . . . . . . . . . . . . 139
6.3. Algoritmos usando divis ao e conquista . . . . . . . . . . . . . . 141
6.3.1. O algoritmo de Strassen . . . . . . . . . . . . . . . . . . 141
6.3.2. Menor dist ancia . . . . . . . . . . . . . . . . . . . . . . 142
6.3.3. Selecao . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
6.3.4. Convoluc oes . . . . . . . . . . . . . . . . . . . . . . . . . 146
6.4. Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
6.5. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150


7. Arvores de busca, backtracking e branch-and-bound 153
7.1. Backtracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
7.1.1. Exemplo: Cobertura por vertices . . . . . . . . . . . . . 158
7.2. Branch-and-bound . . . . . . . . . . . . . . . . . . . . . . . . . 163
7.3. Analisar
arvores de busca . . . . . . . . . . . . . . . . . . . . . 174

8. Algoritmos de aproximac ao 177


8.1. Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.2. Aproximac oes com randomizac ao . . . . . . . . . . . . . . . . . 184
8.3. Aproximac oes gulosas . . . . . . . . . . . . . . . . . . . . . . . 185
8.4. Esquemas de aproximac ao . . . . . . . . . . . . . . . . . . . . . 192
8.5. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

2
Conte
udo

III. Algoritmos 195


9. Algoritmos em grafos 197
9.1. Fluxos em redes . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
9.1.1. Algoritmo de Ford-Fulkerson . . . . . . . . . . . . . . . 199
9.1.2. O algoritmo de Edmonds-Karp . . . . . . . . . . . . . . 203
9.1.3. Variacoes do problema . . . . . . . . . . . . . . . . . . . 205
9.1.4. Aplicacoes . . . . . . . . . . . . . . . . . . . . . . . . . . 209
9.1.5. Outros problemas de fluxo . . . . . . . . . . . . . . . . . 212
9.2. Emparelhamentos . . . . . . . . . . . . . . . . . . . . . . . . . . 214
9.2.1. Aplicacoes . . . . . . . . . . . . . . . . . . . . . . . . . . 217
9.2.2. Grafos bi-partidos . . . . . . . . . . . . . . . . . . . . . 217
9.2.3. Emparelhamentos em grafos n ao-bipartidos . . . . . . . 227
9.2.4. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . 228

10.Algoritmos de aproximac ao 229


10.1. Aproximac ao para o problema da arvore de Steiner mnima . . 229
10.2. Aproximac oes para o PCV . . . . . . . . . . . . . . . . . . . . . 231
10.3. Algoritmos de aproximac ao para cortes . . . . . . . . . . . . . . 232
10.4. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

IV. Teoria de complexidade 237


11.Do algoritmo ao problema 239
11.1. Introduc
ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

12.Classes de complexidade 251


12.1. Definic
oes b
asicas . . . . . . . . . . . . . . . . . . . . . . . . . . 251
12.2. Hierarquias b asicas . . . . . . . . . . . . . . . . . . . . . . . . . 253
12.3. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

13.Teoria de NP-completude 259


13.1. Caracterizac
oes e problemas em NP . . . . . . . . . . . . . . . 259
13.2. Reducoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
13.3. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

14.Fora do NP 273
14.1. De P ate PSPACE . . . . . . . . . . . . . . . . . . . . . . . . . . 275
14.2. De PSPACE ate ELEMENTAR . . . . . . . . . . . . . . . . . . . 280
14.3. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

3
Conte
udo

15.Complexidade de circuitos 285

A. Conceitos matem aticos 293


A.1. Func
oes comuns . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
A.2. Somat orio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
A.3. Induc
ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
A.4. Limites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
A.5. Probabilidade discreta . . . . . . . . . . . . . . . . . . . . . . . 303
A.6. Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

B. Soluc
oes dos exerccios 307

4
Conte
udo

Essas notas servem como suplemento ` a material do livro Complexidade de


algoritmos de Toscani/Veloso e o material did
atico da disciplina Complexi-
dade de algoritmos da UFRGS.

Vers
ao 3772 do 2011-05-05, compilada em 5 de Maio de 2011. A obra esta licen-
ciada sob uma Licenca Creative Commons (Atribuicao-Uso Nao-Comercial-
Nao a obras derivadas 2.5 Brasil).

5
Parte I.

An
alise de algoritmos

7
1. Introduc
ao e conceitos b
asicos

A teoria da computac ao comecou com a pergunta Quais problemas sao efeti-


vamente 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 possibi-
lidades computacionais do nosso universo, e logo do nosso conhecimento da
fsica. Matem aticos definiram diversos modelos de computacao, entre eles o
calculo 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 com-
put aveis?. Essa pergunta e motivada pela observacao de que alguns proble-
mas 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
Nao 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: Analise 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.

9
1. Introduc
ao e conceitos b
asicos

Introduc
ao

Um algoritmo e um procedimento que consiste em um conjunto de regras


nao 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, pro-
duz uma resposta correta, se forem concedidos tempo e memoria sufici-
entes para a sua execuc
ao.

Motivac
ao

Na teoria da computac
ao perguntamos Quais problemas sao efetiva-
mente computaveis?
No projeto de algoritmos, a pergunta e mais especfica: Quais proble-
mas s
ao eficientemente computaveis?
Para responder, temos que saber o que eficiente significa.
Uma definic
ao razoavel 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 con-
sumida, energia dissipada, ...
Existem caractersticas e medidas que sao importantes em contextos
diferentes
Linhas de codigo fonte (LOC), legibilidade, manutenabilidade, corre-
tude, 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 oes (uniao), (fecho de
ao regular e com operac
2
Kleene), (concatenac
ao) e (quadratura) sobre o alfabeto =
{0, 1}.
ao L(e) 6= ?
Decis

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


rol
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 com-
plexidade tao grande que praticamente todas inst
ancias precisam mais re-
cursos que o universo possui (por exemplo a decisao da validade na logica
monadica 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 13.75 0.11 109 anos 43.39 1016 s


Tamanho 78 109 anos-luz
Densidade 9.9 1030 g/cm3
Numero de atomos 1080
Numero de bits 10120
Numero de operac oes 10120
l
ogicas elementares ate
hoje
Operacoes/s 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 quadratico 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
det(Ai )
xi =
det(A)
seja Ai a matriz resultante da substituicao 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 numero 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 ); T1 = 1

12
cuja soluc
ao e  
X
Tn = n! 1 + (A + M ) 1/i! 1
1i<n
P
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 nao precisa mais que n2 operac
oes (nesse caso inclusive divisoes).

Algoritmo 1.1 (Eliminac


ao de Gauss)
Entrada Uma matriz A = (aij ) Rnn
Sada A em forma triangular superior.
a o g a u s s ( a Rnn )=
1 e l i m i n a c
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 2 3 x1 2
4 5 7 x2 = 4
7 8 9 x3 6
vamos aplicar a eliminac
ao de Gauss `
a matriz aumentada

1 2 3 2
4 5 7 4
7 8 9 6
1 n!
P
1i<n 1/i! = bn!(e 1)c.

13
1. Introduc
ao e conceitos b
asicos

obtendo
1 2 3 2 1 2 3 2
0 3 5 4 ; 0 3 5 4
0 6 12 8 0 0 2 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) con-
sideravelmente 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 Cramer Gauss
2 4 ns 2 ns
3 12 ns 8 ns
4 48 ns 20 ns
5 240ns 40 ns
10 7.3ms 330 ns
20 152 anos 2.7 s
2O resultado pode ser melhorado considerando que aji /aii n
ao depende do k

14
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 Maquina rapida
log2 n N 10
n 10N
n log2 n 10N
(N grande)
n2 10N 3.2N
n3 3
10N 2.2N
2n N + log2 10 N + 3.3
3n 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 rapido?
A quantidade n0 satisfaz f (n0 ) = cf (n). Para funcoes que possuam uma
inversa (por exemplo func
oes monotonicas) 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
3 2
10x3
4x -3x +2x-1
1.2x109

1.0x109

8.0x108
Complexidade

6.0x108

4.0x108

8
2.0x10

0.0x100

0 100 200 300 400 500


Tamanho do problema

Crescimento de func
oes
n= 101 102 103 104 105 106
log2 n 3 7 10 13 17 20
n 101 102 103 104 105 106
n log2 n 33 6.6 102 104 1.3 105 1.7 106 2 107
n2 102 104 106 108 1010 1012
n3 103 106 109 1012 1015 1018
2n 103 1.3 1030 1.1 10301 2 103010 1030103 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 operacoes basicas (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, substi-
tuindo 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.
ao tem cota n2 , denotado com O(n2 ).
Logo o tempo da execuc
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 desempe-
nho 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 milise-


gundos,e 5n3 milisegundos, respectivamente, qual e o mais eficiente?

Exemplo 1.5
Considerando dois algoritmos com tempo de execucao O(n2 ) e O(n3 ) espera-
mos que o primeiro seja mais eficiente que o segundo. Para n grande, isso e
verdadeiro, mas o tempo de execucao 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 5 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 para ordenar 106 elementos?
ao de cada combinac

18
Algoritmo Comp. C1 Comp. C2

2(106 )2 OP 2(106 )2 OP
A 107 OP/s = 2 105 s 109 OP/s = 2 103 s

50(106 ) log 106 OP 50(106 ) log 106 OP


B 107 OP/s = 30s 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 al-
goritmo 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), consi-
derado 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 con-


junto, 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.
Varios problemas NP-completos sao 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?
Coment decidvel em tempo linear usando o teorema de Euler: um
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 numero 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 ta-
manho 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,
oes positivas (com co-domnio R+ ), por-
que e suficiente trabalhar com func
que os recursos de nosso interesse s
ao positivos. A seguir, supomos que todas
func
oes sao dessa forma.

Notac
ao assint
otica: O

Frequentemente nosso interesse e o comportamento assint


otico de uma
ao f (n) para n .
func

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 ),
oes 4n2 e n2 denotam func
as express ao valores3 .
oes, n
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) c = 1; n0 = 2
3
32n O(n ) c = 32; n0 = 1
10n n2 6 O(n2n ) porque 10n n2 cn2n 5n n c
n log2 n O(n log10 n) c = 4; n0 = 1


3 Mais avel) seria escrever n.4n2 = O(n.n2 )
correto (mas menos confort

22
1.1. Notacao assintotica

O: Exemplos

Proposi
cao 1.1
omio p(n) = 0im ai ni temos
P
Para um polin

|p(n)| O(nm ) (1.1)

Prova.
X
i

|p(n)| =
ai n
0im
X
|ai |ni Corol
ario A.1
0im
X X
|ai |nm = nm |ai |
0im 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 oes como ex = 1 + x + O(x2 ),
alise de algoritmos. Equac
usadas no c alculo, possuem uma definicao de O diferente.
As definicoes 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.

Proposicao 1.2 (Caracteriza c


ao alternativa)
Caracterizac
oes alternativas de O, o, e s
ao

f (n)
f (n) O(g(n)) lim sup < (1.6)
n g(n)
f (n)
f (n) o(g(n)) lim =0 (1.7)
n g(n)

f (n)
f (n) (g(n)) lim inf >0 (1.8)
n g(n)

f (n)
f (n) (g(n)) lim = (1.9)
n g(n)

Prova. Exerccio. 
Conven cao 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 uni-
versal, 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 ) (1.13)
O(f )O(g) = O(f g) (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 usa-
la em formulas 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
cao 1.1 (Rela
coes 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 sao 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
coes de crescimento)
oes [N R+ ]
Sobre o conjunto de func
1. f  g g  f ,
2.  e  s ao ordenac
oes parciais (reflexivas, transitivas e anti-simetricas
ao de ),
em relac
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 relacao de equivalencia, sabemos que tambem
satisfaz
f (f )
f (g) g (f )
f (g) g (h) f (h)
A notacao 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 pro-
posic
ao mostra.
4 Uma notac e  para  e  para . Infelizmente a notac
ao alternativa ao n
ao
e padro-
nizada.

26
1.2. Notas

Identidades falsas das relac


oes de crescimento

Proposic
ao 1.4 (Identidades falsas das rela
coes 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 nao 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
intermediarios 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
oes de bits n3.2 log kAk1+o(1) e possvel [40].
de operac
Nossa discussao 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 al-
guma nao 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 simples-
mente da forma

fn = 2fn1 = 2O(n 1) = 2O(n) = O(n)

ao dessa recorrencia e fn = 2n duvidamos que 2n =


Mas sabendo que a soluc
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 se 0 n 1
fn =
fn2 + fn1 se n 2

otica fn (n ) com = (1 +
tem ordem assint 5)/2.

Exerccio 1.12
Prove a seguinte variac ao para g : N R+ :
ao do princpio de absorc

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 oes polinomiais de N para N com f (n)
ao func
(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

oes f (n) = 5 2n + 3 e g(n) = 3 n2 + 5 n como


2. Classifique as func
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 recur-
sos gastos em computadores especficos, porque devido a diferentes conjuntos
de instrucoes, arquiteturas e desempenho dos processadores, as medidas sao
difceis de comparar. Portanto, usamos um modelo de uma maquina que re-
flita 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 ins-
truc
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 numeros inteiros e de
ponto flutuante, acesso `a mem oria e transferencia de dados); essas operacoes
refletem operac
oes tpicas de maquinas concretas.
Observe que a escolha de um modelo abstrato nao e totalmente trivial. Conhe-
cemos varios modelos de computadores, cuja poder computacional nao e equi-
valente em termos de complexidade (que n ao viola a tese de Church-Turing).
Mas todos os modelos encontrados (fora da computacao quantica) sao poli-
nomialmente equivalentes, e portanto, a noc
ao de eficiencia fica a mesma. A
tese que todos modelos computacionais sao polinomialmente equivalentes as
vezes est
a chamado tese de Church-Turing estendida.

O plano
Uma hierarquia de abstrac
oes:
Tempo de Complexidade
N
/ umero de / Operac
oes no / pessimista
execucao [s] operac
oes caso 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]

Definic
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 com-
portamento 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

?>=<
89:;
D desemp/ GFED
@ABC
Condensac
ao
Entrada R+ Custo da instancia
O
tam

?>=<
89:; / GFED
@ABC
 
Tamanho N aval
R+ 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
X
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. Pri-


meiramente, a complexidade pessimista garante um certo desempenho, inde-
pendente 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 varios algoritmos com desempenho ruim no pior caso, estamos interessa-
dos 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}

Cp e monot
onica e temos

Cp= [A](n) Cp [A](n)

Caso Cp= seja monot


onica as definic
oes sao equivalentes

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 basica s
ao consideradas as operacoes de atri-
buic
ao, incremento e teste da express ao booleana i n.) Logo as execucoes
ao E = O e temos a func
possveis s 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
umeros naturais, logo, D = N e como tamanho da entrada
sequencias de n
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 caso existe i = min{j | aj = 1}
(a1 , . . . , an ) 7
(f or, if )n return 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).

Observe que Cp= e monot onica, e portanto Cp= = Cp .


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


todicamente.
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 pon-
ao , e funcoes f, g com dom(f ) = dom(g)
tualmente, i.e. para alguma operac
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 ).
n /A / n2 /A / n4

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 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 particao 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
ancias em D1 , e n2 para inst
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 para w tem complexidade 2n O(n)


ao de uma lista u e atribuic

w := reversa(u)

A atribuic
ao

Logo, a atribuicao 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 maximo de duas funcoes for difcil, podemos simpli-
ficar
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 s e hd(u) = 0 e n t
ao
2 v := ordena(u)
3 senao
4 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
ao de [1, n] tal que para i < j temos a(i) a(j) .
permutac
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 com-
parac
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 exem-


plo 2.15.)

Exemplo 2.7 (Ordena cao por inser


cao direta)
(ingles: straight insertion sort)

Ordenac
ao por inserc
ao direta

Algoritmo 2.3 (Ordena cao 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
ao de [1, n] e para i < j temos a(i) a(j) .
permutac
1 f o r i :=2 t o n do
2 { invariante : a1 , . . . , ai1 ordenado }
3 { coloca item i na posi a o correta }
c
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
cp [SI](n) O(1) = O(i) = O(n2 )
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 basica (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 maximo 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 basico 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.
ao p tal que ap = c ou p = caso nao existe tal
Sada A primeira posic
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 f o r i := 1, . . . , k do
2 ci := 0
3 end f o r
4 f o r i := 1, . . . , n do
5 cai := cai + 1
6 end f o r
7 f o r i := 2, . . . , k do

44
2.2. Complexidade pessimista

8 ci := ci + ci1
9 end f o r
10 f o r i := n, . . . , 1 do
11 bcai := ai
12 cai := cai 1
13 end f o r
14 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 Binaria)


Entrada Um inteiro x e uma sequencia ordenada S = a1 , a2 , . . . an de
n
umeros.
ao i em que x se encontra na sequencia S ou 1 caso x
Sada Posic / S.
1 i := 1
2 f := nj k
f i
3 m := 2 +i
4 while i f do
5 i f am = x then return m
6 i f am < x then f := m 1
7 e l s e ji :=km + 1
f i
8 m := 2 +i
9 end while
10 return 1

A busca bin aria e usada para encontrar um dado elemento numa sequencia
ordenada de numeros com gaps. Ex: 3,4,7,12,14,18,27,31,32...n. Se os numeros
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
X
cik = aij bjk 1 i m; 1 k o.
1jn

46
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
oes, tal que temos uma entrada de tamanho (n2 ) e
considerar as multiplicac
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 nao em
relac ao a complexidade seria 2n/33/2 = O(n3/2 ).
ao ao tamanho da entrada. Sen

47
2. An
alise de complexidade

A vari
avel aleat
oria desemp[A]
O custo medio
X
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!
Parada na
o-determinstico em k passos: fica NP-completo.
(Resultados citados: [33, 20] (Caminho Hamiltanio), [70] (Parada em k pas-
sos).)

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
1 X 
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
i
P
(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 contrario
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
ao contem 1. Ambas tem probabilidade 2n e logo Pr[p = n] = 21n .
n

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 1in
n n
=2 n+22 (n + 2) = 2 21n (A.39)
2n
cp [A](n) = 5 2 = 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
cao 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 comparacoes 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

2.0x104
Quantidade

1.5x104

4
1.0x10

5.0x103

0 5 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 en-
tre 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 permutacoes 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 tal que ai > aj .

Permutaca
o #Invers
oes
123 0
132 1
Exemplos 213 1
231 2
312 2
321 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 adjacen-
tes: #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.
ao existe uma permutacao correspondente com
Para cada permutac
ordem inversa:
35124; 42153

Cada invers
ao em n ao em e vice versa:
ao e invers

inv() + inv( ) = n(n 1)/2.

N
umero m
edio de transposic
oes

O n
umero medio de invers
oes e
!
X X X
1/n! inv() = 1/(2n!) inv() + inv()
Sn Sn Sn
!
X X

= 1/(2n!) inv() + inv( )
Sn Sn
!
X
= 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 numero 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

Qual o n
umero esperado de atualizac
oes no algoritmo Ma
ximo?

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.
b1 b2 b3 b4 b5
Exemplo: Para 53142
2 3 1 1 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.
b1 b2 b3 b4 b5
Exemplo: A permutac
ao correspondente com
3 1 2 1 0
Vantagem para a an
alise: Podemos escolher os bi independentemente.
Observacao, na busca do m aximo i e maximo 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 maximos locais e X = 1in Xi .
Portanto, o n
umero esperado de m
aximos locais e
 X  X
E[X] = E Xi = E[Xi ]
1in 1in
X X 1 X 1
= Pr[Xi ] = = = Hn
ni+1 i
1in 1in 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 e s c o l h e um p i v o ap
2 t r o c a ap e ar
3 i := l 1 { u o }
ltimo ndice menor que piv
4 f o r j := l t o r 1 do
5 i f aj ar then
6 i := i +1
7 t r o c a ai e aj
8 end i f
9 end f o r
10 t r o c a ai+1 e ar
11 return i + 1

54
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) (Primeiro elemento)


cp [Partition] = n 1 + 1 = n = (n) (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 pivo. Tambem vamos S justificar o u
ltimo passo na analise acima com
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).
Entao

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


dDn

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


1in dDn

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


1in dDn

56
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 expressao, 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]).
X
cm [QS](n) = Pr[d] desemp[QS](d)
dDn
X
= Pr[d](desemp[P ](d) + desemp[QS](dl ) + desemp[QS](dr ))
dDn
X
=n+ Pr[d](desemp[QS](dl ) + desemp[QS](dr ))
dDn
X
=n+ Pr[X = i](cm [QS](i 1) + cm [QS](n i))
1in

57
2. An
alise de complexidade

Novamente, o ultimo 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 1 X
= (desemp[QS](dl ) + desemp[QS](dr ))
|D| i
1in dDn
X |Dni |
= (cm [QS](i 1) + cm [QS](n i))
|D|
1in
X
= Pr[X = i](cm [QS](i 1) + cm [QS](n i))
1in

e o penultimo passo e correto, porque a media do desempenho sobre as per-


oes dl e dr e a mesma que sobre as permutacoes com i 1 e n i
mutac
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
X
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 pivo. Temos Pr[X = i] = 1/n. Como


Pr[X = i] n
ao depende do i a equac
ao acima vira
X
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 analise 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

X
Tn = n + 2/(n(n 1)) (i 1) (Ti1 + Tni )
1in
X
= n + 2/(n(n 1)) i (Ti + Tni1 )
0i<n
X X
= n + 2/(n(n 1)) iTi + iTni1
0i<n 0i<n
X X
= n + 2/(n(n 1)) iTi + (n i 1)Ti
0i<n 0i<n
X
= n + 2/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 pivo Pr[X = i] no caso n = 3
explicitamente, se o maior dos dois primeiros elementos e o pivo:
Permutac
ao Piv
o
123 2
132 3
213 2
231 3
312 3
321 3

59
2. An
alise de complexidade

Logo temos as probabilidades

Piv
oi 1 2 3
Pr[X = i] 0 1/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).

X
Tn = n + 1 + 2/n Ti para n > 0
0i<n

multiplicando por n obtemos


X
nTn = n2 + n + 2 Ti
0i<n

ao para n 1 e
a mesmo equac
X
(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 2 4
Tn = Tn1 +
n+1 n n+1

60
2.4. Outros tpos de analise

substituindo An = 2Tn /(n + 1)

2 X 4
An = An1 + =
n+1 i+1
1in

e portanto
X 1
Tn = 2(n + 1)
i+1
1in
n
= 2(n + 1)(Hn )
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 ds := 0
2 du = , u V {s}
3 Q :=
4 Enqueue(Q, s)
5 while Q 6=
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
maximo |V | iteracoes, 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 Pinterior, tem, agregado
sobre todas iterac oes do laco exterior, complexidade uV du 2|E|. Por-
tanto 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 .
ancia mnima dv entre s e cada vertice v V .
Sada A dist
1 ds := 0; dv := , v V \ {s}
2 visited(v) := false, v V
3 Q :=
4 insert(Q, (s, 0))
5 while Q 6= do
6 v := deletemin(Q)
7 visited(v) := true
8 f o r u N + (v) do
9 i f not visited(u) then
10 i f du = then

62
2.4. Outros tpos de analise

11 du := dv + dvu
12 insert(Q, (u, du ))
13 e l s e i f dv + dvu < du
14 du := dv + dvu
15 update(Q, (u, du ))
16 end i f
17 end i f
18 end f o r
19 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 sao 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 consi-
derando 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.
Analise tradicional: um incremento tem complexidade O(k), porque no caso
pior temos que alterar k bits. Portanto todos incrementos custam O(k2k ).
Analise amortizada: Poupamos operac oes extras nos incrementos simples,
para gast a-las nos incrementos caros. Concretamente, setando um bit, gas-
tamos duas operac oes, uma para setar, outra seria poupado. Incremen-
tando, 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 pou-
panca). 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 repre-
sentac
ao binario 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 q

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 amorti-
zado dessa operac
ao e 1in ci /n. Se temos m operacoes diferentes,
P o custo
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 simpli-
ficar 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 va-
lor nao-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 amor-


P podemos atribuir a cada tipo de operac
tizado iJ ai /|J|. Em particular, se cada operacao 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 i n s e r t ( x):=
2 i f p > n then
3 a l o c a nova t a b e l a de tamanho t = max{2n, 1}
4 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
5 n := t
6 end i f
7 xp := x
8 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

ao potencial (n) = 2Cp Dn. A func


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: Te-
mos 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 Coppersmith-
Winograd com n2.376 multiplicacoes [14]. Ambas sao pouco usadas na pratica
porque o desempenho real e melhor somente para n grande (no caso de Stras-
sen 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 e s com complexidade O(j 2 )
o p e r a c
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 e s com complexidade O(2i )
o p e r a c
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 e s com complexidade O(2j )
o p e r a c
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 e s com complexidade O(2j )
o p e r a c
5 j := j +1
6 end f o r
7 end f o r

Exerccio 2.2
Tentando resolver a recorrencia
X
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 com-
parac ao como operacao b
asica?

Exerccio 2.4
Escreve um algoritmo que, dado uma sequencia a1 , . . . , an com ai N deter-
mina 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 `
aarvore.). 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
X
Tn = n + 2/n Ti
0i<n
X
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 apro-
priados para processamento online.

Trocar moedas

Troca mnima

ancia Valores (de moedas ou notas) v1 > v2 > > vn = 1, uma


Inst
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 i:=1, . . . , n do
2 ci := bs/vi c
3 s := s ci vi
4 end 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 multiplos 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 sis-
tema 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]
X X
= fi1 vi vi
i[m,n] i[m,n]
X X
= vi1 vi
i[m,n] 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 algo-


ritmo guloso produz uma soluc
ao
otima?

Se existe um solucao 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 condicao (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.

Definic
ao 4.1 (Subestrutura otima)
Um problema de otimizacao tem subestrutura
otima se uma solucao otima
(mnima ou m
axima) do problema consiste em solucoes otimas das subproble-
mas.

Exemplo 4.2
Considere caminhos (simples) em grafos. O caminho mais curto v1 v2 . . . vn
entre dois vertices v1 e vn tem subestrutura otima, porque um subcaminho
tambem e mais curto (sen ao seria possvel de obter um caminho ainda mais
curto).

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
i//
1
j
// 
// 
//

/
1 //  1
//  
// 

k
o caminho mais longo entre i e j e ikj, mas o subcaminho kj nao e o subca-
minho mais longo entre k e j.

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

Algoritmo 4.1 (Soluc


ao generica de problemas com subestrutura
otima
Entrada Uma inst
ancia I de um problema.

Sada Uma soluc otima S de I.


ao
1 r e s o l v e ( I ):=
2 S := n i l { melhor solu cao }
3 f o r t o d o s subproblemas I 0 de I do
4 S 0 := r e s o l v e ( I 0 )
5 e s t e n d e S 0 para uma s o l u c a o S de I
6 i f S 0 e a melhor s o l u c
a o then
7 S := S
8 end i f
9 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 ao-direcionado G = (V, E), pesos c : E R+ .


ancia Grafo conexo n
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 nao 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 nao 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 nao 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 nao-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 )
6 V := V 0 {v}
0

7 ET := ET {e}
8 end while

AEM: Algoritmo de Kruskal

Algoritmo 4.3 (AEM-Kruskal)


Entrada Um grafo conexo nao-orientado G = (V, EG ) com pesos c : VG
R+
P
Sada Uma
arvore T = (V, ET ) com custo eET c(e) mnimo.
1 ET :=
2 while (V, ET ) n a o e conexo do
3 e s c o l h a e com c u s t o mnimo que n
a o produz c c l o
4 ET := ET {e}
5 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?
ancia do conjunto V 0 para cada no em V \ V 0 .
Mantenha uma dist
N
os que n ao acessveis em um passo tem distancia .
ao s
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.
ao Q.atualiza(e, c0 ) modifica a chave de e para v 0 caso v 0 e
Operac
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 nao-orientado G = (V, EG ) com pesos c : VG
R+
P
Sada Uma
arvore T = (V, ET ) com custo eET c(e) mnimo.
1 ET :=
2 Q := {((v, u), c(v, u)) | u N (v)} { n
o s alcanc a veis }
3 Q := Q {((u, u), ) | u V \ N (v) \ {v}} { no s restantes }
4 while Q 6= do
5 ((u, v), c) := Q. min() { (u, v) e arco mnimo }
6 f o r w N (v) do
7 Q.atualiza((v, w), c(v, w))
8 end f o r
9 ET := ET {{u, v}}
10 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


ancia Um grafo direcionado G = ({v1 , . . . , vn }, E) com funcao de
Inst
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

avel: d(s) = 0 e d(t) = para todo no


1. Comeca com uma estimativa vi
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
ancia Um conjunto de intervalos S = {[ci , fi ], 1 i n}, cada com
Inst
comeco ci e fim fi tal que ci < fi .

ao Um conjunto compatvel C S de intervalos, i.e. cada par


Soluc
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

Seja C = ([c1 , f1 ], . . . , [cn , fn ]) o resultado do algoritmo Sequ enciamento


de intervalos e O = ([c01 , f10 ], . . . , [c0m , fm
0
]) seq
uenciamento maximo, ambos
em ordem crescente.
Proposic
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 inter-
valos que comecam depois fi o com terminacao mnima. O proximo intervalo
[c0i+1 , m0i+1 ] do seq
uenciamento otimo esta 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 . 

Proposic
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).
ao Um conjunto independente M V , i.e. todo m1 , m2 V temos
Soluc
{m1 , m2 } 6 E.
Objetivo Maximiza a cardinalidade |M |.

(ingles: maximum independent set, MIS)

Grafos de intervalo

Uma instancia S de seq


uenciamento de intervalos define um grafo nao-
direcionado 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
Considere uma variac
ao de Sequ
enciamento de intervalos:

Particionamento de intervalos
ancia Um conjunto de intervalos S = {[ci , fi ], 1 i n}, cada com
Inst
comeco ci e fim fi tal que ci < fi .
Soluc
ao Uma atribuicao 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)


ancia Um conjunto de intervalos S = {[ci , fi ], 1 i n}, cada com
Inst
comeco ci e fim fi tal que ci < fi .
Soluc
ao Uma atribuicao de r
otulos para os intervalos tal que cada con-
junto de intervalos com a mesma rotula e compatvel.
Objetivo Minimiza o n
umero de r
otulos diferentes.
1 Ordene S em ordem de comec o c r e s c e n t e .
2 f o r i := 1, . . . , n do
3 Exclui r o t u l o s de i n t e r v a l o s
4 precedentes c on f li t an t es
5 A t r i b u i ao i n t e r v a l o i o n u mero
6 i n t e i r o mnimo 1 que s o b r a

88
4.4. Topicos

Corretude
Com profundidade d o algoritmo precisa ao menos d rotulos.
De fato ele precisa exatamente d r
otulos. Por q
ue?
Qual a complexidade dele?
Observacoes: (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

Colorac
a o mnima

Inst
ancia Um grafo n
ao-direcionado G = (V, E).
Soluc
ao Uma colorac ao de cores c : V C tal
ao de G, i.e. uma atribuic
que c(v1 ) 6= c(v2 ) para {v1 , v2 } E.

umero de cores |C|.


Objetivo Minimiza o n

Particionamento de intervalos resolve o problema Colorac


ao
mnima para grafos de intervalo.
Colorac
a o mnima para grafos sem restric
oes e NP-completo.

4.4. T
opicos
Compress
ao de dados
Sequencia genetica (NM 005273.2, Homo sapiens guanine nucleotide bin-
ding 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 dife-
rente comprimento
A G T C
.18 .30 .16 .36

C
odigos: Exemplos

Tentativa 1

T = 0; A = 1;
G = 01; C = 10

Desvantagem: Ambguo! 01 = T A ou 01 = G?

Tentativa 2

C = 0; G = 10;
A = 110; 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


0
||| BBB1B
|
~

0 ~~ >>>1
C
~~~ >
G >
>>1
0
 >
A T

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 imple-
mentacao, vamos representar arvores binarias como estrutura da dados abs-
trata 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 binaria com as folhas representando codigos, ne-
nhum 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 numero 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
~~ 

Observacao 2: Em uma solucao otima, os dois smbolos com menor
freq
uencia ocorrem como irmaos 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 II
BBB II1
! $
? fi + fj
0 ??1
 
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 C D E F G H I K L
0.055 0.013 0.058 0.065 0.045 0.050 0.022 0.066 0.073 0.096
M N P Q R S T V W Y
0.021 0.061 0.043 0.039 0.045 0.090 0.059 0.056 0.010 0.034

93
4. Algoritmos gulosos

Resultados
O algoritmo Huffman resulta em
A C D E F G H I K L
0010 100110 1110 0101 0000 1000 100111 1101 0011 100
M N P Q R S T V W Y
000111 1011 11011 01011 10111 1111 0001 1010 000110 10110
que precisa 4.201 b/bp (compare com log2 20 4.32).

4.5. Notas
O algoritmo guloso para sistemas de moedas Magazine, Nemhauser e Trot-
ter [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] apre-
sentou 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 to-
talmente 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 pro-
blema: 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 cao)


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 2 3 4 5 6
# 1 1 2 3 5 8 13

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

Fn = Fn1 + Fn2
| {z } | {z }
popula
ca
o antiga descendentes

com a recorrencia completa


(
Fn1 + Fn2 caso n 2
Fn =
1 caso n {0, 1}

Os numeros definidos por essa recorrencia s


ao conhecidos como so n
umeros
Fibonacci. Uma implementac ao recursiva simples para calcular um numero
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
 n  n  n
1+ 5
2 12 5 1+ 5
2 1

Fn = = +
5 5 2

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 f0 := 1
2 f1 := 1
3 fi := para i 2
4
5 f i b ( n ) :=
6 i f fn = then
7 fn := f i b ( n 1)+ f i b ( n 2 )
8 end i f
9 return fn
10 end
Exemplo de uma execuc ao:
4 : f5D
vvv DD
DD
vvv DD
zv "
3 : f4H f3
vv HH
v HH
vv HH
zvv H$
2 : f3H f2
vv HH
v HHH
vv HH
zvv $
1 : f2H f1
zz HH
z HHH
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 total-
mente a cache
1 f i b ( n ) :=
2 f := 1
3 g := 1
4 for i [2, n] do
5 { invariante : f = Fi2 g = Fi1 }
6 g := f + g
7 f := g f
8 { invariante : f = Fi1 g = Fi }
9 end f o r
A ideia de armazenar valores intermedi arios usados freq
uentemente numa com-
putacao recursiva e uma das ideias principais da programaca o dinamica (a
outra senda o princpio de otimalidade, veja abaixo). A sequencia de imple-
mentacoes 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 sub-
problemas) e superposic
ao de subproblemas (reutiliza solucoes de sub-
problemas).
2. Pode ser aplicada a problemas NP-completos e polinomiais.
3. Em alguns casos o algoritmo direto tem complexidade exponencial, en-
quanto 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 nao 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 res-
postas 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 respos-
tas 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 es-
tritamente 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 uencias X = hx1 , x2 , . . . , xm i e Y = hy1 , y2 , . . . , yn i.
ancia Duas seq
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
Notacao: 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
8
0 0
<S(X , Y ) + 1
> se X = X 0 c, Y = Y 0 c
S(X, Y ) = max{S(X, Y 0 ), S(X 0 , Y )} se X = X 0 c1 , Y = Y 0 c2 e c1 6= c2
>
0 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)
operacoes. Isso com certeza e mais que o n umero de caminhos de (n, m) ate
(0, 0), que e maior que m+n
n , i.e. exponential no pior caso.
Com memoizac ao ou armazenamento de valores intermediarios, podemos re-
duzir 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

8 c[i, j] := c[i 1, j 1] + 1
9 else
10 c[i, j] := max(c[i, j 1], c[i 1, j])
11 end i f
12 end f o r
13 return c[m, n]

Exemplo

. B D C A B A
. 0 0 0 0 0 0 0
A 0 0 0 0 1 1 1
B 0 1 1 1 1 2 2
C 0 1 1 2 2 2 2
B 0 1 1 2 2 3 3
D 0 1 2 2 2 3 3
A 0 1 2 2 3 3 4
B 0 1 2 2 3 4 4

Exemplo 5.1

P R O G R A M 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
E 2 0 1 1 1 1 1 1 1 1
S 3 0 1 1 1 1 1 1 1 1
Q 4 0 1 1 1 1 1 1 1 1
U 5 0 1 1 1 1 1 1 1 1
I 6 0 1 1 1 1 1 1 1 1
S 7 0 1 1 1 1 1 1 1 1
A 8 0 1 1 1 1 2 2 2 2

Caso so 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 li-
nha 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, procede-
mos 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

. B D C A B A
. 0 0 0 0 0 0 0
A 0 0 0 0 -1 1 -1
B 0 -1 1 1 1 -2 2
C 0 1 1 -2 2 2 2
B 0 -1 1 2 2 -3 3
D 0 1 -2 2 2 3 3
A 0 1 2 2 -3 3 -4
B 0 -1 2 2 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 li-
nhas 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 recursiva-
mente nos quadrantes superior-esquerdo e inferior-direito. Em cada chamada
recursiva e criada uma lista com as operacoes executadas, e tal lista e conca-
tenada ao final das duas chamadas recursivas. A recuperacao da sequencias
de operacoes 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 i f i = 0 o r j = 0 then return
2 i f b[i, j] =- then
3 P r i n t SCML( b , X , i 1 , j 1 )
4 p r i n t xi
5 e l s e i f b[i, j] = then
6 P r i n t SCML( b , X , i 1 , j )
7 else
8 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 trans-
formam 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 carac-


ter -) 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
aultima coluna, senao 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 im-
plementac
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 dista n c i a ( s , t , n ,m):=
2 i f ( n=0) return m
3 i f ( m=0) return n
4 i f ( sn = tm ) then
5 sol0 = d i s t a n c i a (s ,t ,n 1 ,m 1)
6 else
7 sol0 = d i s t a n c i a (s ,t ,n 1 ,m 1) + 1
8 end i f
9 sol1 = d i s t a n c i a (s ,t ,n ,m 1) + 1
10 sol2 = d i s t a n c i a (s ,t ,n 1 ,m) + 1
11 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.

Comentario 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 sol1 := mi,j1 + 1
12 sol2 := mi1,j + 1
13 mi,j := min(sol0 , sol1 , sol2 ) ;
14 end f o r
15 return mi,j

Dist
ancia entre textos
Valores armazenados na matriz M para o c
alculo da distancia entre ALTO e
LOIROS

L O I R O S
0 1 2 3 4 5 6
A 1 1 2 3 4 5 6
L 2 1 2 3 4 5 6
T 3 2 2 3 4 5 6
O 4 3 2 3 4 4 5

-ALTO-
LOIROS

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 arma-
zena a sequencia de operac
oes.
Comentario 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 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
11 sol1 := mi,j1 + 1
12 sol2 := mi1,j + 1
13 mi,j := min(sol0 , sol1 , sol2 ) ;
14 pi,j := min{i | soli = mij }
15 end f o r
16 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)


ancia Um conjunto de n itens com valores vi e peso wi , 1 i n, e
Inst
um limite de peso da mochila W .
P
ao Um subconjunto S [1, n] que cabe na mochila, i.e. iS wi
Soluc
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


0
se i > n ou w = 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} se vk v e S (k 1, v vk ) definido
S (k, v) = min
tamanho S (k 1, v)

Menor tamanho entre os dois


X X
ti + tk ti .
iS (k1,vvk ) 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 oes resultantes e p q r.
umero de multiplicac

109
5. Programac
ao din
amica

Dependendo do tamanho dos matrizes, um desses produtos tem o menor


n oes. O produto de duas matrizes p q e
umero de adicoes e multiplicac
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
ao i pode ser depois qualquer matriz 1 i < n.
matrizes; o ponto de separac
Por isso o numero 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 = 2nn /(2(2n1)) = O(4n /n3/2 ) e temos Cn 2n2 , logo tem um n
umero
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.
2n

A soluc
ao dessa recorrencia e T (n) = n (2(2n 1)) = O(4n /n3/2 ) e temos
Cn 2n2 .
1 Podemos obter uma soluc
ao usando funcoes geratrizes. (Cn1 )n1 s
ao os n
umeros Ca-
talan, que t
em diversas aplicaco
es na combinatorica.

110
5.4. Multiplicac
ao de Cadeias de Matrizes

Entao nao 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 re-
correncia.
(
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 numero de multi-
plicac
oes.

Algoritmo Multi-Mat-1
Retorna o n
umero mnimo de multiplica
coes necess
arias para multiplicar a cadeia de matrizes
passada como par
ametro.

Algoritmo 5.8 (Multi-Mat-1)


oes bi , 0 i n. A
Entrada Cadeia de matrizes (A1 , A2 , . . . , An ) e suas respectivas dimens
matriz Ai tem dimensao bi1 bi .

Sada N
umero mnimo de multiplica
coes.

1 f o r i:=1 t o n do mi,j := 0
2 f o r u:=1 t o n 1 do { diagonais s u p e r i o r e s }
3 f o r i:=1 t o n u do { posi ca o na diagonal}
4 j :=i + u {u = j i}
5 mi,j :=
6 f o r k:=i t o j 1 do
7 c:= mi,k + mk+1,j + bi1 bk bj
8 i f c < mi,j then mi,j :=c
9 end f o r
10 end f o r
11 end f o r
12 return m1,n

Considerac
oes para a An
alise

O tamanho da entrada se refere ao n


umero de matrizes a serem multi-
plicadas
As operac
oes aritmeticas sobre os naturais s
ao consideradas operacoes
fundamentais

111
5. Programac
ao din
amica

An
alise de Complexidade do Algoritmo

n1
X nu
X j1
X n1
X nu
X
Cp = (1 + 4) = (1 + 4u)
u=1 i=1 ki u=1 i=1
n1 n1
+ 4u) =
X X
= (n u)(1 n + 4nu u 4u2 = O(n3 )
u=1 u=1

An
alise de Complexidade do Algoritmo

Cp [Inicializac
ao] = O(n)
ao] = O(n3 )
Cp [Iterac
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
coes e a parentiza
cao 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
coes.
1 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 }
2 f o r d:=1 t o n 1 do { para todas diagonais s u p e r i o r e s }
3 f o r i:=1 t o n u do { para cada posi c
a o na diagonal}
4 j :=i + u {u=j i }
5 mi,j :=
6 f o r k:=i t o j do
7 c:= mi,k + mk+1,j + bi1 bk bj
8 i f c < mi,j then
9 mi,j :=c
10 Pi,j = k
11 end f o r
12 end f o r
13 end f o r
14 return m1,n , p

112
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

Conteudo 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),


ao peso w : E R, seja p = (v1 , v2 , . . . , vk ) um caminho mais
com func

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 D0 := D
2 f o r k := 1 t o n
3 f o r i := 1 t o n
4 f o r j := 1 t o n
5 dkij := min(dk1 k1 k1
ij , dik + dkj )
6 return Dn

Observe que n ario armazenar as matrizes Dk explicitamente. O


ao e necess
algoritmo de Floyd-Warshall continua conrreto, usando a mesma matrix D
oes e portanto possui complexidade de espaco (n2 ).
para todas operac

Excurso 5.1
Podemos substituir as operacoes sobre (R, min, +) no algoritmo de Floyd-
Warshall por outras operac
oes, para resolver problemas similares. Por exem-
plo:
Sobre o semi-anel (R, max, min), o algoritmo resolve o problema do cami-
nho 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 maximo 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 nao e D elevado a k.)
Portanto, podemos aplicar n vezes uma multiplicacao de matrizes para ob-
ter 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


ao), uma abordagem que possui complexidade O(n3 log n).
de potenciac
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 sub-
c
ubico para a multiplicac ao de matrizes em semi-aneis implicaria em um al-
goritmo 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
distancias 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-solucao otima o caminho v2 , v3 , . . . que
passa por todos vertices exceto v1 e volta. Da mesmo forma a u ltima sub-
solucao 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

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

Se ordenamos todos os sub-conjuntos dos vertices [1, n] em ordem de , ob-


temos 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
umero entre 0 e 2n 1. Nessa caso, a ordem natural ja respeita
[1, n] como n
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 f o r i [1, n] do Ti,0 := di1 { base }
2 f o r j [1, 2n 1] do
3 f o r i [1, n] do
4 Ti,j := min2k &j=2k dik + Ti,j2k { tempo O(n) ! }
5 end f o r
6 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 estru-
tura 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 comparacoes (nossa medida de custos).

Exemplo 5.2
Considere a sequencia ordenada a < b < c < d e as probabilidades

Exemplo
Elemento a b c d
Pr 0.2 0.1 0.6 0.1
qual seria uma
arvore otima? Alguns exemplos

'&%$
!"# '&%$
!"# /.-,
()*+

Arvore correspondente

'&%$
!"# '&%$
!"# '&%$
!"# '&%$
!"#
a ==
  b <<  d

'&%$
!"# /.-,
()*+ '&%$
!"# '&%$
!"#
b << a c ==
  b ==
/.-,
()*+
c == d a c
d
que tem um numero 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 informacoes queremos minimizar a complexidade media da
busca. Em uma dada arvore, podemos observar que o n umero de com-
paracoes 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 cha-
ves, 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
h h hhhhhhh VVVVV
V+ x
x s h
o LL 3 L
LL%
yr r
1
wooo L % r
] , x1 [ ]x1 , x2 [ ]x2 , x3 [ ]x3 , [

ao, vamos introduzir chaves adicionais a0 = e an+1 =


Para facilitar a notac
. Com isso, obtemos a complexidade media de busca

X X
cM = Pr[c = ai ]prof(ai ) + Pr[ai < c < ai+1 ](prof(]ai , ai+1 [) 1);
1in 0in

ela depende da
arvore concreta.

Como achar a arvore


otima? A observac ao crucial e a seguinte: Uma das
chaves deve ser a raiz e as duas sub-arvores da esquerda e da direita devem
ser
arvores
otimas pelas sub-sequencias correspondentes.

Para expressar essa observac ao numa equac ao, vamos denotar com cM (e, d) a
complexidade media de uma busca numa sub- arvore otima para os elementos
ae , . . . , ad . Para a complexidade da
arvore inteira, definido acima, temos cM =
cM (1, n). Da mesmo forma, obtemos

X X
cM (e, d) = Pr[c = ai ]prof(ai )+ Pr[ai < c < ai+1 ](prof(]ai , ai+1 [)1)
eid e1id

Arvore de Busca Bin


aria Otima

Supondo que ar e a raiz desse sub-


arvore, essa complexidade pode ser escrito

118
5.5. Topicos

como

cM (e, d) = Pr[c = ar ]
X X
+ Pr[c = ai ]prof(ai ) + Pr[ai < c < ai+1 ](prof(]ai , ai+1 [) 1)
ei<r e1i<r
X X
+ Pr[c = ai ]prof(ai ) + Pr[ai < c < ai+1 ](prof(]ai , ai+1 [) 1)
r<id rid

X X
= Pr[ai < c < ai+1 ] + Pr[c = ai ]
e1id 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 penultimo 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 otima para as chaves ai ate aj , para 1 i j n.


arvore

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 f o r i:=1 t o n+1 do
2 pi(i1) :=qi1
3 ci(i1) :=0
4 end f o r
5
6 f o r d:=0 t o n 1 do { para todas diagonais }
7 f o r i:=1 t o n d do { da chave i }
8 j :=d + i { at e chave j }
9 pij :=pi(j1) + pj + qj
10 cij :=
11 f o r r:=i t o j do
12 c:= pij + ci(r1) + c(r+1)j
13 i f c < cij then
14 cij :=c
15 rij := r
16 end f o r
17 end f o r
18 end f o r

i/j 1 2 3 n
1
2


n

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


cada com nao 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
otima: dado um caminho mais longo u vw, u v nao e um
subestrutura
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 v w

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 amica possui O(n2 2n ) entradas, e cada entrada
ao din
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 subpro-
blemas.
Exerccio 5.2
O problema do caminho mais longo em grafos aciclicos possui uma subes-
trutura
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 subproble-
mas 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 equacao 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 divisao 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
1ik T (ni ) + f (n) caso contr
ario.

Recurs
ao natural: caso balanceado

(
(1) para n < n0
T (n) =
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 equacao 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 correspon-
dente, 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 pro-
blema 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
Metodos 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 cor-
reta.
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.
ao cn + n na equac
A express 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, conside-


rando 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 hi-


potetico 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 aximo(a, l, b(l + r)/2c)
m1 := M
2 aximo(a, d(l + r)/2e , r)
m2 := M
3 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) caso n = 1
T (n) =
T (n 1) + f (n) 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)
P
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 0ilog2 n 1 = log2 n. Portanto temos a solu cao T (n) =
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 obtemos

T (n) T (n/c2 ) f (n)


log n
= log n/c2
+ log n
c1 c2 c1 c2 c1 c2
logc2 n
e substituindo A(n) = T (n)/c1 temos

f (n)
A(n) = A(n/c2 ) + log n
c1 c2

129
6. Divis
ao e conquista

uma forma que sabemos resolver:


X f (n/ci2 ) 1 X
A(n) = logc2 n/ci2
= logc2 n
f (n/ci2 )ci1
0ilogc2 n c1 c1 0ilogc2 n

Apos 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 binarios com n bits e possvel com
tres multiplicacoes de n
umeros binarios 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 arios com no maximo dn/2e bits, e


umeros bin
os n
umeros pl + pr e ql + qr com no maximo 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) T (n/2) cn
= log n/2 + log n
3log2 n 3 2 3 2
e substituindo A(n) = T (n)/3log2 n temos

cn X n/2i
A(n) = A(n/2) + =c
3log2 n
0ilog2 n
3log2 n/2i
 i
cn X 3 cn (3/2)log2 n+1
= = log n = 3c
3log2 n 2 3 2 1/2
0ilog2 n

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 recursao
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 sub-
problema 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).

os tem cada nvel? 3i .


Quantos n

Qual o tamanho do problema em cada nvel? n/4i .

arvore? 3i c(n/4i )2 .
Qual o custo de cada nvel i da

Quantos n ltimo nvel? (nlog4 3 ).


os tem o u
Plog4 (n)
Qual o custo da
arvore? i=0 n2 (3/16)i = O(n2 ).

Exemplo
nvel nos
2
0 k (n ) SSSSS 30
ukkkk  )
1 ((n/4)2 ) ((n/4)2 ) ((n/4)2 ) 31
SSS
ukkk  )
2 ((n/4 ) ) ((n/4 ) ) ((n/42 )2 )
2 2 2 2
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

ao que T (n) = (n2 )


Prove por induc

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
umero de folhas e 3log2 n e logo temos
trabalho total por nvel. O n
X
T (n) = (3/2)i n + (3log2 n )
0i<log2 n

(3/2)log2 n 1
 
=n + (3log2 n )
3/2 1
= 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
Metodo 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 (Potenciacao-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
(
(1) se n = 0
T (n) =
T (n 1) + 1 se n > 0

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

ao para n = 2i
Algoritmo Potenciac

Algoritmo 6.6 (Potenciacao-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-Npotencia2
(
(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.
ao i em que x se encontra na sequencia S ou caso x
Sada Posic / 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 2 +i
6 i f x < am then
7 aria (i , m 1)
return Busca B i n
8 else
9 return Busca B i n
aria (m + 1 , f )
10 end i f

Complexidade da Busca-Binaria
(
(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 i f l < r then
2 m := P a r t i t i o n ( l , r , a ) ;

136
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


(
(1) se n = 1
T (n) =
T (n 1) + (n) se n > 1

atica, ou seja, T (n) O(n2 )


A complexidade dessa recorrencia e quadr

Complexidade do Quicksort no melhor caso


(
(1) se n = 1
T (n) =
2T (n/2) + (n) se n > 1

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

Complexidade do Quicksort com Particionamento Balanceado


(
(1) se n = 1
T (n) =
T ( 9n n
10 ) + T ( 10 ) + (n) 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
X
= 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)
X
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)
X
g(n) = aj f (n/bj )
j=0

138
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
1ik ai T (bi x + hi (x)) + g(x) caso contr
ario

com constantes ai > 0, 0 < bi < 1 e func


oes g, h, que satisfazem

|g 0 (x)| O(xc ); |hi (x)| x/ log1+ x


1 Uma 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 
p g(u)
T (x) x 1 + p+1
du
1 u

com p tal que 1ik ai bpi = 1.


P

Observa c
ao 6.1
As funcoes hi (x) servem particularmente para aplicar o teorema para com
pisos e tetos. Com
hi (x) = dbi xe bi x
ao de h, porque hi (x) O(1)) obtemos a recorrencia
(que satisfaz a condic
(
(1) se x x0
T (x) = P
a
1ik i T (dbi xe) + g(x) caso contrario
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 1
p c1 1p
= (n (1 + n ))
1p
c1
= (np + n) = (n)
1p

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 condic
oes exatas s
ao definidas em Leighton [47].

140
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 resol-
vido pelo teorema Master). Novamente p = 1 e temos
Z n
T (n) (n + (1 + 1/(u log u) du)) = (n(1 + [log log u]n1 )
1
= (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 quadra-


das 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 A12 B11 B12 C11 C12
= .
A21 A22 B21 B22 C21 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

ao T (n) = O(n3 ), que demonstra que essa abordagem nao e


e possui soluc
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 multi-
plicac
oes de matrizes de tamanho n/2, que leva `a recorrencia

T (n) = 7T (n/2) + O(1)

para o n
umero de multiplicac ao e T (n) = O(nlog2 7 ) = O(n2.81 ).
oes, cuja soluc

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 subcon-
juntos iguais, buscar o par de menor
dist
ancia em cada subconjunto e jun-
tar os resultados. O candidato para
o par de menor dist ancia e o par de
menor dist ancia dos dois subcon-
juntos. 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 distancia 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 numero de pontos.
A figura 6.1 mostra como isso e
possvel. Sabemos que caso o par de
pontos de menor distancia 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 m

Partic
ao xi < m m xi m
i
Recurs
ao k<i: k=i: k>i:
M (k, i 1) Encontrado M (k i, n i)

Figura 6.2.: Funcionamento do algoritmo recursivo para selecao.

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


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

Observa cao 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 numeros, 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 numeros em um conjunto L de n umeros menores que m e um conjunto R
de numeros 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 numero 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


  Z n 
p p
T (n) = n 1+ u du
1
= (np (1 + (n 1p
/(1 p) 1/(1 p)))
p
= (c1 n + c2 n) = (n).

Algoritmo 6.10 (Sele cao)


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 e l s e i f i > k then
13 return S(k, L)
14 else
15 return S(k i, R)
16 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 X
A(x) = ai xi ; B(x) = bi xi
0i<n 0i<n

possuem o produto
X  X X X
ai xi bi x i =

C(x) = aj bij ,
0i<n 0i<n 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
X
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


2
+j 2 (kj)2 )/2
X
Xk = xj (k
0j<n
2 X 2 2
= k /2
(xj j /2
) ((kj) )/2

0j<n

que e a convoluc
ao

2 X
k /2
aj bkj
0j<n

2 2
das sequencias aj = xj j /2
e bj = j /2
. Uma transformacao similar se
aplica para a inversa.

A convolucao 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:

ao Avalia A(x) e B(x) em 2n 1 pontos x1 , . . . , x2n1 . Trataremos


Avaliac
A(x) e B(x) como polin omias de grau 2n2 com coeficientes ai = bi = 0
para i n para simplificar a discussao que segue. O problema deste
passo ent
ao e avaliar um polin
omia de grau d em d + 1 pontos.

ao Calcula C(xi ) = A(xi )B(xi ). C(x) possui grau 2n 1.


Multiplicac

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 polin
omio A(x) de grau n 1 em n pontos x0 , . . . , xn1
pode ser escrito da forma
a
A(x0 ) 1 x0 x20 xn1 0
0
A(x1 ) n1 a1
1 x1 x21 x1

=

.. .
..

.
A(xn1 ) 1 xn1 x2n1 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 va-
lores nos pontos A(x0 ), . . . , A(xn1 ) nos fornece os coeficientes ai , i.e., resolve
o problema da interpolac ao.

ao de A(x) = 0i<n ai xi pode ser sepa-


P
Avaliac
ao em O(n log n) A avaliac`
rado 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
X X
Ap (x) = ai xi ; Ai (x) = ai xi .
02i<n 02i+1<n

Aplicando essa recurs ao para o ponto x tem custo (n), logo um custo total de
(n2 ) para a avaliacao 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 avaliacoes 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 obvia-
mente 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 sao 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)


i k
P
Entrada Polinomio 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 f f t ( a0 , . . . , an1 , ) :=
2 i f = 1 return A(1)
3 { A(x) = Ap (x2 ) + xAi (x2 ) }
4 f f t ( a0 , a2 , . . . , an2 , 2 ) { avalia Ap }
5 f f t ( a1 , a3 , . . . , an1 , 2 ) { avalia Ai }
6 f o r j [0, n) do
7 A( j ) = Ae ( 2j ) + wj Ai ( 2j )
8 return A( 0 ), . . . , A( n1 )

ao: O algoritmo funciona igualmente para 1 .


Observac

Interpolac
ao em O(n log n) A matriz de avaliac
ao usando as raizes comple-
xas e

0 0 0

1
1 1 2 n1
ij
2 4

V = V () := 1
2(n1)
= ( )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
cao 6.4
Uma matriz unit
aria

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


uma matriz unitaria e a sua conjugada transposta e que V / n e unitaria.

Lema 6.1
A matriz V / n e unit
aria.

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
X X 1 (jk)n
1/n lj ( lk ) = 1/n ( jk )l = = [j = k]
1 jk
0l<n 0l<n

O pen ultimo passo e justificado porque se trata de uma serie geometrica, e o


ltimo passo porque n = 1 tal que o produto e 0, exceto no caso j = k em
u
que a soma e n. 
Logo V V = nI que implica V 1 = V /n = V ( 1 )/n. Essa u ltima ob-
servac
ao nos fornece uma maneira facil 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
numeros em bases arbitr arias. Ele e conhecido como algoritmo de Karat-
suba [41]. Um algoritmo mais eficiente e do Schonhage e Strassen [59] que
multiplica em O(n log n log log n). Furer [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
otese T (n) cnlog2 3 falha? Qual e uma hip
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 ele-
mento 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


memoria.

s1 S1

s2 S2 s2 S2

O problema das n-rainhas

Problema das n-rainhas


Inst ao n n, e n rainhas.
ancia Um tablado de xadrez de dimens

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

Existem 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 n
n! 2n (1 + O(1/n)) (7.1)
e

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 encon-
trada

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

a b

a b c

a b c a b c 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 meca-
nismos embutidos para a implementacao 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).
ao Uma cobertura C V , i.e. e E : e C 6= .
Soluc

Objetivo Minimiza |C|.

A vers
ao de decis
ao de Cobertura por ve
rtices e NP-completo.

O que fazer?
2

1
6
4

3 5

23 7

10
20 21
9

22
25 8
19

14
18 24 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
ao de C com a cobertura mnima de G0 e
vertices contem C, e a uni
uma cobertura mnima de G.
1 Reduz ( G ) :=
2 while ( alguma r e g r a em b a i x o s e a p l i c a ) do
3 Regra 1 :
4 i f u V : deg(u) = 1 then
5 s e j a {u, v} E
6 C := C {v}
7 G := G {u, v}
8 end i f
9 Regra 2 :
10 i f u V : deg(u) = 2 then
11 s e j a {u, v}, {u, w} E
12 i f {v, w} E then
13 C := C {v, w}
14 G := G {u, v, w}
15 end i f
16 end while
17 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 minVertexCover ( G):=
2 i f E = return
3 e s c o l h e {u, v} E

159

7. Arvores de busca, backtracking e branch-and-bound

4 C1 := minVertexCover(G u) {u}
5 C2 := minVertexCover(G v) {v}
6 return a menor c o b e r t u r a C1 ou C2

Soluc
ao
otima?
2

1
6
4

3 5

23 7

10
20 21
9

22
25 8
19

14
18 24 15
12

17

16 13 11

ao acima satisfaz Tn = 2Tn1 + (n) = (2n ).


A complexidade da soluc

Observa
cao 7.1
Caso o grau maximo 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 C1 := {v} mvc0 (G \ {v})


8 C2 := N (v) mvc0 (G \ N (v) \ {v})
9 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 so 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 bi-
omio caracterstico e z 4 z 3 + 1 e possui a maior raiz
furcacao (1, 4). O polin
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

8 6

7 5 5 3

6 4 4 2 4 2

5 3 3 1 3 1

4 2

3 1


Figura 7.2.: Cobertura mnima: Arvore de busca para n = 9

3-SAT

Arvore de busca [53]

x1 x2 x3

x1 x2 x3 x1 x2 x3 x1 x2 x3

T(n) = T(n-1) + T(n-2) + T(n-3)

Vetor de bifurcac
ao (1, 2, 3).
omio caracterstico: z 3 z 2 z 1 1.
Polin
Maior raiz: 1.84.
umero de folhas: (n ).
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).

ao Um conjunto independente M V , i.e. para todo m1 , m2 V


Soluc
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 contrario podemos remover v. Com isso obtemos a recorrencia

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

para o numero 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 pro-
blems. [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 for-


nece 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. Observacao: 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)


ancia Programa inteiro P = max{ct x | Ax b, x Z+
Inst n
}.
Saida Soluca
o inteira o
tima.
1 { usando fun ca o z para estimar l i m i t e superior }
2 z:= { limite inferior }
3 A:= {(P, g(P ))} { no s ativos }
4 while A 6= do
5 E s c o l h e : (P, g(P ) A ; A := A \ (P, g(P ))
6 Ramifique : Gera subproblemas P1 , . . . , Pn .
7 f o r a l l Pi , 1 i n do
8 { adiciona , se permite melhor solu ao }
c
9 i f z(Pi ) > z then
10 A := A {(Pi , z(Pi ))}
11 end i f
12 { a t u a l i z e melhor solu ao }
c
13 i f ( s o l u c a
o z(Pi ) e v i a
v e l ) then
14 z := z(Pi )
15 end i f
16 end f o r
17 end while

Exemplo 7.2 (Aplica c


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

1
2 1
1
2 5
2 3
1 1
1 3

3 4
2

Aplicando somente backtracking obtemos a seguinta arvore de busca:

165

7. Arvores de busca, backtracking e branch-and-bound

0
5
2 3 4 5

2 2 3 1
6 6 7 5
3 4 5 2 4 5 2 3 5 2 3 4

3 3 3 3 4 5 2 4 2
6 6 6 6 7 8 5 7 5
45 35 34 45 34 23

5 6 5 4 6 44 4 3 3 3 4
7 8 7 6 8 66 6 5 5 5 6
5 4 5 3 4 35 4 4 3 3

6 7 65 5 5 4
7 8 76 6 6 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 distancia mnima e aplicando branch&bound obtemos os custos par-
ciais 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
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!)

ao n2 2n usando programacao dinamica.


Este problema tem soluc

ario n2n de memoria!


Mas: para resolver em PD e necess

O problema do caixeiro viajante

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

a b c

b c a c a b

c b c a b a

Problema de Enumerac
ao de conjuntos

167

7. Arvores de busca, backtracking e branch-and-bound

Enumerac
a o de conjuntos

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


nencial 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 enumeracao de todos os conjuntos gera uma solucao de custo
exponencial 2n
Solucao via PD possui complexidade de tempo O(Kn) (pseudo-
polinomial) e de espaco O(K)

Problema de colorac
ao em grafos

Problema de Colorac
a o em Grafos

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
ao tem a mesma cor: c(u) 6= c(v) para
tal que vertices vizinhos n
(u, v) E.

168
7.2. Branch-and-bound

umero de cores |C|.


Objetivo Minimizar o n

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 numero 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 bipar-
tido).
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?

b
f

a c
e
d

De quantas cores precisamos?

b b
f f

a c a c
e e
d d

(Precisamos de 4 cores!)

Backtracking

Algoritmo 7.4 (bt-coloring)


Entrada Grafo n
ao-direcionado G=(V,A), com vertices V = [1, n].
ao c : V [1, 4] do grafo.
Sada Uma colorac

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
a
d

b e

De quantas cores precisamos?

171

7. Arvores de busca, backtracking e branch-and-bound

c c
a a
d d

b e b 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?

a d

e
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 ca-
pacidade 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 reali-
zada

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 propri-
edades) para efetuar cortes
explora a
arvore da forma que convier
aplicado apenas a problemas de otimizacao.

M
etodos Exatos

Problemas de Otimizac
ao Combinatoria: 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 + heu-


riskein = 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 analise 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 expressao 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.

ao por z n e soma sobre todos


2. Multiplica a equac P n. Com isso obtemos
uma equac ao geradora G(z) = n gnn no lado da esquerda.
ao com a func
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 omio de grau menos que m1 + + ml
umeros diferentes, e P (z) e um polin
ent
ao

[z n ]G(z) = f1 (n)n1 + + fl (n)nl para todo n 0 (7.2)

omio de grau mk 1.
com fk (n) um polin

Corol
ario 7.1 (Graham, Knuth e Patashnik [32])
Dado a recorrencia
(
(1) n max1ik di
tn = P
i[k] i tndi 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
X X X
G(z) = tn z n = i z di G(z) + c zi
n i[k] i[d1]

e assim
zi c i[d1] z i
P P
c i[d1]
G(z) = P = P
1 i[k] i z di 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 )

omio de grau m 1.
com f (n) um polin 

176
8. Algoritmos de aproximac
ao

8.1. Introduc
ao
Problemas de otimizac
ao

Definic
ao 8.1
Um problema de otimizac ao e uma relac aria P I S com instancias
ao bin
x I e soluc
oes y S, tal que (x, y) P e com

uma func
ao de otimizac ao de objetivo) : P N (ou Q).
ao (func

um objetivo: Encontrar mnimo ou m


aximo OPT(x) = opt{(x, y) |
(x, y) P}.

Tipo de problemas

Construc
ao: Dado x, encontra soluc otima y e o valor (x).
ao

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.
ao P e polinomialmente limita.
2. A relac
ario, polinomialmente limitado: (x, y) P decidvel
3. Para y arbitr
em tempo polinomial.
4. e comput
avel em tempo polinomial.
NPO contem todos problemas de otimizacao, que satisfazem criterios
mnimos de tratabilidade.

ao 13.1): P e polinomialmente limitada, se para solucoes


Lembranca (veja definic
(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 cons-
tante.
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 cons-
tante.
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 com o erro relativo, porque r [1, ].)
ao tem perigo de confus

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 VC GV( G ) :=
2 (C, G) := Reduz ( G )
3 i f V = then
4 return C
5 else
6 e s c o l h e v V : deg(v) = (G) { grau m
aximo }
7 return C {v} VC-GV(G v)
8 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 iteracao 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
G (v) kGi k kGi k

Gi (Gi ) = vC i = .
|C | |C | OPT(G)
Como o grau m
aximo e maior que o grau medio temos tambem
kGi k
(Gi ) .
OPT(G)
Com isso podemos estimar
X X kGi k X kGOPT k
(Gi )
|OPT(G)| |OPT(G)|
0i<OPT 0i<OPT 0i<OPT
X
= kGOPT k = kGk (Gi )
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
ao e log |G|.
vertice, a taxa de aproximac 

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 VC B( G ) :=
2 (C, G) := Reduz ( G )
3 i f V = then
4 return C
5 else
6 e s c o l h e v V : deg(v) = (G) { grau m
aximo }
7 C1 := C {v} VC-B(G v)
8 C2 := C N (v) VC-B(G v N (v))
9 i f |C1 | < |C2 | then
10 return C1
11 else
12 return C2
13 end i f
14 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 VC GE( G ) :=
2 (C, G) := Reduz ( G )
3 i f E = then
4 return C
5 else
6 e s c o l h e e = {u, v} E
7 return C {u, v} VC-GE(G {u, v})
8 end i f

Proposic
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.
ao Um sequenciamento S : [n] [m], i.e., uma alocacao das tarefas
Soluc
as m
` aquinas.

Objetivo Minimizar
P o makespan (tempo terminal)
maxj[m] in|S(i)=j li .

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.

Proposic
ao 8.3
aria e uma 2 1/m-aproximacao.
Sequenciamento em lista com ordem arbitr

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
P foi alocada, todas as outras ma quinas estavam com tempo ao menos
i:S(i)=h il l k , portanto

X
m li lk + lk W
i:S(i)=h
X
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).

Proposic
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 ormula L(V ), = C1 C2 Cn em FNC.
ancia F
Soluc ao de valores de verdade a : V B.
ao Uma atribuic
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 clausulas satis-
ao: E[X] (1 2l )n com l o n
feitas. Afirmac umero mnimo de literais por
usula. Portanto, com l 1, temos E[X] n/2.
cla
Prova da afirmacao: 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

ancia Itens X = [1, n] com valores vi N e tamanhos ti N , para


Inst
i X, um limite M , tal que ti M (todo item cabe na mochila).
P
Soluc ao S X tal que iS ti M .
ao Uma selec
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:

M 1 kn 1 kn k
OPT(x)/(x) = = =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 nao coloca na mochila. Nesse ponto
temos valor e tamanho
X
vj = vi K-G (x) (8.1)
1i<j
X
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 afirmacao: 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 :

vj
OPT(x) vj + (M tj ) < 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 numero 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

ao.) Considere a particao A B C


Prova. (Da segunda taxa de aproximac
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 contai-
neres tem espaco livre menos que 1/3, senao 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 contrario (nenhum container contem somente itens tipo D), PiCD en-
contra a soluc
ao
otima. Isso pode ser justificado pelos seguintes observacoes:

1. O numero 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 mos-
trar
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 sao 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


11
PiCD (x) OPT(x) + 4
9

Baker, 1985
11
PiCD (x) OPT(x) + 3
9

8.4. Esquemas de aproximac


ao
Novas considerac
oes

Frequentemente 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 aproximacao 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):
P
Algoritmo MM-PD com programac
ao dinamica (pag. 108): tempo O(n i vi ).
Desvantagem: Pseudo-polinomial.

ancia do problema do mochila com I = ({vi }, {ti }).


Denotamos uma inst
1 MMPTAS( I , r ) :=
2 vmax:= maxi {vi }
vmax
3 t := log r1r n
0 t
4 vi := bvi /2 c para i = 1, . . . , n
5 a n c i a I 0 = ({vi0 }, {ti })
D e f i n e nova i n s t
0
6 return MM PD( I )

Teorema 8.1
ao em tempo O(rn3 /(r 1)).
MM-PTAS e uma r-aproximac

192
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 
0 vi
O n vi = O n
i i
((r 1)/r)(vmax /n)
   
r 2
X r 3
=O n vi /vmax = O n .
r1 i
r1

ao obtida pelo algoritmo e S uma solucao


Seja S = MM-PTAS(I) a soluc
otima.
X X 
2t vi /2t

MM-PTAS (I, S) = vi definicao de bc
iS iS
X
2t vi /2t otimalidade de MM-PD sobre vi0
 

iS
X
vi 2 t (A.10)
iS
X 
= vi 2t |S |
iS
OPT(I) 2t n

Portanto
OPT(x) t
OPT(I) MM-PTAS (I, S) + 2t n MM-PTAS (I, S) + 2n
vmax
2t n
 
OPT(I) 1 MM-PTAS (I, S)
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 resol-
ver 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 multiplo com complexidade O(n12(log 1/)/e )
(Chekuri, Kanna, 2000);
o problema do conjunto independente m aximo em grafos com complexi-
2 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
Qual a qualidade desse algoritmo? E um algoritmo de aproximacao? Caso
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 variavel correspondente. Repetindo esse procedi-
mento, 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 nao?

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
ao, se os fluxos respeitam os limites da capacidade (fe ce ) e
chama circulac
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 X X X
f (v) = fe fe
vV vV e + (v) e (v)
X X
= f(v,u) f(u,v) = 0
(v,u)E (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.

Fluxo st ma
ximo

Inst
ancia Grafo direcionado G = (V, E, c) com capacidades c nos arcos,
um vertice origem s V e um vertice destino t V .
ao Um fluxo f , com f (v) = 0, v V \ {s, t}.
Soluc
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)
ao de fluxo nos vertices em V \ {s, t}.
pela conservac 
Uma formulac
ao como programa linear e

maximiza f (s) (9.2)


sujeito a f (v) = 0 v V \ {s, t}
0 fe ce e E.

Observa c
ao 9.1
O programa (9.2) possui uma soluc ao, porque fe = 0 e uma solucao viavel. O
sistema nao e ilimitado, porque todas vari
aveis s
ao limitadas, e por isso possui
uma solucao 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

w 30
0
w 0
w 20
30 20
20 30 10
s t
s 30 t 10 10 0
s 20 t 0
10 10
10 10 0 20
10 0
10 20 u v
20
u v
20 u v 0

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 ce f e .
e=(vi ,vi+1 )
0i<n

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 capaci-
dade 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 so-
mente capacidades em N (ou equivalente em Q: todas capacidades podem ser
multiplicadas pelo menor m
ultiplo em comum das denominadores das capaci-
dades.)

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 iteracoes. Inicialmente fe = 0. Em


cada iteracao, 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 definicao do grafo residual uma capacidade


gargalo g(f, P ) > 0. O fluxo f (s) aumenta exatamente g(f, P ). 

Lema 9.5
O
P numero de iterac oes do algoritmo Ford-Fulkerson e limitado por C =
c
e + (s) e . Portanto ele tem complexidade O((n + m)C).

Prova. C e um limite superior do fluxo maximo. Como o fluxo inicial-


mente 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 au-
mento 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

Definic
ao 9.2
Seja X := V \ X. Escrevemos F (X, Y ) := {(x, y) | x X, y Y } para os
arcos
P passando do conjunto X para Y . O fluxo de X para Y e f (X, Y ) :=
eF (X,Y ) fe . Ainda estendemos a notac
ao do fluxo total de um vertice (9.1)
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 .
Uma partic e um corte st, se s X e t X.
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. X
f (X) = f (X,X) f (X, X) = f (v) = f (s).
vX

(O ultimo 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),
em Gf a partir de s. Qual o valor do fluxo nos arcos entre X e X? Para um
temos fe = ce , sen
arco e F (X, X) ao Gf ter a um arco forward e, uma
ao. Para um arco e = (u, v) F (X, X) temos fe = 0, senao Gf tera
contradic
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 maximo. 
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 iteracoes 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. sele-
cione o caminho mais curto entre s e t. Nos temos (sem prova)

203
9. Algoritmos em grafos

v2 v4
1
v
N M M
N s t
s 1 t r2 1
N M M
N v1 v3
u r

Figura 9.4.: Esquerda: Pior caso para o algoritmo de Ford-Fulkerson com pe-
sos 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 =
(1 + 1 4)/2 com 0.217 a u nica raiz real de 1 5x + 2x
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 , senao a dist
ancia do v in Gf e no maximo a
ancia do v in Gf 0 : Supondo (u, v) E(Gf ) temos
dist
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


ao imediata. Caso v 6= t, temos
de s para u. Para v = t isso e uma contradic

f (v) = f (u) 1
f 0 (u) 1 (*)
= (v) 2
f0 porque uv est
a num caminho mnimo em Gf 0 ,

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
maximo 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 maximo (n 2)/2 = n/2 1 vezes. 
Outras solucoes (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 f (S)
sujeito a f (v) = 0 v V \ (S T ) (9.3)
f e ce e E.

205
9. Algoritmos em grafos

Ano Referencia Complexidade Obs


1951 Dantzig O(n2 mC) Simplex
1955 Ford & Fulkerson O(nmC) Cam. aument.
1970 Dinitz O(n2 m) Cam. min. aument.
1972 Edmonds & Karp O(m2 log C) Escalonamento
1973 Dinitz O(nm log C) Escalonamento
1974 Karzanov O(n3 ) Preflow-Push
1977 Cherkassky O(n2 m1/2 ) Preflow-Push
1980 Galil & Naamad O(nm log2 n)
1983 Sleator & Tarjan O(nm log n)
1986 Goldberg & Tarjan O(nm log(n2 /m)) Push-Relabel
1987 Ahuja & Orlin O(nm + n2 log
C)
1987 Ahuja et al. O(nm log(n log C/m))
1989 Cheriyan & Hagerup O(nm + n2 log2 n)
1990 Cheriyan et al. O(n3 / log n)
1990 Alon O(nm + n8/3 log n)
1992 King et al. O(nm + n2+ )
1993 Phillips & Westbrook O(nm(logm/n n + log2+ n))
1994 King et al. O(nm logm/(n log n) n)
1997 Goldberg & Rao O(m3/2 log(n2 /m) log C)
O(n2/3 m log(n2 /m) log C)

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. Es-
querda: 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 sim-
ples 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 } (9.4)

ce
eE
0
ce = c({s}, {s}) e = (s , s)

c({t}, {t}) e = (t, t )

Lema 9.10
Se f 0 e soluc axima de (9.4), f = f 0 |E e uma solucao maxima de (9.3).
ao m
Conversamente, se f e uma solucao maxima de (9.3),

fe
eE
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 maxima 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 valido 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 f (s)
sujeito a f (v) = 0 v V \ {s, t} (9.5)
be fe ce e E.
O problema (9.5) pode ser reduzido para um problema de fluxo maximo sim-
ples 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} (9.6)

ce be e E

0
ce = b(v,u) e = (v, t)

b(v,u) e = (s, u)

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 circulacao Para G = (V, E, c) com demandas dv , com
dv > 0 para destinos e dv < 0 para fontes, considere
existe f
s.a f (v) = dv v V (9.7)
f e ce e E.
P
Evidentemente vV dv = 0
e uma condicao necessaria (lema (9.1)). O
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} (9.8)

ce
eE
ce = dv e = (s , v)
e = (v, t )

dv

Lema 9.12
Problema (9.7) possui
P uma soluc
ao sse problema (9.8) possui uma solucao com
fluxo m
aximo D = v:dv >0 dv .

Prova. (Exerccio.) 

Circulac
oes com limites inferiores Para G = (V, E, b, c) com limites inferi-
ores e superiores, considere

existe f
s.a f (v) = dv v V (9.9)
be f e c e e E.

O problema pode ser reduzido para a existencia de uma circulacao com so-
mente limites superiores em G0 = (V 0 , E 0 , c0 , d0 ) com

V0 =V
E0 = E (9.10)
ce = ce be
X X
d0v = dv be + be (9.11)
e (v) 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 sufi-


ciente) mas no m aximo c0i perguntas (para nao cansar ele). As perguntas
podem ser feitas somente sobre produtos que o cliente ja comprou.
oes suficientes sobre um produto, entre pi e p0i cli-
Para obter informac
entes tem que ser interrogados sobre ele.
Um modelo e um grafo bi-partido entre clientes e produtos, com aresta (ci , pj )
caso cliente i ja 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
.
ao do conjunto de todos pixels I em A B tem um valor de
partic
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 iA iB (i,j)AB
X X X
= ai + bi + pij .
iB iA (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
30 19
10 j
12 i 10
10

10 10 1010

20 k 10 15
l
10 i j k l
16 25 a 30 19 12 10
t
b 20 15 16 25

ao para uma imagem 2 2. Direita: Tabela


Figura 9.6.: Exemplo da construc
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) Segmentacao somente com probabilida-
des (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

Sequenciamento 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 pa-
res 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 avioes, 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 trans-
porte 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
ao de arestas M E tal que todo vertice tem no maximo grau 1 em
selec
G0 = (V, M ). (Notacao: M = {u1 v1 , u2 v2 , . . .}.) O nosso interesse em em-
parelhamentos 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.
ao Um emparelhamento M E, i.e. um conjunto de arcos, tal que
Soluc
para todos vertices v temos |N (v) M | 1.
Objetivo Maximiza |M |.

ximo (EPM)
Emparelhamento de peso ma
ao-direcionado com pesos c : E Q
Entrada Um grafo G = (V, E, c) n
nas arestas.
ao Um emparelhamento M E.
Soluc

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)

ao-direcionado com pesos c : E Q


Entrada Um grafo G = (V, E, c) n
nas arestas.
ao Um emparelhamento perfeito M E, i.e. um conjunto de arcos,
Soluc
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
(
0 ce caso e E
ce = .
0 caso contr
ario

Dado um emparelhamento M em G podemos definir um emparelhamento per-


feito 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 correspon-
dente em V 0 com uma aresta de custo 0 em M 0 . Similarmente, os restantes
ao emparelhados em V 0 s
vertices n ao emparelhados em M 0 com arestas de
custo 0 entre si. Pela construcao, 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 :=
1 + eE |ce |, novos pesos c0e = C ce e um grafo G0 = (V, E, c0 ). Para
P
emparelhamentos M1 e M2 arbitr arios temos
X X X
c(M2 ) c(M1 ) ce ce = |ce | < C.
eE eE eE
ce >0 ce <0

Portanto, um emparelhamento de peso maximo em G0 tambem e um empare-


axima: Para |M1 | < |M2 | temos
lhamento de cardinalidade m

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 em-
parelhamento perfeito mnimo para G = (V, E, c) e
X
minimiza ce xe (9.12)
eE
X
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
X
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 bi-
partido (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.
Observacao 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 for-
mulacao 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
numero m aximo de cordas (diagonais) horizontais ou verticais entre vertices
de reflexo sem intersecc
ao.
O numero l e o tamanho do conjunto independente maximo no grafo de in-
tersecc
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 empa-
relhamento m aximo e igual n h. Podemos obter o conjunto independente
que procuramos usando a metade do emparelhamento (os vertices de uma
parte so) 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.

s t

Figura 9.9.: Reduc


ao do problema de emparelhamento maximo para o pro-
blema 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 numero 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 }, pode-


mos 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 contrario. 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. Notacao: 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 nao-ponderado em grafos bi-partidos
pode ser resolvido em tempo O(mn).

Prova. Ultima observac
ao e o fato que o emparelhamento maximo tem ta-
manho O(n). 

Observa
cao 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 empare-
lhamento. 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

nao sabemos como achar esse conjunto de forma eficiente. Portanto, procu-
ramos 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
Apos 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 com-
pletada 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. Entao |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 contrario: 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


ao livres em M 0 .
s
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 em-
parelhamento 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

|M ` |M | caminhos M -aumentantes disjuntos. Mas entao
existem ao menos

|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-
ritmoexecutar no m aximo mais n fases. Portanto, o n umero total de fases
e O( n). 
O algoritmo de Hopcroft-Karp e o melhor algoritmo conhecido para encontrar
emparelhamentos m aximos em grafos bipartidos nao-ponderados1 . Para sub-
classes 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
e Motwani [23, 24] melhoraram o algoritmo para O( nm(2 logn m)).

222
9.2. Emparelhamentos

Sobre a implementac ao A seguir supomos que o conjunto. de vertices e


V = [1, n] e um grafo G = (V, E) bi-partido com particao V1 V2 . Podemos
representar um emparelhamento usando um vetor mate, que contem, para
cada vertice emparelhado, o ndice do vertice vizinho, e 0 caso o vertice e
livre.
O nucleo 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 s e a r c h p a t h s ( M ) :=
2 for a l l v V do mv := false
3 for a l l e E do He := false
4
5 U1 := {v V1 | v livre}
6
7 do
8 { determina vizinhos em U2 via arestas l i v r e s }
9 U2 :=
10 fo r a l l u U1 do
11 mu := true
12 f o r a l l uv E , uv 6 M do
13 i f not mv then
14 Huv := true
15 U2 := U2 v
16 end i f
17 end f o r
18 end f o r
19
20 { determina vizinhos em U1 via arestas emparelhadas }
21 found := f a l s e { ao menos um caminho encontrado? }
22 U1 :=
23 fo r a l l u U2 do
24 mu := true
25 i f ( u l i v r e ) then
26 found := t r u e
27 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
Apos 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

.
ao ponderada em grafos bi-partidos Dado um grafo G = (S T, E)
Soluc
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 cao 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 conhe-
cido 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 cao 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 M -aumentanteP P = (v1 v2 . . . v2n+1 )
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 empare-
lhamento 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 ori-
entadas de S para T com peso le := we . Com isso a aplicacao do caminho
M -aumentante
P P produz um emparelhamento de peso c(M ) l(P ) em que
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 M =
2 while ( e x i s t e um caminho M aumentante P ) do
3 e n c o n t r a o caminho M aumentante mnimo P em HM
4 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) nega-
tivo, 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
aximo k arcos ou caso nao existe. Temos
de s para t usando no m

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 inducao. Para M = o teorema e correto. Seja M um empa-


relhamento 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 nao existe caminho M -aumentante com comprimento negativo no algo-
ritmo 9.3, M e maximo.

226
9.2. Emparelhamentos

v10 v9 v8 v7 v10 v9 v8 v7

v1 v2 v6 v5 v1 v2 v6 v5

v3 v4 v3 v4

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 cardi-
nalidade no m aximo |M |. Pelo teorema de Hopcroft-Karp, existem |N ` |M |
caminhos M -aumentantes disjuntos de vertices, nenhum com comprimento
ao do algoritmo. Portanto c(N ) c(M ),
negativo, pelo criterio de terminac
uma contradicao. 

Observa cao 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 sao 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 ca-
minho 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 au-
mento o emparelhamento. O problema e que o laco impar v6 v4 v5 v6 nao pode
ser eliminado sem consequencias.

227
9. Algoritmos em grafos

Cardinalidade
q Ponderado
Bi-partido mn
O(n log n
) [5] O(nm + n2 log n) [44, 54]
log(n2 /m)
O(m n log n ) [24]
2
Geral O(m n log(nlog n
/m)
) [31, 26] 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 pro-
blema de otimizac ao. Diferente de uma heurstica, o algoritmo garante a
qualidade da aproximac ao no pior caso. Dado um problema e um algo-
ritmo de aproximac ao A, escrevemos A(x) = y para a solucao aproximada
da inst ao, y para a solucao otimo e
ancia x, (x, y) para o valor dessa soluc

OPT(x) = (x, y ) para o valor da soluc ao
otima. Lembramos que uma apro-
ximacao 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.

Definic
ao 10.1
Uma reducao preservando a aproximacao entre dois problemas de minimizacao
1 e 2 consiste em um par de funcoes f e g (computaveis em tempo polino-
mial) 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 -aproximacao 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
ao-direcionado com custos ca 0 nos
Seja G = (V, A) um grafo completo, n
arcos. O problema da arvore Steiner mnima (ASM) consiste em achar o

229
10. Algoritmos de aproximac
ao

1 1
2 2 2 2
1 1 1 1

3 2

Figura 10.1.: Grafo com fecho metrico.

subgrafo conexo mnimo que inclui um dado conjunto de vertices necessarios


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 arvore geradora mnima sobre R V 0 . Portanto a
ao e a
dificuldade e a selec
ao dos vertices Steiner da solucao otima.

Defini
cao 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
1 1
2

Figura 10.2.: AGM sobre R e melhor soluc


ao. : vertice em R, : vertice
Steiner.

Prova. Considere a soluc otima S de ASM. Duplica todas arestas1 tal


ao
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 reducao 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 metrico 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
multiplas 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. (Ob-
serve que todos k componentes devem ser nao 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
multiplo. Para calcular o corte isolante para um dado terminal si , identifi-
camos 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 self-
loops, 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

e ainda w(Ci ) 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 analise 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 unico 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 dos cortes definidos por k 1 arestas na AGH separa G


ao: A uni
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 uniao 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.

Prova. Seja C = 1ik Ci uma corte mnimo, decomposto igual `a prova


S
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 ao R .
oes: relac
Problema de decis ao {S, N } Equivalente: conjunto
ao: Func

L (uma linguagem).
Problema de otimizac
ao: Tratado como problema de decisao com
ao k? ou Existe solucao k?.
a pergunta Existe soluc
Freq
uentemente: Alfabeto = {0, 1} com codificacao adequada.

Convenc
ao 11.1
Sem perda de generalidade suporemos = {0, 1}.

Defini
cao 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.
Alan Mathison
But I was completely convinced only by Tu- Turing (*1912,
rings paper. +1954)
(Godel em uma carta para Kreisel, em maio
de 1968, falando sobre uma definica
o da com-
putaca
o.).

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 two-
dimensional character of paper is no essential of computation. I as-
sume 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 diffe-
ring 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 com-
pound 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
aquina de Turing que reconhece a linguagem {wwR |
Seja = {0, 1}. Uma m

w } e

Notac
ao gr
afica

242
11.1. Introducao

(convenc
oes e abreviac
oes do Turing machine simulator; veja pagina da disci-
plina).

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


cida de M .
L(M ) = {w | M aceita w}

Uma linguagem tal que existe um MTD M que reconhece ela e Turing-
reconhecvel 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 com-


put
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 maquina com uma u nica fita representa os k fitas da
forma
#a11 . . . a1l1 # . . . #ak1 . . . aklk .
Para representar as posicoes 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.

ao i da fita, com i Z. A maquina com uma


2. Seja ai o smbolo na posic
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 traba-
lho 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 compri-


mento w = dlog ||e. Na simulacao 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 siste-


maticamente.

5. Usando uma representacao linear da fita, por exemplo linha por linha
no caso de duas dimensoes, 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 cao 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). 

Proposic
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
smbolos com uma marca a. M 0 n ao altera as primeiras n posicoes da sua
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 posicoes 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
ao visitada por M 0 e no m
t(n), a maior posic 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 Tu-


ring universais. Uma m aquina universal e capaz simular a execucao de qual-
quer 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
e sadas da func
ao de transicao de M . E conveniente usar uma codificacao
com duas caractersticas: (i) Cada string em {0, 1} representa alguma MT.
Caso a codificacao 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 representacao 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 numero de fitas a numero
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 numero de passos de U ent ao e limite por c T 2 com c = 25c0 . 

Observa
cao 11.3
Uma simulac
ao de MTND e possvel com os mesmos limites.

Exemplo 11.2 (M aquina universal)


aquina M = ({u, d}, {a, b}, {a, b, }, ) com
Considere a m

= {ua ubL, ub uaL, u dbR, da u R, db daR, d uaL}.

Essa maquina 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 maquina RAM
A maquina 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 ins-


truc
oes,

uma mem
oria infinita de n
umeros inteiros e

instruc
oes elementares (controle,transferencia inclusive enderecamento
indireto,aritmetica).

A maquina 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, maquina RAM, maquina
pontador, circuitos l
ogicos, aut
omatos celulares (Conway), ava-
liac
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 es-


sas 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 tempo-
construtveis e espaco-construtveis.

Definic
ao 12.1
Uma funcao t(n) e tempo-construtvel caso existe uma MTD com com-
plexidade 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 cao 12.1


A restric
ao para func
oes tempo- ou espaco-construtveis exclui funcoes nao-
computaveis 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 funcao que nao e computavel; 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 ]; NP = NTIME[nk ]
k0 k0

Definic
oes similares para espaco:
[ [
PSPACE = DSPACE[nk ]; NSPACE = NSPACE[nk ]
k0 k0

Com a observac
ao acima, temos

P NP DSPACE NSPACE .

252
12.2. Hierarquias basicas

Prova. (Da observac ao.) Como uma m aquina n


ao-determinstica e uma ex-
tens
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 enu-
mer
aveis: seja M1 , M2 , . . . uma enumerac
ao deles e seja x1 , x2 , . . . uma enu-
ao das palavras em . Define
merac

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 maquina 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
contradicao. Caso n ao, Mi n ao aceita em tempo t(|xi |), e portanto xi L,
outra contradicao. 

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

oes f, g, com g(n) log2 n espaco-construtvel e f = o(g) temos


Para func

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
ao, para f o(g) e suficiente que f cg a partir de um n > n0 .
definic
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 ultra-
f (n)
passa c2 passos; c2 depende das caractersticas da maquina simulada
(n
umero de estados, etc.): com isso podemos escolher uma maquina

Com essas preparacoes, 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.
Nao existe uma MT que, em espaco f (n) reconhece L(M ): Supoe que M 0
seria maquina 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
ao w 6 M e se w 6 M 0 ent
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 nao e conhecida) seria possvel de obter um teorema mais
forte. 

Espaco polinomial

255
12. Classes de complexidade

Teorema 12.4 (Savitch)


ao espaco-construtvel s(n) log2 n
Para cada func
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 construcao do Savitch procura deterministicamente uma transicao do estado
inicial para um estado final com menos que cs(n) passos. A abordagem e por
ao e conquista: Para saber se existe uma transicao A B com menos
divis
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 configuracoes 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.

ao tem que ter s(n) log2 n, por que para a simulacao precisamos
A func
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 Nome Tipo Automato Gramatica
Regular REG 3 Automato finito (deter- Regular
minstico)
Livre de contexto CFL 2 Automato de pilha (nao- Livre de con-
determinstico) texto
Sensitiva ao con- CSL 1 MT linearmente limitada Sensitiva ao
texto (n
ao-determinstico) contexto
Recursivamente RE 0 MT Sistema semi-
enumer avel Thue (sem res-
tric
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 sao soluc


oes, n
ao decisoes: Ao seguir vamos
oes. As perguntas centrais como P 6= NP
definir P e NP em termos de soluc
acabam de ter respostas equivalentes.

P e NP em termos de busca

A computac ao pode ser vista como funcao


ao de uma soluc
Exemplo: Problema SAT construtivo: Uma solucao e uma atribuicao.
Definic ao e uma relacao R .
ao alternativa: Uma computac
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 polino-
mial:

Defini
cao 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 limi-
tada 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, ) = nao 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 poli-
nomialmente 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

Definicao 13.2 (Redu c


ao em tempo polinomial)
Uma (many-one) reduc ao entre duas linguagens L, L0 com alfabetos e 0 e

um funcao total f : 0 tal que x L f (x) L0 . Se f e com-
putavel em tempo polinomial, se chama uma reduc ao em tempo polinomial ;
escrevemos L P L0 .

Defini
cao 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
cao 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

ancia Tipos de ladrilhos t1 , . . . , tk e um grade de tamanho n n com


Inst
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 instancia 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 ladri-


lhos 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
maquina, 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} {}
ao oeste/este. Para uma regra q, a q 0 , a0 , L os ladrilhos tem a forma
na direc
(, 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, R) (q, L)
(, a) (, a) (, a)
As cores no sul da grade representam a configuracao inicial
(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 sao . Pela construcao uma com-
putac
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
maquina 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.
Proposic
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 em forma normal conjuntiva
(x1 , . . . , xn ).
Quest ao a1 , . . . , an B que satisfaz ?
ao Tem uma atribuic

266
13.2. Reducoes

Teorema 13.5 (Cook)


SAT e NP-completo.

Prova (1)

Objetivo: Provar Ladrilhamento P SAT.

Seja

Nx,y,c vari
avel o norte da posic
ao x, y tem cor c
S, W, E analogamente
^
Li,x,y := 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
x[1,n] y[1,n] c[1,k]
^
Sx,1,cx,1 Nx,n,cx,n Cores corretas nas bordas N,S
x[1,n]
^
W1,y,c1,y En,y,cn,y Cores corretas nas bordas W,E
y[1,n]
^ ^
Ex,y,c Wx+1,y,c Correspondencia E-W
x[1,n[ y[1,n]
^ ^
Wx,y,c Ex1,y,c Correspondencia W-E
x]1,n] y[1,n]
^ ^
Nx,y,c Sx,y+1,c Correspondencia N-S
x[1,n[ y[1,n[
^ ^
Sx,y,c Nx,y1,c Correspondencia S-N
x[1,n[ y]1,n]

Prova (3)

O numero de vari
aveis e o tamanho de e polinomial em n, k; pode
ser computado em tempo polinomial para uma instancia de Ladrilha-
mento.

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 na-
tural 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
otima. E
possvel provar que (n) kn. Se existisse uma maquina com
(n) kn (ou pelo menos (n) kn2 ), isso teria consequencias da maior

268
13.2. Reducoes

importancia. Assim, seria


obvio, apesar da indecibilidade do Entscheidungs-
problem, 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 [Lange
= 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, hatte das Folgerungen von der grossten Tragweite.
Es wurde n
amlich offenbar bedeuten, dass man trotz der Unl osbarkeit
des Entscheidungsproblems die Denkarbeit des Mathematikers bei ja-
oder-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 solucoes s


ao reconhecidas facilmente (polino-
mial), teriam uma soluc
ao f
acil.

Por exemplo na inteligencia artificial: planejamento, reconhecimento de


linguagens naturais, vis
ao, talvez tambem composicao da musica, escre-
ver 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

ancia Uma matriz de tamanho b b cada campo ou livre, ou com um


Inst
n
umero ou escondido.

269
13. Teoria de NP-completude

Decis
ao A matriz e consistente (tem uma configuracao dos campos es-
condidos, 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 po-
linomial para SAT!
Por que n
ao usar s oes em 1.3n )?
o SAT? (soluc
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 en-
trada e uma instancia 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
[ k
NEXPTIME = NTIME[2n ]
k>0
[ k
EXPSPACE = DSPACE[2n ]
k>0
[ k
NEXPSPACE = NSPACE[2n ]
k>0

Co-classes
Definic
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.

Proposic
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. 
Nao 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 nao. 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 suponha-
mos que TAUT 6 NP.

Em outras palavras, NP parece de nao ser fechado sobre a comple-


mentac
ao:
co-NP 6= NP ?

Proposic
ao 14.2
Se L NPC ent
ao L co-NP NP = co-NP.

Proposic
ao 14.3
TAUT e co-NP-completo.

Prova. (Proposic ao 14.2.) Seja L NPC. (): Seja L co-NP. Se L0 NP,


temos L P L co-NP, logo NP co-NP. Se L0 co-NP, entao L0 NP e
0

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 en-
trada w L produzimos uma f ormula w usando o metodo de Cook. Temos

w L w satisfatvel pela def. de w


w L w insatisfatvel 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.

Prova. (Rascunho.) E f
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 numero 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.
ao w L()
Decis

Mais quantificac
oes
O que acontece, se nos permitimos mais quantificacoes?

277
14. Fora do NP

A hierarquia polinomial
oes para aridade i + 1. Uma relacao R ( )i+1 e
Estendemos relac
limitada polinomial, se
(x, y1 , . . . , yi ) R p poly i |yi | p(|x|)

Definic
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

Definic
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 al-


ternac
oes sem limite: APTIME
As maquinas 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 sao PSPACE-completos: Generalized Hex, gene-
ralized 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 nao 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 o v0 V
ancia Um grafo G = (V, E) e um n
Decis
ao Jogando geografiacom este grafo, o primeiro jogador pode ga-
nhar 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


O(1) [ k
EXP = DTIME[2n ]= DTIME[2n ]
k0

O(1) [ k
NEXP = NTIME[2n ]= NTIME[2n ]
k0

O(1) [ k
EXPSPACE = DSPACE[2n ]= 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 ao de xadrez com tabuleiro de tamanho n n.
ancia Uma configurac
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 expo-


nenciac
ao!
2k
Por exemplo, considere a torre de dois de altura tres: 22
0 1 2 3 4
4 16 65536 1.16 1077 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 oes regulares e, f , L(e) 6= L(f )?
ao: Dadas as express
Express oes regulares com Completo para
, NP
, , PSPACE
, ,2 NEXP
, ,2 , 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 equi-
valence 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 propagacao 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 nao se realizou ate hoje.)

Definicao 15.1 (Circuito booleano)


Para cada n N um circuito com n entradas e uma sada e um grafo direci-
onado 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 fan-
in 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 cao 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
cao 15.2
ao t : N N, uma famlia de circuitos de tamanho t(n) e uma
Para uma func
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
cao 15.1
ao f : {0, 1}n {0, 1} pode ser calculada por um circuito de
Cada func
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 formula em forma normal conjuntivo que e a conjuncao de
usulas Ca para a {0, 1}n tal que f (a) = 0:
todas cla
^
(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 sao computaveis com menos
portas l ogicas.

Definic
ao 15.3 (Circuitos com um n umero polinomial de portas)
A classe de complexidade P/poly contem todas linguagens decidveis por fa-
milias 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
ao t : N N tal que L DTIME(t(n)) temos L SIZE(O(t(n) )).
Para uma func

Prova. (Rascunho.) Seja L P alguma linguagem e M a MTD correspon-


dente. 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 va-
lor 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 numero de portas l ogicas necess arias para implementar o circuito e no
maximo 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.

Proposic
ao 15.2
Cada linguagem L {0, 1} un
aria (L {1} ) pertence a P/poly.

Prova. Para 1n L escolhe i xi , sen


V
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 aria de n representa uma par hM, xi


ao bin
tal que M (x) para}.

O ultimo 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 pro-
blema 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
cao 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 cir-


cuitos 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 direcao podemos usar a construcao do lema 15.1 obser-
vando que a construc
ao e possvel em tempo polinomial em n. 

288
Maquinas de Turing com conselho Uma caracterizacao alternativa de P/poly
e como MT com conselho.
Defini cao 15.5 (M aquina de Turing com conselho)
Para funcoes T, a : N N a classe de complexidade DTIME(t(n))/a(n) de-
didveis por maquinas 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


cao 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 descricao 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 ao 15.6 (Classes ACd e AC)


c
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 funcao que possui uma representac
ao por uma formula em k-DNF
(forma normal disjuntiva), e uma restric
ao randomica que atribuicao a t
omicos, temos, para cada s 2
entradas de f valores rand
s/2
(n t)k 10

Pr[f | n
ao possui s-CNF]
n

289
15. Complexidade de circuitos

Teorema 15.3
Seja (x1 , . . . , xn ) = 1in xi mod 2 a funcao de paridade. 6 AC0 .
P

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 subcircui-
tos, mantendo um tamanho polinomial e a mesma profundidade (cons-
tante).
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
ltimo nvel. Temos n0 = n e vamos restringir ni ni variaveis na i+1-esima
u
i
ao, i.e., ni = n1/2 , mantendo um fan-in no maximo ki = 10b2i . Supoe
restric
essas restricoes sao satisfeitas apos 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  
k 1
1 i 1
ni 10nb
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 pro-
fundidade 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 fan-
in kd2 no ultimo nvel e portanto e uma kd2 -FNC ou kd2 -FND. Portanto,

290
fixando no m aximo kd2 variaveis (zerando todas variaveis de uma cla
usula,
por examplo), obtemos uma func ao constante. Mas a funcao da paridade
nunca e constante para uma restricao de menos que n variaveis. Portanto o
circuito n ao de .
ao pode ser a representac 

291
A. Conceitos matem
aticos

Nessa sec
ao vamos definir alguns conceitos b
asicos da matematica.

Defini
cao 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
cao A.2 (Valor absoluto)
O valor absoluta | | e definido por
(
x se x 0
|x |=
x se x < 0

Proposi
cao A.1 (Regras para valores absolutos)

` x| = |x| (A.1)
x |x| (A.2)
|x + y| |x| + |y| Desigualdade triangular (A.3)
|xy| = |x||y| (A.4)
1 Alguns 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 | (A.5)
1in 1in

Y Y

x i
=
|xi | (A.6)
1in 1in

(A.7)

Prova. Prova com induc


ao sobre n. 

Proposi cao A.2 (Regras para o m


aximo)
Para ai , bi R

max ai + bi max ai + max bi (A.8)


i i i

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


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

Defini
cao 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 numero inteiro maior que x. Formalmente

bxc = max{y Z|y x}


dxe = min{y Z|y x}

ario de x e {x} = x bxc.


O parte fracion

ario sempre e positivo, por exemplo {0.3} = 0.7.


Observe que o parte fracion

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)

Definic
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)) (A.11)
e
Uma estimativa menos preciso, pode ser obtido pelas observacoes

n! nn
X ni nn
en = >
i! n!
i0

que combinado ficam


(n/e)n n! nn .

Revis
ao: Logaritmos

loga 1 = 0 (A.12)
loga n
a =n 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) troca de base (A.17)
logc n
loga n = mudanca de base (A.18)
logc a
1
logb a = (A.19)
loga b
alogc b = blogc a expoentes (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
cao A.4

ln n < Hn < ln n + 1.

Prova. Resultado da observac


ao que
Z n+1 Z n+1
1 1
dx < Hn < 1 + dx
1 x 2 x1
R
(veja figura A.1) e o fato que 1/x = ln x:
Z n+1
1
ln(n) ln(n + 1) =
1 x
Z n+1
1
= ln(n)
2 x1


Uma analise detalhada rende

Proposi
cao A.5

Hn = ln n + + n1 /2 + O(n2 )

com 0.5772156649 a constante de Euler-Mascheroni.

Defini
cao A.5
O logaritmo iterado e
(
0 se n 1
log n =
1 + log (log n) caso contrario

O logaritmo iterado e uma func


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

296
A.1. Funcoes comuns

0
0 1 2 3 4 5 6 7 8 9 10

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


umeros harmonicos.

Defini
cao 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)

ao f e concava caso f e convexo, i.e., ela satisfaz


Similarmente uma func

f (x + (1 )y) f (x) + (1 )f (y). (A.22)

Exemplo A.1
Exemplos de func ao x2k , 1/x. Exemplos de funcoes concavas
oes convexas s
sao log x, x.

Proposi
P c ao A.6
Para i[n] i = 1 e pontos xi , i [n] uma func
ao convexa satisfaz
X  X
f i x i i f (xi ) (A.23)
i[n] i[n]

e uma func
ao concava
X  X
f i x i i f (xi ) (A.24)
i[n] i[n]

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

definic =P
ao. Para n > 2 define
i[2,n] i tal que + = 1. Com isso
temos
X X

 
f i xi = f 1 x1 + i xi = f (1 x1 + y)
i[n] i[2,n]

onde y =
P
j[2,n] (j /)xj , logo
X
(y)

f i xi 1 f (x1 ) + f
i[n]
X
j

= 1 f (x1 ) + f (j /)x
j[2,n]
X X

1 f (x1 ) + (xj ) =
(j /)f i xi
j[2,n] i[n]

A.2. Somat
orio
Revis
ao: Notac
ao Somatorio
Para k uma constante arbitr
aria temos
n
X n
X
kai = k ai Distributividade (A.25)
i=1 i=1
Xn
k = nk (A.26)
i=1
n X
m n
! m

X X X
ai bj = ai bj Distributividade generalizada (A.27)
i=1 j=1 i=1 j=1
n
X n
X n
X
(ai + bi ) = ai + bi Associatividade (A.28)
i=1 i=1 i=1
Xp n
X n
X
ai + ai = ai (A.29)
i=1 i=p+1 i=1
n
X Xp
api = ai (A.30)
i=0 i=pn

298
A.2. Somatorio

Aultima 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
ai = a(i) .
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 analise 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
X i n
X
1= i = n(n + 1)/2 = O(n2 )
i=1 j=1 i=1

S
eries

n
X n(n + 1)
i= serie aritmetica (A.31)
i=1
2
n
X xn+1 1
xi = serie geometrica, para x 6= 1 (A.32)
i=0
x1

299
A. Conceitos matem
aticos

se |x| < 1 ent


ao


X 1
xk = serie geometrica infinitamente decrescente (A.33)
1x
k=0

Serie geometrica com limites arbitr


arios:

X xb+1 xa
xi = para x 6= 1 (A.34)
x1
aib

Logo
(
X (xb ) para x > 1
i
f (b) = x = (A.35)
aib
(1) para x < 1

S
eries

n
X
2i = 2n+1 2 (A.36)
i=1
n
X n(n + 1)(2n + 1)
i2 = (A.37)
i=0
6
Xn
i2i = 2 + (n 1)2n+1 (A.38)
i=0

Mais geral para alguma sequencia fi temos


X X X X X X
ifi = fi = fi = fi
1in 1in 1ji 1jin 1jn jin

X X X
= fi fi .
1jn 1in 1i<j

300
A.3. Inducao

Uma aplicac
ao:

X X X X X  xn+1 x1 xj x1

i i i
ix = x x =
x1 x1
1in 1jn 1in 1i<j 1jn
1 X
xn+1 xj

=
x1
1jn

xn+1 x1
 
1 n+1 x
= nx = (xn (nx n 1) + 1)
x1 x1 (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
(
X
i (nxn ) caso x > 1
f (n) = ix = (A.40)
1in
(1) caso x < 1

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
ao P(n) e verdadeira para todo inteiro n 1.
ent

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.
alida para qualquer valor de n n0 .
Prova: provar que P(n) e v
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 .
1
Mostre que 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 qn 1
qi = .
i=0
q1

Resolva os exerccios do captulo 1.

A.4. Limites
Defini
cao 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)


n

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


n

Tambem temos
 
lim inf f (n) = lim inf f (m)
n n mn
 
lim sup f (n) = lim sup f (m)
n n mn

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


n

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
X X
E[X] = Pr[e]X(e) = i Pr[X = i]
e 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
X X X
= Pr[e]X(e) = Pr[e]X(e)
0i eX 1 (i) e


Prova. (Da linearidade.)
X
E[X + Y ] = Pr[e](X(e) + Y (e))
e
X X
= Pr[e]X(e) Pr[e]Y (e)) = E[X] + E[Y ]
e e

Exemplo A.3
(Continuando exemplo A.2.)
Seja X a vari avel aleat
orio que denota o numero 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
i0 1i6
X
E[Y ] = 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
nos 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
ao adjacentes, se {u, v} E, duas arestas e, f sao adjacentes, se
vertices u, v s

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
umero de vizinhos (v) = |N (v) |= |E(v)|.
n
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
cao 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) < .
ao do O temos c > 0 e n0 tal que n > n0 f cg. Logo n >
Por definic
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

Soluc
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

Verifique-se que h = f g 0 por analise de casos. Com isso, temos tambem


g 0 = h/f cf g/f = cg nos casos f (n) 6= 0 e g 0 = cg cg caso contrario.
Solu
cao 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 interseccao 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).

Solucao 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.
oes restantes considere o par de funcoes n e en sin(n) .
Para provar as tres afirmac
Verifique-se que nenhuma relac ao , , ,  ou  e verdadeira.
Soluc
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 modi-


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

Soluc
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 alida. Um contra-exemplo simples e 0 O(0)
ao e v
mas 0 + c 6 O(0). O problema e que a func ao g pode ser 0 um numero infinito
de vezes. Assim f tem que ser 0 nesses pontos tambem, mas f + c nao e. Mas
ao que g (1), temos uma prova:
com a restric
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 )
c c
f + c c0 g + c c0 g + g = (c0 + 00 )g.
c00 c

Solu
cao 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 .
Entao 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.

Solucao 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 alida. Ele tem que provar que fn cn para algum c fixo. Uma
ao e v
tentativa leva a

fn = 2fn1
2cn
6 cn Perdido!

que mostra que essa prova n


ao funciona.
Soluc
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 ).
Soluc
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 inducao 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
cao 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
cao 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
cao do exerccio 2.1.

i1
n 2X n
X c X i
Cp [Alg1] = c= 2 = c 2n c = O(2n )
i=1 j=1
2 i=1

Os detalhes da resolucao do algoritmo abaixo foram suprimidos. Resolva com


detalhes e confira se a complexidade final corresponde `a encontrada na analise
abaixo.
X X X X
Cp [Alg2] = j2 j2
1in 1j2i 1in 1j2i
j
mpar
X
= O( (2i )3 )
1in
X 8n+1 8
= O( 8i ) = 8n+1 = O(8n )
7
1in

312
n X
X n n
X
i
Cp [Alg3] = 2 = 2i (n i + 1)
i=1 j=i i=1
Xn n
X n
X n
X
= (n2 i2i + 2i ) =
i
n.2i i.2i + 2i
i=1 i=1 i=1 i=1
n+1 n+1 n+1
= n (2 2) (2 + (n 1) 2 ) + (2 2)
n+1 n+1 n+1 n+1
= n2 2n 2 n2 +2 +2 2
n+2 n
=2 2n 4 = O(2 )

n X
X i n
X
Cp [Alg4] = 2j = (2i+1 2)
i=1 j=1 i=1
n
X n
X
i
=2 2 2 = 2 (2n+1 2) 2n
i=1 i=1
= 4 2n 4 2n = O(2n )


X n
n X n
X n
X i1
X
Cp [Alg5] = 2j = 2j 2j
i=1 j=i i=1 j=1 j=1
n
X n
 X
2n+1 2 (2i1+1 2) = 2 2n 2 2i + 2

=
i=1 i=1
n
X n
X
=2 2n 2i = 2 n2n (2n+1 2)
i=1 i=1
= 2 n2 2 2 + 2 = O(n2n )
n n

Solu
cao 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
X
n 1 + 2c/n i
0i<n

= n 1 + c(n 1) = cn + (n 1 c)
6 cn N
ao funciona para n > c + 1

Solu
cao 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 numero de comparac oes e ao maximo 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.
Soluc
ao do exerccio 2.4.
Uma abordagem simples com busca exaustiva e
P
1 m := 1in ai
2 fo r C [1, n] do
m0 := iC ai i6C ai
P P
3

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 ).
Soluc
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.
Soluc
ao do exerccio 2.6.
Seja A, A1 , . . . , An as variaveis 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.
Soluc
ao do exerccio 2.7.
oes e a arvore tem 1ik 2i1 =
P
Cada chave em nvel i [1, k] precisa i comparac
2k 1 n
os e folhas em total. Para o n umero de comparacoes C temos
X X 2i1 X
E[C] = P [C = i]i = k1
i = 2k 2i i = 2(k 1) + 21k .
2
1ik 1ik 1ik

Solu
cao 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 i f m > n then
2 return f a l s e
3 end i f
4 i := 1
5 f o r j := 1, . . . , n do
6 i f s0i = sj then
7 i := i + 1
8 i f i > m then

315
B. Soluc
oes dos exerccios

9 return t r u e
10 end i f
11 end i f
12 end f o r
13 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
cao do exerccio 4.2.
O seguinte algoritmo resolve o problema:

Algoritmo B.2 (Bases)


oes xi de n cidades, 1 i n.
Entrada Uma sequencia de posic

Sada Uma sequencia mnima de posic


oes bi de bases.
1 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
2 B=
3 while S 6  do
4 S e j a S = x0 S 0
5 B := B, (x0 + 4) { aumenta a sequ e ncia B }
6 Remove t o d o s o s e l e m e n t o s x x0 + 8 de S
7 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: bi b0i . Portanto, a solucao
ao. Afirmac
gulosa nao contem mais bases que alguma outra solucao. Prova da afirmacao
com inducao: 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
cao do exerccio 6.1.

1. T (n) = 9T (n/3) + n
X
T (n) = 9i (n/3i ) + (9log3 n )
0i<log3 n
X
=n 3i + n2
0i<log3 n

3log3 n 1
=n + 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
X
=n log2 n i + (n)
0i<log n
n log2 n(log2 n 1)
= n log22 n + (n)
2
2
= O(n log2 n)

Solucao do exerccio 6.3.


Se usarmos a hipotese 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.
Hipotese: 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 ).
Soluc
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
X
T (n) cn2 (7/4)i + 7h+1
0ih

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


(7c/3 + 1)7h (4/3)cn2 com 7h 7 7log2 n
(49c/3 + 1)nlog2 7 = O(nlog2 7 ).

ao, podemos estimar T (n) anc bn2


Para aplicar o metodo de substituic
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
cao 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 subpro-
blemas 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
X
T (n) n ci + F (n)
0ih
X
n ci + F (n) porque c < 1
0i<

= 10n/(1 ) + F (n)

com o numero 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) se n > 20
F (n)
O(1) se n 20

F (n) cn pode ser verificado com substituicao (resolvido no livro do Cor-


men). O metodo Master n ao se aplica nesta recorrencia.

319
Indice

DSPACE, 252 AEM-Kruskal (algoritmo), 82


DTIME, 252 AEM-Prim (algoritmo), 82, 83
NP, 261 alfabeto, 239
NSPACE, 252, 253 algoritmo
NTIME, 252, 253 de aproximacao, 177
(Notac ao), 23 de Karatsuba, 131, 317
PSPACE, 253 guloso, 75
n , 278 PrefixTree, 91
P, 253, 261 algoritmo -aproximativo, 179
n , 278 algoritmo r-aproximativo, 179
(Notac ao), 23 algoritmo de Hirschberg, 103
 (relacao de crescimento), 26 algoritmos Branch-and-bound, 165
FP, 261 all pairs shortest paths, 84
PF, 261 alternante, 219
(Notac ao), 23 aproximacao
(relacao de crescimento), 26 absoluta, 178
 (relacao de crescimento), 26 relativa, 179
 (relacao de crescimento), 26 aresta, 305
 (relacao de crescimento), 26 atribuic
ao, 36, 39
arvore aval (funcao de complexidade), 32
binaria, 116
backtracking, 153
de busca, 116
bottom-up, 97
espalhada mnima, 79
branch-and-bound, 163
arvore binario, 91
Bubblesort (algoritmo), 41, 51
APX, 179 Busca binaria (algoritmo), 46
NPO, 178 Busca em Largura (algoritmo), 62
PO, 178 busca por melhor solucao, 164
BHALT, 263 busca por profundidade, 164
Busca sequencial (algoritmo), 44,

ABB-OTIMA (algoritmo), 120 49
absorc
ao (de uma func
ao), 26 Busca1 (algoritmo), 34, 49
adjacencia
de vertices, 305 c
odigo

321
Indice

livre de prefixos, 91 custo (funcao de custos), 32


cache, 97
caixeiro viajante, 115, 167 desemp (funcao de desempenho), 32
caminho, 305 desigualdade de Jensen, 297
alternante, 219 Dijkstra, Edsger, 85
Caminho Hamiltoniano, 48 distancia de Levenshtein, 104
caminho mais curto distribuicao, 303
entre todas pares, 84 divisao e conquista, 54, 123
entre um n o e todos outros, 84
certificado, 261 Edmonds-Karp, 204
ciclo, 305 Eliminacao de Gauss (algoritmo),
euleriano, 20 13
hamiltoniano, 20 emparelhado, 219
circuito, 285 emparelhamento, 214
booleano, 285 perfeito, 214
circulac
ao, 198 emparelhamento de peso maximo,
classe de complexidade, 252 214
cobertura por vertices, 158 emparelhamento maximo, 214
colorac
ao mnima, 89 emparelhamento perfeito de peso mnimo,
complexidade 215
media, 33, 47 espaco amostral, 303
otimista, 35 espaco-construtvel, 251
pessimista, 33 Euler, Leonhard, 20
componente Euler-Mascheroni
conjuntiva, 36, 37 constante de, 296
disjuntiva, 36, 40 evento, 303
composicionalidade, 36 elementar, 303
condicional, 36, 40 exec (funcao de execucao), 32
conjunto compatvel de intervalos,
85 f
ormula de Stirling, 295
conjunto independente, 87 fan-in, 285
m aximo (problema), 87 fan-out, 285
constante de Euler-Mascheroni, 296 fatorial, 295
Cook, Stephen Arthur, 270 Flajolet, Philippe, 48
CopiaMTI (algoritmo), 299 Floyd, Robert W, 113
corte, 80 Floyd-Warshall (algoritmo), 113
por inviabilidade, 164 fluxo, 199
por limite, 164 st maximo, 199
por otimalidade, 164 de menor custo, 213
cota assintotica superior, 22 formulacao linear, 199
Counting-Sort (algoritmo), 45 Ford-Fulkerson, 200, 201

322
Indice

func
ao Kruskal, Joseph Bernard, 81
concava, 297
convexa, 297 Levenshtein, Vladimir Iosifovich, 104
de complexidade (aval), 32 Levin, Leonid, 270
de custos (custo), 32 limite
de desempenho (desemp), 32 inferior, 164
de execuc
ao (exec), 32 superior, 164
func
ao de otimizac
ao, 177 linearidade do valor esperado, 304
func
ao objetivo, 177 linguagem, 239
livre, 219
grafo, 62, 305 logaritmo, 296
k-partido, 169 logaritmo iterado, 296
bipartido, 169 Loteria Esportiva (algoritmo), 45
conexo, 20, 79
de intervalo, 87 maquina de RAM, 31
direcionado, 305 maquina de Turing, 241
n
ao-direcionado, 20 determinstica, 243
perfeito, 169 n
ao-determinstica, 243
grafo residual, 201 Maximo (algoritmo), 43, 53
metodo
Hamilton, Sir William Rowan, 20 da substituicao, 125, 126
hierarquia polinomial, 278 de
arvore de recursao, 125, 132
Hirschberg, algoritmo de, 103 mestre, 125, 134
Hoare, Charles Anthony Richard, maximum independent set (problema),
54 87
Huffman (algoritmo), 93 maximum Knapsack, 108
independent set, 87 memoizac ao, 97
inducao natural, 301 Mergesort, 19
informac ao recorrencia, 125
quantidade de, 92 mochila maxima, 108
invers ao, 52 Multiplicacao de matrizes, 19, 47,
tabela de, 53 111
iteracao algoritmo de Coppersmith-Winograd,
definida, 36, 39 47
indefinida, 36, 39 algoritmo de Strassen, 47, 142
multiplicacao de n
umeros (algoritmo),
Jensen 131, 317
desigualdade de, 297
n
umero cromatico, 169
Karatsuba, Anatolii Alekseevitch, n
umero de clique, 169
131, 317 n
umero harmonico, 296

323
Indice

n
umeros de Fibonacci, 95 programacao dinamica, 95, 98
n
umeros harm onicos, 296
notac
ao assint
otica quantidade de informacao, 92
, 23 Quicksort (algoritmo), 54, 56
, 23
, 23 recorrencia
O, 21 simplificar, 125
o, 23 reducao, 262
relacao
O (notac
ao), 21 polinomialmente limitada, 178,
o (Notac
ao), 23 260
ordenac
ao relacao de crescimento, 25
Bubblesort, 41 , 26
por inserc
ao direta (algoritmo), , 26
42, 50 , 26
Quicksort, 54 , 26
, 26
palavra, 239 retrocedimento, 153
Parada n ao-determinstico em k pas-
sos, 48 serie aritmetica, 300
particionamento serie geometrica, 300
de intervalos, 88, 89 Savitch, Walter J., 256
de um vetor, 54 sequenciamento
Partition (algoritmo), 54 de intervalos (algoritmo), 86
PD-matrizes, 109 de intervalos (problema), 85
perfeito, 214 sequencia, 36, 37
piso, 294 Shannon, Claude, 92
polinomio single-source shortest paths, 84
caracterstico, 176 somatorio, 298
porta logica, 285 straight insertion sort (algoritmo),
potenciac ao, 135 42, 50
PrefixTree (algoritmo), 91 Strassen, Volker, 142
Prim, Robert C., 81 subestrutura otima, 77
probabilidade, 303 subgrafo, 305
problema induzido, 305
completo, 262 subsequencia, 99
de avaliac ao, 177 subsequencia comum mais longa, 99
de construcao, 177
de decis ao, 177 tabela de inversoes, 53
difcil, 262 tam (tamanho de entradas), 32
problema de otimizac ao, 177 tempo-construtvel, 251

324
Indice

teorema de Savitch, 256


tese de Cobham-Edmonds, 10
teto, 294
top-down, 97
transposic
ao, 52
traveling salesman, 115
troca mnima (algoritmo), 76
Turing, Alan Mathison, 240

vertice, 305
emparelhado, 219
livre, 219
valor absoluto, 293
valor esperado, 304
variavel aleatoria, 304
vertex cover, 158
Vinogradov, I. M., 26
notacao 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 Recur-
rence 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 Ap-
proach. 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 AU-
18.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 arith-
metic progressions. Em: STOC 87: Proceedings of the nineteenth an-
nual 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 Combi-
natorics 15 (2008).
[17] Brian C. Dean, Michel X. Goemans e Nicole Immorlica. Finite ter-
mination of augmenting pathalgorithms in the presence of irrational
problem data. Em: ESA06: Proceedings of the 14th conference on An-
nual 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. ar-
Xiv: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 combi-
natorial 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 Sci-
ences 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 mat-
ching problem. Em: Networks 41 (2003), pp. 137142.
[27] Martin F urer. Faster Integer Multiplication. Em: STOC 07: Procee-
dings of the thirty-ninth annual ACM symposium on Theory of compu-
ting. San Diego, California, USA: ACM, 2007, pp. 5766. isbn: 978-1-
59593-631-8. doi: http://doi.acm.org/10.1145/1250790.1250800.

328
Bibliografia

[28] Martin F urer e Balaji Raghavachari. Approximating the minimu-


degree steiner tree to within one of optimal. Em: Journal of Algorithms
(1994).
[29] H. N. Gabow. Data structures for weighted matching and nearest com-
mon 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 Ha-
miltonian 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 Multi-
conference. 2010. doi: 10.1145/1878537.1878623.
[35] Juris Hartmanis e Richard E. Stearns. On the Computational Comple-
xity 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 Ap-
plication to Skin Detection. Rel. tec. CRL 98/11. Cambridge Research
Laboratory, 1998.
[40] Erich Kaltofen e Gilles Villard. On the complexity of computing deter-
minants. Em: Computational complexity 13 (2004), pp. 91130.
[41] Anatolii Alekseevich Karatsuba e Yu Ofman. Multiplication of Many-
Digital 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, Sor-
ting 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 solu-
tion 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 pro-
blems. Em: J. Soc. Indust. Appl. Math 5.1 (1957), pp. 3238.
[55] K. Noshita. A theorem on the expected complexity of Dijkstras shor-
test path algorithm. Em: Journal of Algorithms 6 (1985), pp. 400408.
[56] D. Pearson. A polynomial time algorithm for the change-making pro-
blem. 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. Else-
vier, 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 effici-
ency. 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 sci-
ence. 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- Theoretical-
Computer-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 In-
tractable 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 ma-


trix multiplication: a study of truly subcubic reducibility. 2010.
[73] Uri Zwick. The smallest networks on which the Ford-Fulkerson ma-
ximum flow procedure may fail to terminate. Em: Theoretical Com-
puter Science 148.1 (1995), pp. 165 170. doi: DOI:10.1016/0304-
3975(95)00022-O.

332

Você também pode gostar