Escolar Documentos
Profissional Documentos
Cultura Documentos
Algoritmos PDF
Algoritmos PDF
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
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
2
Conte
udo
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
B. Soluc
oes dos exerccios 307
4
Conte
udo
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
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.
9
1. Introduc
ao e conceitos b
asicos
Introduc
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
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
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, . . .}.
11
1. Introduc
ao e conceitos b
asicos
(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).
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.
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.
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
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
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
Comparar efici
encias
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
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
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
Tempo linear: N
umero de operac
oes proporcional `a entrada.
Exemplo 1.7
Exemplos de algoritmos para as complexidades acima:
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
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
4n2 + 2n + 5 O(n2 )
Outra notac
ao comum que usa a identidade e
4n2 + 2n + 5 = O(n2 )
O: Exemplos
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
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)
Func
oes que crescem mais ou igual `
a g(n)
Func
oes que crescem (estritamente) mais que g(n)
Func
oes que crescem igual `
a g(n)
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.
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
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 ?
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.
26
1.2. Notas
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)
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
Exerccio 1.8
Prove ou mostre um contra-exemplo.
1. log(1 + 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
28
1.3. Exerccios
Exerccio 1.10
Mostre que a definic
ao
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.
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
Exerccio 1.18
Mostra que log n O(n ) para todo > 0.
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
31
2. An
alise de complexidade
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
Definic
ao 2.1
O smbolo denota a composic
ao de func
oes tal que
(f g)(n) = f (g(n))
Condensac
ao de custos
tam : D N
aval[A](n) : N R+
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
A complexidade media
X
Cm [A](n) = P (d) desemp[A](d)
tam(d)=n
Definic
ao alternativa
33
2. An
alise de complexidade
Uma definic
ao alternativa e
Cp e monot
onica e temos
Exemplo 2.1
Vamos aplicar essas noc
oes num exemplo de um algoritmo simples. Queremos
e decidir se uma sequencia de n
umeros naturais contem o n
umero 1.
34
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
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
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
Composic
ao de componentes
Cuidado: Na composic
ao de componentes o tamanho da entrada pode
mudar.
36
2.2. Complexidade pessimista
Componentes conjuntivas
A sequ
encia
Prova.
max(desemp[c1 ](d), desemp[c2 ](d)) desemp[c1 ; c2 ](d)
= desemp[c1 ](d) + desemp[c2 ](d)
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
e portanto
A atribuic
ao: Exemplos
i := 0; j := i
Calcular o m
aximo de n elementos tem complexidade O(n)
m := max(v)
w := reversa(u)
A atribuic
ao
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]
39
2. An
alise de complexidade
Componentes disjuntivas
Componentes disjuntivas
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
Para se b ent
ao c1 obtemos com cp [skip] = 0
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
2.2.2. Exemplos
Exemplo 2.6 (Bubblesort)
Nesse exemplo vamos estudar o algoritmo Bubblesort de ordenacao.
Bubblesort
Bubblesort: Complexidade
41
2. An
alise de complexidade
Ordenac
ao por inserc
ao direta
42
2.2. Complexidade pessimista
M
aximo
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
l1 + (n 1)(l2 + l3 ) + kl4 + l7 = 3n + k 1
Busca seq
uencial
43
2. An
alise de complexidade
Busca seq
uencial
Counting-Sort
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
Busca Bin
aria
45
2. An
alise de complexidade
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
46
2.3. Complexidade media
2.3. Complexidade m
edia
Nesse captulo, vamos estudar algumas tecnicas de analise da complexidade
media.
Motivac
ao
Imagin
avel: poucas inst
ancias representam o pior caso de um algoritmo.
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
Busca seq
uencial
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
49
2. An
alise de complexidade
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.
comparac
oes em media.
Logo o n
umero esperado de comparac
oes e
X X
(i + 1)/2 = 1/2 i = 1/2 ((n + 1)(n + 2)/2 3) = (n2 )
2in 3in+1
50
2.3. Complexidade media
Bubblesort: Transposic
oes
Qual o n
umero de transposic
oes em media?
2.5x104
2.0x104
Quantidade
1.5x104
4
1.0x10
5.0x103
0 5 10 15 20 25 30 35
Nmero de transposies
Invers
oes
Uma invers
ao em uma permutac
ao e um par que nao esta ordenado, i.e.
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
Cada invers
ao em n ao em e vice versa:
ao e invers
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
52
2.3. Complexidade media
M
aximo
Qual o n
umero esperado de atualizac
oes no algoritmo Ma
ximo?
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
Quicksort
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
54
2.3. Complexidade media
Escolher o piv
o
Operac
oes relevantes: N
umero de comparac
oes entre chaves!
Dois exemplos
Escolhe o primeiro elemento.
Escolhe o maior dos primeiros dois elementos.
Complexidade de particionar
O tamanho da entrada e n = r l + 1
Quicksort
55
2. An
alise de complexidade
1 i f l < r then
2 m := P a r t i t i o n ( l , r , a ) ;
3 Quicksort (l ,m 1 ,a ) ;
4 Quicksort (m + 1 ,r ,a ) ;
5 end i f
desemp[QS](al , . . . , ar ) = 0 se l r
Complexidade pessimista
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
56
2.3. Complexidade media
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)
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
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
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
ao para n 1 e
a mesmo equac
X
(n 1)Tn1 = (n 1)2 + n 1 + 2 Ti para n > 1
0i<n1
2 2 4
Tn = Tn1 +
n+1 n n+1
60
2.4. Outros tpos de analise
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)
Busca em Largura
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
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
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
64
2.4. Outros tpos de analise
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
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
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?
66
2.6. Exerccios
67
2. An
alise de complexidade
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
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
68
2.6. Exerccios
Exerccio 2.5
Qual o n
umero medio de atualizac
oes no algoritmo
1 s := 0
2 for i = 1, . . . , n do
3 i f i > bn/2c then
4 s := s+i
5 end i f
6 end for
Exerccio 2.6
Qual o n
umero medio de atualizac oes k := k + 1, supondo que todo valor em
cada posic
ao da sequencia tem a mesma probabilidade? Qual o n umero medio
com a distribuic
ao P [1] = 1/2, P [2] = P [3] = P [4] = P [5] = P [6] = 1/10?
Exerccio 2.7
Suponha um conjunto de chaves numa arvore bin
aria completa de k nveis e
suponha uma busca bin aria tal que cada chave da arvore esta buscada com
a mesma probabilidade (em particular n ao vamos considerar o caso que uma
chave buscada n
ao pertence `
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).
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
Aplicar e validar
Implementar, testar e verificar
Adaptar ao problema real
Avaliar o desempenho
73
4. Algoritmos gulosos
Algoritmos gulosos
Trocar moedas
Troca mnima
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]
Proposi c
ao 4.1
Se vi+1 |vi para 1 i < n a soluc
ao gulosa e mnima.
76
4.1. Introducao
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
leva a soluc
ao
otima atraves de uma regra simples. Portanto, o algoritmo
guloso evite resolver todos subproblemas.
78
4.2. Algoritmos em grafos
Arvore espalhada mnima (AEM)
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.
Observac
ao importante
80
4.2. Algoritmos em grafos
Prova
Resolver AEM
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
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
Implementac
ao do algoritmo de Prim
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.
84
4.3. Algoritmos de seq
uenciamento
Aproximac
ao: Uma id
eia
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 .
Como resolver?
85
4. Algoritmos gulosos
Implementac
ao
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 |.
Grafos de intervalo
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
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.
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.
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
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)
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 .
mas o c
odigo
otimo precisa ao menos 1b por smbolo.
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
Exemplo 4.4
Saccharomyces cerevisiae
Considere a sequencia genetica do Saccharomyces cerevisiae (ingles: bakers
yeast)
S = {A, C, D, E, F, G, H, I, K, L, M, N, P, Q, R, S, T, V, W, Y }
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.)
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
Fn = Fn1 + Fn2
| {z } | {z }
popula
ca
o antiga descendentes
95
5. Programac
ao din
amica
% % !
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)
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
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
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
99
5. Programac
ao din
amica
SCML
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
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:
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
103
5. Programac
ao din
amica
sonhar
vo--ar
Essa dist
ancia est
a conhecida como dist
ancia de Levenshtein [48]. Uma im-
plementac
ao direta e
Dist
ancia de Edic
ao
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
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
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
107
5. Programac
ao din
amica
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 .
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)
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)
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
109
5. Programac
ao din
amica
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
Multiplicac
ao de Cadeias de Matrizes
Algoritmo Multi-Mat-1
Retorna o n
umero mnimo de multiplica
coes necess
arias para multiplicar a cadeia de matrizes
passada como par
ametro.
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
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.
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
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
Subestrutura
otima
Subcaminhos de caminhos mais curtos s
ao caminhos mais curtos.
113
5. Programac
ao din
amica
Algoritmo de Floyd-Warshall
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
Exemplo
115
5. Programac
ao din
amica
(
minvV div + T (v, V \ {v}) V 6=
T (i, V ) =
di1 caso V =
5.5.3. Arvore de busca bin
aria
otima
Motivac
ao
116
5.5. Topicos
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.
117
5. Programac
ao din
amica
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.
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
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)
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)
119
5. Programac
ao din
amica
Algoritmo 5.12 (ABB-OTIMA)
Entrada Probabilidades pi = Pr[c = ai ] e qi = Pr[ai < c < ai+1 ].
i/j 1 2 3 n
1
2
n
120
5.6. Exerccios
u v w
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
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
123
6. Divis
ao e conquista
Recurs
ao natural
Recurs
ao natural: caso balanceado
(
(1) para n < n0
T (n) =
kT (dn/me) + f (n) caso contrario.
Mergesort
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
Recorr
encias: caso do Mergesort
A equacao de recorrencia do Mergesort e
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).
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.
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
126
6.2. Resolver recorrencias
Exemplo 6.1
Vamos procurar o m
aximo de uma sequencia por divisao e conquista:
Substituic
ao direta
127
6. Divis
ao e conquista
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
substituindo
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)
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).
f (n) = 2f (n/2)
f (n)
A(n) = A(n/c2 ) + log n
c1 c2
129
6. Divis
ao e conquista
p= pl pr = pl 2n/2 + pr
q= ql qr = ql 2n/2 + qr .
Observac
ao:
pl qr + pr ql = (pl + pr )(ql + qr ) pl ql pr qr .
130
6.2. Resolver recorrencias
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
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
Exemplo
Dada a recorrencia T (n) = 3T (bn/4c) + (n2 )
arvore? 3i c(n/4i )2 .
Qual o custo de cada nvel i da
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
132
6.2. Resolver recorrencias
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 )
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
133
6. Divis
ao e conquista
Arvore de recorr
encia: ramos desiguais
Calcule a complexidade de um algoritmo com a seguinte equacao de recorrencia
6.2.3. M
etodo Mestre
Metodo Mestre
Para aplicar o metodo mestre deve ter a recorrencia na seguinte forma:
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
Algoritmo Potenciac
ao
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
ao para n = 2i
Algoritmo Potenciac
Complexidade da potenciac
ao-Npotencia2
(
(1) se n = 0
T (n) =
T (bn/2c) + c se n > 0
135
6. Divis
ao e conquista
Busca Bin
aria
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
136
6.2. Resolver recorrencias
3 Quicksort (l ,m 1 ,a ) ;
4 Quicksort (m + 1 ,r ,a ) ;
5 end i f
137
6. Divis
ao e conquista
logb (n1)
X
g(n) = aj f (n/bj )
j=0
138
6.2. Resolver recorrencias
Prova do M
etodo Mestre
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].
139
6. Divis
ao e conquista
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))
141
6. Divis
ao e conquista
(cuja verificac
ao e simples). Essas equac
oes contem somente sete multi-
plicac
oes de matrizes de tamanho n/2, que leva `a recorrencia
para o n
umero de multiplicac ao e T (n) = O(nlog2 7 ) = O(n2.81 ).
oes, cuja soluc
142
6.3. Algoritmos usando divisao e conquista
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)
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
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.
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
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.
Interpolac
ao Determina os coeficientes de C(x).
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.
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
148
6.3. Algoritmos usando divisao e conquista
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
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
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
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
Backtracking: Arvore de busca
Backtracking: Arvore de busca
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
s1 S1
s2 S2 s2 S2
Soluc
ao Todas as formas de posicionar as n rainhas no tablado sem que
duas rainhas estejam na mesma coluna, linha ou diagonal.
154
7.1. Backtracking
A melhor soluc
ao conhecida para este problema e via Backtracking.
n2
Existem n formas de posicionar n rainhas no tablado.
Pela aproximac
ao de Stirling
n n
n! 2n (1 + O(1/n)) (7.1)
e
155
7. Arvores de busca, backtracking e branch-and-bound
Backtracking
Testa soluc
oes sistematicamente ate que a solucao esperada seja encon-
trada
Quando n
ao h
a mais elementos para testar, a busca termina
apresentado como um algoritmo recursivo
E
Backtracking
156
7.1. Backtracking
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
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
157
7. Arvores de busca, backtracking e branch-and-bound
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
158
7.1. Backtracking
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
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
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
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
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 ).
162
7.2. Branch-and-bound
ximo
Conjunto independente ma
Inst
ancia Um grafo n
ao-direcionado G = (V, E).
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)
7.2. Branch-and-bound
Branch-and-bound
Ramifica-e-limite (ingl. branch-and-bound)
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.
163
7. Arvores de busca, backtracking e branch-and-bound
Limitar
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
1
2 1
1
2 5
2 3
1 1
1 3
3 4
2
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
Para cada chamada recursiva existem diversos vertices que podem ser
selecionados
Vertices ainda n
ao selecionados s
ao os candidatos possveis
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.
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?
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
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?
b
f
a c
e
d
b b
f f
a c a c
e e
d d
(Precisamos de 4 cores!)
Backtracking
Objetivo Minimiza o n
umero de cores utilizadas.
170
7.2. Branch-and-bound
c
a
d
b e
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
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.
Roteamento de Veculos
Mais de um dep
osito
Entrega com janela de tempo (perodo em que a entrega pode ser reali-
zada
...
173
7. Arvores de busca, backtracking e branch-and-bound
M
etodos Exatos
Problemas de Otimizac
ao Combinatoria: visam minimizar ou maximizar
um objetivo num conjunto finito de solucoes.
Gerac
ao de Colunas e Branch&Price.
M
etodos n
ao exatos
Algoritmos de aproximac
ao: algoritmos com garantia de aproximacao
S = S .
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
3. Resolve a equac
ao para obter uma f
ormula fechada para G(z).
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
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
tn = (nl1 n ) = (n ).
175
7. Arvores de busca, backtracking e branch-and-bound
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
z d 1 z dd1 k z ddk
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
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
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:
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
Aproximac
ao relativa
Maximizao Minimizao
179
8. Algoritmos de aproximac
ao
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
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
iteracoes n
ao tem mais arestas. Como em cada iteracao foi escolhido um
ao e log |G|.
vertice, a taxa de aproximac
Aproximac
ao: Motivac
ao
Quais soluc
oes s
ao aproximac
oes boas?
Problemas:
181
8. Algoritmos de aproximac
ao
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.
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
183
8. Algoritmos de aproximac
ao
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
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
Observac
ao: Knapsack e NP-completo.
185
8. Algoritmos de aproximac
ao
Como aproximar?
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:
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
1. Seja vj vj .
2. Seja vj > vj
187
8. Algoritmos de aproximac
ao
vj
OPT(x) vj + (M tj ) < vj + vj .
tj
Problemas de particionamento
Bin packing
Inst
ancia Seq uencia de itens v1 , . . . , vn , vi ]0, 1], vi Q+
S P
Soluc
ao Partic ao 1ik Pi = [1, n] tal que jP i vj 1 para todos
i [1, n].
Objetivo Minimiza o n
umero de partic
oes (containeres) k.
Abordagem?
Ideia simples: Pr
oximo que cabe (PrC).
188
8.3. Aproximacoes gulosas
Aproximac
ao?
Aproximac
ao melhor?
189
8. Algoritmos de aproximac
ao
Otimo: n containeres com dois elementos de 1/2 + um com 2n elementos
de 1/(2n). OPT(x) = n = 1.
Melhores estrat
egias
190
8.3. Aproximacoes gulosas
Taxa de aproximac
ao?
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:
2. Os itens tipo A n
ao importam: Sem itens D, nenhum outro item cabe
junto com um item do tipo A. Logo:
191
8. Algoritmos de aproximac
ao
Aproximac
ao melhor?
Baker, 1985
11
PiCD (x) OPT(x) + 3
9
Um exemplo: Mochila m
axima (Knapsack)
Teorema 8.1
ao em tempo O(rn3 /(r 1)).
MM-PTAS e uma r-aproximac
192
8.4. Esquemas de aproximacao
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
Considerac
oes finais Um EATP frequentemente n
ao e suficiente para resol-
ver um problema adequadamente. Por exemplo temos um EATP para
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
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
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.
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
+ +
+ +
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.
201
9. Algoritmos em grafos
Lema 9.4
Em cada iterac
ao, o fluxo aumenta ao menos 1.
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).
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
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
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:
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
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
f (v) = f (u) 1
f 0 (u) 1 (*)
= (v) 2
f0 porque uv est
a num caminho mnimo em Gf 0 ,
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
206
9.1. Fluxos em redes
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).
207
9. Algoritmos em grafos
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)
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
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
211
9. Algoritmos em grafos
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.
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.
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
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
214
9.2. Emparelhamentos
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
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
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.
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?).
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
s t
Teorema 9.7
O valor do fluxo m
aximo e igual a cardinalidade de um emparelhamento
m
aximo.
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.
|M \ M |= |M ` |M M |= |M ` |M M | + k = |M \ M | + k
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:
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).
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.)
221
9. Algoritmos em grafos
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
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
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
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
Teorema 9.12
Cada emparelhamento encontrado no algoritmo 9.3 e extremo.
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
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.
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]
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
Uma reduc
ao preservando a aproximac
ao fornece uma -aproximacao para 1
dada uma -aproximacao para 2 , porque
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
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.
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
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.
231
10. Algoritmos de aproximac
ao
232
10.3. Algoritmos de aproximacao para cortes
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
233
10. Algoritmos de aproximac
ao
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
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.
Por conseq
uencia, a AGH codifica o valor de todos cortes em G.
Ele pode ser calculado com n 1 cortes st mnimos:
235
10. Algoritmos de aproximac
ao
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.
w(Ci ) w0 (u, v)
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
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
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
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
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
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
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.
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
M
aquina de Turing n
ao-determinstica
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
Prova. (Rascunho.)
a0 ha1 a1 iha2 a2 i . . . .
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.
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
Observa
cao 11.3
Uma simulac
ao de MTND e possvel com os mesmos limites.
Computabilidade e complexidade
247
11. Do algoritmo ao problema
Surpreendentemente (?), v
arios problemas nao sao decidveis.
A maquina RAM
A maquina RAM (random access machine) e o modelo padrao para analise
de algoritmos. Ela possui
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
RAM : adic
ao e subtrac
ao
MRAM : multiplicac
ao e divis
ao
248
11.1. Introducao
Exemplos de simulac
ao
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
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.
t:NN
s:NN
Func
oes 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.
251
12. Classes de complexidade
Hierarquia b
asica
Observac
ao
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
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)]
L DTIME[s(n)] L DTIME[cs(n)]
L NTIME[s(n)] L NTIME[cs(n)]
253
12. Classes de complexidade
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.
DTIME(f ) ( DTIME(g).
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
Espaco polinomial
255
12. Classes de complexidade
Corol
ario: DSPACE = NSPACE
N
ao-determinismo ajuda pouco para espaco!
Walter
J. Savitch
(*1943)
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.
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]).
P e NP em termos de busca
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 e NP em termos de busca
A definic
ao de P e NP e como classes de problemas de decisao.
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.
260
13.2. Reducoes
Exemplos de problemas em NP
13.2. Reduc
oes
Reduc
oes
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
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
n
ao e decidvel.
262
13.2. Reducoes
Teorema 13.3
e NP-completo.
Ladrilhar: Exemplo
Ladrilhar: Soluc
ao
263
13. Teoria de NP-completude
Ladrilhar: Exemplo
Ladrilhar: O problema
t : {N, W, S, E} C.
Ladrilhamento
264
13.2. Reducoes
(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.
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
Prova (1)
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
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.
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
A significado do P = NP
ncia
Minesweeper consiste
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
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.
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.
Proposic
ao 14.2
Se L NPC ent
ao L co-NP NP = co-NP.
Proposic
ao 14.3
TAUT e co-NP-completo.
274
14.1. De P ate PSPACE
A classe co-NP
14.1. De P at
e PSPACE
275
14. Fora do NP
Problemas PSPACE-completos
N
ao sabemos, se NP = PSPACE ou ate P = PSPACE
Considere
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
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
Quantificac
oes restritas ou n
ao
Conjunto das classes com quantificac
oes restritas:
[
PH = k
k0
Corol
ario 14.1
ATIME = PSPACE
Esta caracterizac
ao facilita entender por que QBF e PSPACE-completo
278
14.1. De P ate PSPACE
A hierarquia polinomial
Observac
ao: Uma quest
ao com alternac
ao e tpica para resolver jogos.
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, . . .
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
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
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.
281
14. Fora do NP
O mundo at
e ELEMENTAR
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
283
15. Complexidade de circuitos
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
287
15. Complexidade de circuitos
Corol
ario 15.1
P P/poly
Proposic
ao 15.2
Cada linguagem L {0, 1} un
aria (L {1} ) pertence a P/poly.
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 .
Teorema 15.1
Uma linguagem L e decidvel por uma famlia P-uniforme de circuitos sse
L P.
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.
[
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.
289
15. Complexidade de circuitos
Teorema 15.3
Seja (x1 , . . . , xn ) = 1in xi mod 2 a funcao de paridade. 6 AC0 .
P
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
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
Corol
ario A.1
X X
xi |xi | (A.5)
1in 1in
Y Y
x i
=
|xi | (A.6)
1in 1in
(A.7)
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
294
A.1. Funcoes comuns
Proposi c
ao A.3 (Regras para pisos e tetos)
Pisos e tetos satisfazem
Definic
ao A.4
O fatorial e a func
ao
Y
n! : N N : n 7 i.
1in
n! nn
X ni nn
en = >
i! n!
i0
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.
Uma analise detalhada rende
Proposi
cao A.5
Hn = ln n + + n1 /2 + O(n2 )
Defini
cao A.5
O logaritmo iterado e
(
0 se n 1
log n =
1 + log (log n) caso contrario
296
A.1. Funcoes comuns
0
0 1 2 3 4 5 6 7 8 9 10
Defini
cao A.6
Uma func
ao f e convexa se ela satisfaz a desigualdade de Jensen
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]
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
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.
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
X 1
xk = serie geometrica infinitamente decrescente (A.33)
1x
k=0
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
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).
Encontre uma f
ormula alternativa para
n
X
2i 1
i=1
A.4. Limites
Defini
cao A.7 (Limites)
Para f : N R o limite de n para e definido por
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
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
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
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
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
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
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 )
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)
309
B. Soluc
oes dos exerccios
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.
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.
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!
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:
caso c + c c2 .
Solu
cao do exerccio [64, p. 2.3].
311
B. Soluc
oes dos exerccios
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
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
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
= 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
Solu
cao do exerccio 4.1.
O seguinte algoritmo resolva o problema:
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
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)
317
B. Soluc
oes dos exerccios
Solu
cao do exerccio 6.4.
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)
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
319
Indice
321
Indice
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
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
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
328
Bibliografia
329
Bibliografia
330
Bibliografia
331
Bibliografia
332