Documente Academic
Documente Profesional
Documente Cultură
Notas de aula
Marcus Ritt
Luciana S. Buriol
Edson Prestes
28 de Abril de 2010
Conte´
udo
I An´
alise de algoritmos 5
1 Introd u¸c˜
ao e conceitos b´ asicos 7
1.1 Notação assintótica . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.2 Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2 An´alise de complexidade 31
2.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2 Complexidade pessimista . . . . . . . . . . . . . . . . . . . . . 35
2.2.1 Metodologia de análise de complexidade . . . . . . . . . 35
2.2.2 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.3 Complexidade média . . . . . . . . . . . . . . . . . . . . . . . . 48
2.4 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
II Projeto de algoritmos 69
3 Introd u¸c˜
ao 71
4 Algoritmos gulosos 73
4.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.2 Algoritmos em grafos . . . . . . . . . . . . . . . . . . . . . . . . 77
4.2.1 Árvores espalhadas mı́nimas . . . . . . . . . . . . . . . . 77
4.2.2 Caminhos mais curtos . . . . . . . . . . . . . . . . . . . 82
4.3 Algoritmos de seqüenciamento . . . . . . . . . . . . . . . . . . 83
4.4 Tópicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.5 Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
4.6 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5 Programa¸c˜
ao dinˆ amica 95
5.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.2 Comparação de sequências . . . . . . . . . . . . . . . . . . . . . 99
5.2.1 Subsequência Comum Mais Longa . . . . . . . . . . . . 99
1
Conteúdo
6 Divis˜
ao e conquista 121
6.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.2 Resolver recorrências . . . . . . . . . . . . . . . . . . . . . . . . 123
6.2.1 Método da substituição . . . . . . . . . . . . . . . . . . 124
6.2.2 Método da árvore de recurs˜ao . . . . . . . . . . . . . . . 128
6.2.3 Método Mestre . . . . . . . . . . . . . . . . . . . . . . . 131
6.2.4 Um novo método Mestre . . . . . . . . . . . . . . . . . . 136
6.3 Tópicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
6.4 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
7 Backtracking 141
10 Classes de complexidade
10.1 Definições básicas . . . . . . . . . . . . . . . . . . . . . . . . . . 191 191
10.2 Hierarquias básicas . . . . . . . . . . . . . . . . . . . . . . . . . 193
10.3 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
2
Conteúdo
12 Fora do NP 211
12.1 De P até PSPACE . . . . . . . . . . . . . . . . . . . . . . . . . . 214
12.2 De PSPACE até ELEMENTAR . . . . . . . . . . . . . . . . . . . 220
12.3 Exerc´
ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
B Solu¸c˜
oes dos exerc´ıcios 235
3
Conteúdo
4
Parte I
An´
alise de algoritmos
5
1 Introdu ¸c˜
ao e conceitos b´
asicos
Vis˜
ao geral
7
1 Introduç˜
ao e conceitos b´asicos
Introdu¸c˜
ao
Motiva¸c˜
ao
Custos de algoritmos
8
ancia Uma expressão regular e com operações (união), ∗ (fecho de
Instˆ ∪ ·
Kleene), (concatenação) e 2 (quadratura) sobre o alfabeto Σ =
· ·
{ }
0, 1 .
ao L(e) = Σ∗ ?
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,... }.
Existem exemplos de outros problemas que são decidı́veis, mas têm uma com-
plexidade tão grande que praticamente todas instˆancias precisam mais recur-
sos que o universo possui (p.ex. a decisão da validade na lógica monádica fraca
de segunda ordem com sucessor).
9
1 Introduç˜
ao e conceitos b´asicos
mas ele precisa n! adições (A) e n!n multiplicações (M ), e nossos custos s˜ao
√
(n + 1)(n!A + n!nM ) ≥ n!(A + M ) ≈ 2πn(n/e)n (A + M )
um número formidável! Mas talvez a f´ormula de Leibniz n˜ao é o melhor jeito
de calcular o determinante! Vamos tentar a f´ormula de expansão de Laplace
det(A) =
− ( 1)i+j aij det(Aij )
≤≤
1 i n
(sendo Aij a matriz A sem linha a i e sem a coluna j). O trabalho Tn nesse
caso é dado pelo recorrência
Tn = n(A + M + Tn−1 ); T1 = 1
cuja solução é
Tn = n! 1 + (A + M )
1/i! 1
≤
1 i<n
1 n!
P
1≤i<n 1/i! = n!(e − 1).
10
≤ ≤
e como 1≤i<n 1/i! aproxima e temos n! Tn n!(1+( A + M )e) e logo Tn
novamente é mais que n!. Mas qual é o método mais eficiente para calcular
o determinante? Caso for possı́vel em tempo proporcional ao tamanho da
entrada n2 , tivermos um algoritmo em tempo aproximadamente n3 .
Antes de resolver essa pergunta, vamos estudar uma abordagem diferente da
pergunta srcinal, o método de Gauss para resolver um sistema de equa¸ cões
lineares. Em n passos, o matriz é transformada em forma triangular e cada
passo não precisa mais que n2 operações (nesse caso inclusive divis˜oes).
Exemplo 1.3
Para resolver
1 2 3 x1 2
4 5 7 x2 = 4
7 8 9 x3 6
vamos aplicar a eliminação de Gauss `a matriz aumentada
1232
4574
7896
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 é uma solução. ♦
11
1 Introduç˜
ao e conceitos b´asicos
n Cramer Gauss
2 4ns 2ns
3 12ns 8ns
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ão depende do k
3O estudo da complexidade do determinante tem muito mais aspectos interessantes. Um
deles é que o método de Gauss pode produzir resultados intermediários cuja repre-
sentação precisa um n´umero exponencial de bits em relação à entrada. Portanto, o
método de Gauss formal mente não tem complexidade O(n3 ). Resultados atuais mos-
tram que uma complexidade de operações de bits n3.2 log A1+o(1) é poss´
ıvel (Kaltofen
and Villard , 2004).
12
Motiva¸c˜
ao para algoritmos eficientes
Exemplo 1.4
Esse exemplo mostra como calcular os dados da tabela acim a. Suponha um
algoritmo que precisa f (n) passos de execu¸cão numa dada m´aquina e uma
outra máquina que é c vezes mais rápida. Portanto, ele é capaz de executar c
vezes mais passos que a primeira. Ao mesmo tempo, qual seria o tamanho de
problema n que a nova máquina é capaz de resolver? Temos
f (n ) = cf (n).
Crescimento de fun¸c˜
oes
13
1 Introduç˜
ao e conceitos b´asicos
Crescimento de fun¸c˜
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 332 6.64 × 102 1046 1.38 × 105 1.710× 106 2× 107
n2 10 10 10 10 10 1012
n3 103 106 109 1012 1015 1018
2n 103 1.3 × 1030 1.1 × 10301 2 × 103010 1030103 10301030
Comparar eficiˆ
encias
14
• A an´alise da complexidade de um algoritmo consiste em determinar o
número de opera¸cões básicas (atribui¸cão, soma, comparação, ...) em
relação ao tamanho da entrada.
An´
alise assintotica
´
Exemplo
15
1 Introduç˜
ao e conceitos b´asicos
Complexidade de algoritmos
Exemplo 1.5
2 3
Considerando dois algoritmos
mos que o primeiro seja mais com tempo
eficiente quedeoexecu¸cão
segundo. O(n
Para) ne O(n ) espera-
grande, isso é
verdadeiro, mas o tempo de execu¸cão atual pode ser 100 n no primeiro e 5 n3
2
Compara¸
c˜
ao de tempo de execu¸
c˜
ao
80000
60000
40000
20000
0 5 10 15 20 25 30
n^2
n^3
Exemplo 1.6
Considere dois computadores C1 e C2 que executam 10 7 e 109 operações por
segundo (OP/s) e dois algoritmos de ordena¸cão A e B que necessitam 2 n2 e
50n log10 n operações com entrada de tamanho n, respectivamente. Qual o
tempo de execu¸cão de cada combinação para ordenar 10 6 elementos?
16
Algoritmo Comp. C1 Comp. C2
2 (106 )2 OP
× 2 (106 )2 OP
×
A 107 OP/s =2 × 105s 109 OP/s =2 × 103s
50(106 )log10 6 OP 50(106 )log10 6 OP
B 107 OP/s = 30s 109 OP/s = 0.3s
♦
17
1 Introduç˜
ao e conceitos b´asicos
Ciclo euleriano
Instˆ
ancia Um grafo não-direcionado G = (V, E ).
Ciclo hamiltoniano
Instˆ
ancia Um grafo não-direcionado G = (V, E ).
ao Existe um ciclo hamiltanio, i.e. um caminho v1 , v2 ,...,v
Decis˜ n tal
que v1 = vn que usa todos n´os exatamente uma ´unica vez?
18
1.1 Notaç˜
ao assintótica
1.1 Nota¸c˜
ao assintotica
´
Nota¸c˜
ao assintotica:
´ O
{
O(g(n)) = f : N → R+ | (∃c > 0)∃n0 (∀n > n0) : f (n) ≤ cg(n)}
Nota¸c˜
ao assintotica:
´ O
19
1 Introduç˜
ao e conceitos b´asicos
Nota¸c˜
ao assintotica
´
• Observe que essa nota¸cão é uma “equação sem volta” (inglês: one-way
equation);
O(n2 ) = 4n2 + 2n + 5
não é definido.
20
1.1 Notaç˜
ao assintótica
O : Exemplos
Exemplo 1.8
Mais exemplos
n2 ∈ O(n3 log2 n) c = 1; n0 = 2
32n ∈ O(n3 ) c = 32; n0 = 1
n 2 n
10 n ∈ O(n2 ) porque 10 n n2 cn2n 5n n
≤ ⇐⇒ ≤c
∈
n log2 n O(n log10 n) c = 4; n0 = 1
O : Exemplos
Proposição 1.1 i
Para um polinômio p(n) = ≤ ≤ ai n temos
0 i m
Prova.
|p(n) |= ai n i
≤≤
0 i m
≤
|| ai nm = nm
|| ai
≤≤
0 i m ≤≤
0 i m
21
1 Introduç˜
ao e conceitos b´asicos
Nota¸c˜
ao assintotica:
´ Outras classes
Convenção 1.1
Se o contexto permite, escrevemos f ∈ O(g) ao invés de f (n) ∈ O(g(n)),
≤ ≤
f cg ao invés de f (n) cg(n) etc.
f (n)
f (n) ∈ O(g(n)) ⇐⇒ lim sup
n→∞ g(n)
<∞ (1.6)
f (n)
f (n) ∈ Ω(g(n)) ⇐⇒ lim inf
n→∞ g(n)
>0 (1.8)
f (n)
f (n) ∈ ω(g(n)) ⇐⇒ nlim
→∞ g(n) = ∞ (1.9)
22
1.1 Notaç˜
ao assintótica
Convenção 1.2
Escrevemos f,g,... para funções f (n), g(n),... caso não tem ambigüedade no
contexto.
23
1 Introduç˜
ao e conceitos b´asicos
Opera¸c˜
oes
Exemplo 1.9
nO (1) denota
Uma notação assintótica menos comum é f = Õ(g) que é uma abreviação para
f = O(g logk g) para algum k. Õ é usado se fatores logar´ıtmicos n˜
ao importam.
Similarmente,
polinômio p(n).f = O (g) ignora fatores polinomiais, i.e. f = O(gp) para um
∗
Caracter´ısticas
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.
Prova de 1.10: Escolhe c = 1, n0 = 0.
Prova de 1.11: Se g cO(f ), temos g = cg e existem c > 0 e n0 tal que
∈
∀n > n0 g c f . Portanto n > n0 g = cg
≤ ∀ cc f e com cc e n0 temos
≤
∈
g O(f ).
24
1.1 Notaç˜
ao assintótica
g = O(f ) ⇒ f + g = Θ(f )
Rela¸c˜
oes de crescimento Uma vantagem da notação O é que podemos usá-
la em f´ormulas como m + O(n). Em casos em que is so n˜ao for necess´ario,
e queremos simplesmente comparar fun¸cões, podemos introduzir rela¸cões de
crescimento entre funções, obtendo uma notação mais comum. Uma defini¸cão
natural é
Rela¸c˜
oes de crescimento
25
1 Introduç˜
ao e conceitos b´asicos
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)
3. f g ⇐⇒ g f ,
4. e são transitivas,
5. é uma relação de equivalência.
Prova.
1. Temos as equivalências
f g ⇐⇒ f ∈ O(g)
⇐⇒ ∃c ∃n0 ∀n > n0 f ≤ cg
⇐⇒ ∃c ∃n0 ∀n > n0 g ≥ cf com c = 1/c
⇐⇒ g ∈ Ω(f )
2. A reflexividade e transitividade são fáceis 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 c h e logo f (cc )h também. Caso f g e
≤ ≤ ≤
g f temos com item (a) f g e logo f g pela definição de Θ.
5 Uma notação alternativa é para e para . Infelizmente a notação não é padro-
nizada.
26
1.1 Notaç˜
ao assintótica
3. Temos as equivalências
f g ⇐⇒ f ∈ o(g)
⇐⇒ ∀c ∃n0 ∀n > n0 f ≤ cg
⇐⇒ ∀c ∃n0 ∀n > n0 g ≥ cf com c = 1/c
⇐⇒ g ∈ ω(f )
4. O argumento é essencialmente o mesmo que no item (a).
Observe que esses resultados podem ser traduzidos para a nota¸ cão O. Por
exemplo, como é uma relação de equivalência, sabemos que Θ também
satisfaz
∈
f Θ(f )
∈
f Θ(g) ⇒ ∈
g Θ(f )
f Θ(g) g Θ(h) f Θ(h)
∈ ∧ ∈ ⇒ ∈
A notação com relações é sugestiva e freqüentemente mais fácil de usar, mas
nem todas as identidades que ela sugere s˜ ao válidas, como a seguinte pro-
posição mostra.
f g ⇒ f g (1.21)
f g f g (1.22)
f g ⇒ f g
f g ⇒ f g
f g∨f g∨f g (Tricotomia)
27
1 Introduç˜
ao e conceitos b´asicos
Outras nota¸c˜
oes comuns
Definição 1.2
O logaritmo iterado é
0
≤
se n 1
log∗ n =
1 + log ∗ (log n) caso contrário
O logaritmo iterado é uma função que cresce extremamente lento; para valores
práticos de n, log ∗ n não ultrapassa 5.
1.2 Notas
Alan Turing provou em 1936 que o “problema de parada” n˜ ao é decidı́vel.
O estudo da complexidade de algoritmos come¸ cou com o artigo seminal de
Hartmanis and Stearns (1965).
1.3 Exerc´ıcios
(Soluções a partir da p´agina 235.)
Exercı́cio 1.1
Prove as caracter´
guma não ısticas
se aplica) para1.10
Ω. até 1.15 (ou caracterı́sticas equivalentes caso al-
Exercı́cio 1.2
Prove ou mostre um contra-exemplo. Para qualquer constante c ∈ R, c > 0
f ∈ O(g) ⇐⇒ f + c ∈ O(g) (1.23)
28
1.3 Exercı́cios
Exercı́cio 1.3
Prove ou mostre um contra-exemplo.
1. log(1 + n) = O(log n)
Exercı́cio 1.4
Considere a fun¸cão definido pela recorrência
fn = 2fn−1 ; f0 = 1.
Professor Veloz afirme que fn = O(n), e que isso pode ser verificado simples-
mente da forma
Exercı́cio 1.5
Mostre que a definição
{
ô(g(n)) = f : N → R+ | (∀c > 0)∃n0(∀n > n0) : f (n) < cg(n)}
(denotado com ô para diferenciar da definição o) e equivalente com a definição
1.2 para funções g(n) que são diferente de 0 a partir de um n0 .
Exercı́cio 1.6
Mostre que o n´umeros Fibonacci
n ≤n≤1
se 0
fn =
fn−2 + fn−1 ≥2
se n
Exercı́cio 1.7
Prove a seguinte variação do princı́pio de absorção:
g ∈ o(f ) ⇒ f − g ∈ Θ(f ).
29
1 Introduç˜
ao e conceitos b´asicos
Exercı́cio 1.8
Prove que
f ≤ g ⇒ O(f ) = O(g).
Exercı́cio 1.9
Prove que Θ(f ) = O(f ), mas o contrário O(f ) = Θ(f ) não é correto.
Exercı́cio 1.10
Para qualquer par das seguintes fun¸cões, analisa a complexidade mutual.
Exercı́cio 1.11
Prove: 2 −m = 1 + O(m−1 ).
Exercı́cio 1.12
1. Suponha que f e g são funções polinomiais e N em N: f (n) Θ(nr ) e ∈
g(n) Θ(ns ). O que se pode afirmar sobre a fun¸ cão composta g(f (n))?
∈
n 2
2. Classifique
f O(g), f as Θ(g)
∈ funções
∈ ou ff(n)Ω(g).
= 5 2 + 3 e g(n) = 3 n + 5 n como
∈ · · ·
3. Verifique se 2 n n · ∈ Θ(2n) e se 2 n+1 ∈ Θ(2n).
Exercı́cio 1.13
Mostra que log n ∈ O(n) para todo > 0.
30
2 An´
alise de complexidade
2.1 Introdu¸c˜
ao
Para analisar a eficiência de algoritmos faz pouco sentido medir os recur-
sos gastos em computadores especı́ficos, porque devido a diferentes conjuntos
de instruções, arquiteturas e desempenho dos processadores, as medidas s˜ ao
difı́ceis de comparar. Portanto, usamos um modelo de uma m´aquina que re-
flita as caracterı́sticas de computadores comuns, mas é independente de uma
implementação concreta. Um modelo comum é a m´ aquina de RAM com as
seguintes caracter´ ısticas:
• um processador com um ou mais registros, e com apontador de ins-
truções,
• uma memória infinita de n´umeros inteiros e
• um conjunto de instru¸cões elementares que podem ser executadas em
tempo O(1) (por exemplo fun¸cões básicas sobre n´umeros inteiros e de
ponto flutuante, acesso à memória e transferência de dados); essas operações
refletem operações tı́picas de máquinas concretas.
Observe que a escolha de um modelo abstrato não é totalmente trivial. Conhe-
cemos vários modelos de computadores, cuja poder computacional não é equi-
valente em termos de complexidade (que n˜ao viola a tese de Church-Turing).
Mas todos os modelos encontrados (fora da computa¸ cão quântica) são poli-
nomialmente equivalentes, e portanto, a noção de eficiência fica a mesma. A
tese que todos modelos computacionais s˜ao polinomialmente equivalentes as
vezes está chamado tese de Church-Turing estendida.
O plano
Uma hierarquia de abstra¸cões:
Tempo de Complexidade
/Número de / Operações no / pessimista
execução [s] operações caso pessimista
assintótica
Custos de execu¸c˜
oes
31
2 An´alise de complexidade
custo : E → R+
• e o custo da execu¸cão do algoritmo a depende da entrada d
desemp[a] : D → R+ = custo ◦ exec[a]
Definição 2.1
◦
O sı́mbolo denota a composi¸cão de fun¸cões tal que
(f ◦ g)(n) = f (g(n))
(leia: “ f depois g”).
Em geral, não interessam os custos especı́ficos para cada entrada, mas o “com-
portamento” do algoritmo. Uma medida natural é como os custos crescem com
o tamanho da entrada.
Condensa¸c˜
ao de custos
32
2.1 Introduç˜
ao
Condensa¸c˜
ao
Entrada 89:;
?>=<
D / R+
desemp
@ABC
GFED
OO
Custo da instância
tam
Tamanho ?>=<
89:;
N aval
@ABC
GFED
/ R+ Custo com tamanho n
Condensa¸c˜
ao
• A complexidade média
Cm [a](n) =
P (d) desemp[a](d)
tam(d)=n
33
2 An´alise de complexidade
Exemplo 2.1
Vamos aplicar essas noções num exemplo de um algoritmo simples. O objetivo
é decidir se uma sequência de n´
umeros naturais contém o número 1.
34
2.2 Complexidade pessimista
custo : E → R+ : e → |e|.
Por exemplo custo((for,for,if,return )) = 4. As entradas desse algoritmo são
sequências de números naturais, logo, D = N∗ e como tamanho da entrada
escolhemos
tam : D →
N : (a1 ,...,a n ) n. →
A função de execução atribui a sequência de operações executadas a qualquer
entrada. Temos
exec[Busca1](d) : D
→ E:
(for,if )i return { |
caso existe i = min j aj = 1 }
(a1 ,...,a n) → (for,if )n return caso contrário
◦
desemp[Busca1](n) = custo exec[Busca1] :
(a1 ,...,a n) → { |
2i + 1 caso existe i = min j aj = 1 }
2n + 1 caso contrário
35
2 An´alise de complexidade
1. Atribuição: v:=e
2. Sequência: c1;c2
3. Condicional: se b então c1 sen˜ao c2
4. Iteração definida: para i de j até m faça c
5. Iteração indefinida: enquanto b fa¸ca c
Convenção 2.1
A seguir vamos entender implicitamente todas opera¸cões sobre fun¸cões pon-
◦
tualmente, i.e. para alguma opera¸cão , e fun¸cões f, g com dom(f ) = dom(g)
temos
∀ ∈ ◦
d dom(f ) (f g) = f (d) g(d). ◦
Componentes
Composi¸c˜
ao de compo nentes
36
2.2 Complexidade pessimista
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 sequência S v := ordena(u); w := soma(u) com complexidades
cp [v := ordena(u)](n) = n2 e cp [w := soma(u)](n) = n. Então cp [S ] =
Θ(n2 + n) = Θ(n2 ). ♦
37
2 An´alise de complexidade
Exemplo 2.3
Considere uma partição das entradas do tamanho n tal que d D tam(d) =
.
{ ∈ |
}
n = D1 (n) ∪
D2 (n) e dois algoritmos A1 e A2 , A1 precisa n passos para
instâncias em D1 , e n2 para instâncias em D2 . A2 , contrariamente, precisa n2
para instâncias em D1 , e n passos para instˆancias em D2 . Com isso obtemos
e portanto
A atribui¸c˜
ao: Exemplos
A atribui¸c˜
ao
38
2.2 Complexidade pessimista
Exemplo 2.4
Continuando o exemplo 2.2 podemos examinar a atribui¸cão v := ordene(w).
Com complexidade pessimista para a ordenação da lista cp [ordene(w)] =
O(n2 ) e complexidade cp [ e ] = O(n) para a transferência, temos cp [v :=
←
ordene(w)] = O(n2 ) + O(n) = O(n2 ). ♦
Itera¸c˜
ao definida
Seja C =para i de j até m faça c
O número de itera¸cões é fixo, mas j e m dependem da entrada d.
•• Seja N (n) = max d{m(d)−j(d)+1 | tam(d) ≤ n} e N ∗(n) = max {N (n), 0}.
• N ∗(n) é o m´aximo de itera¸cões para entradas de tamanho até n.
• Tendo N ∗, podemos tratar a itera¸cão definida como uma sequência
c; c; ··· ; c
N ∗ (n) vezes
que resulta em
cp [C ] ≤ N ∗ cp [c]
Itera¸c˜
ao indefinida
Seja C =enquanto b faça c
• Para determinar a complexidade temos que saber o número de iterações.
• Seja H (d) o número da iteração (a partir de 1) em que a condição é falsa
pela primeira vez
• e h(n) = max {H (d) | tam(d) ≤ n} o número máximo de iterações com
entradas até tamanho n.
• Em analogia com a itera¸cão definida temos uma sequência
b; c; b; c; ··· ; b; c; b
−
h(n) 1 vezes
e portanto
cp [C ] (h 1)cp [c] + hcp [b]
≤ −
• Caso o teste b é absorvido pelo escopo c temos
cp [C ] ≤ (h − 1)cp [c]
Observe que pode ser difı́cil de determinar o número de iterações H (d); em
geral a questão não é decid´
ıvel.
39
2 An´alise de complexidade
Componentes disjuntivas
To make the MxAO thingy more concrete, i tend to let MxAO (f, g) = h
∈
for any h O(max(f, g)). This definition unfortunately satisfies not exactly
(but only in terms of O) the axioms. No, no, treat MxAO like the func-
tion class above! Then (i),(ii),(iii) hold, but not (i v): too strong. Relax to
MxAO (f, g) = O(g) is reasonable. (see also lecture 4).
Componentes disjuntivas
O condicional
Seja C =se b ent˜ao c1 sen˜ao c2
• O condicional consiste em
– uma avaliação da condição b
– uma avaliação do comando c1 ou c2 (componentes disjuntivas).
cp [C ] ≤ cp [b] + cp[c1]
Exemplo 2.5
Considere um algoritmo a que, dependendo do primeiro elemento de uma lista
u, ordena a lista ou determina seu somat´orio:
40
2.2 Complexidade pessimista
Exemplo
1 s e hd(u) = 0 ent˜ ao
2 v := ordena(u)
3 s en ˜ao
4 s := soma(u)
Assumindo que o teste é poss´ıvel em tempo constante, ele é absorvido pelo
trabalho em ambos casos, tal que
2.2.2 Exemplos
Exemplo 2.6 (Bubblesort)
Nesse exemplo vamos estudar o algoritmo Bubblesort de ordena¸ cão.
Bubblesort
41
2 An´alise de complexidade
Bubblesort: Complexidade
Ordena¸c˜
ao por inser¸
c˜
ao direta
42
2.2 Complexidade pessimista
M´
aximo
67 end for m
return
43
2 An´alise de complexidade
Busca seq¨uencial
1 fo r i := 1,...,n do
2 i f ai = c then
3 return i
4 end i f
5 end for
6 return ∞
Busca seq¨uencial
Counting-Sort
44
2.2 Complexidade pessimista
6 end for
7 f o r i := 2,...,k do
8 ci := ci + ci−1
9 end for
10 f o r i := n,..., 1 do
11 bcai := ai
12 cai := cai − 1
13 end for
14 b ,...,b
return 1 n
Loteria Esportiva
1 i := 1
2 while i n do ≤
3 pi := 0
4 fo r j de 1,..., 13 do
5 i f Ai,j = rj then pi := pi + 1
6 end for
7 i := i + 1
8 end while
9 f or i de1,...,n do
10 i f pi = 13 then pr in t ( Apo sta dor i é ga nh ad or ! )
11 end for
12 return p
Busca Bin´
aria
45
2 An´alise de complexidade
Busca em Largura
46
2.2 Complexidade pessimista
Sa´
ıda Posição i vetor de distˆancias (número de arcos) de cada n´o ao srcem.
1 f o r cada v´er ti c e u V ∈ − {s} do
2 cu :=BRANCO
3 du = ∞
4 end for
5 cs :=CINZA
6 ds := 0
7 Q := ∅
8 En qu eu e (Q, s )
9 while Q = ∅
10 u := Dequeue( Q)
11 ∈
f o r cada v Adj (u)
12 i f cv =BRANCO
13 then cv =CINZA
14 dv = du + 1
15 Enqueue (Q, v )
16 end if
17 end for
18 cu =PRETO
19 end while
Este algoritmo, bem como sua análise, estão disponı́veis no livro do Cor-
men ( Cormen et al. , 2001). O la¸co while (linhas 9-19) ser´a executado no
| |
máximo V vezes, ou seja, para cada n´o do grafo. J´a o laço for (linhas 11-17)
executará du vezes, sendo du o grau de saı́da do nó u. Desta forma, os dois
| |
laços executarão E vezes (este tipo de an´alise se chama de an´alise agregada).
Como o primeiro la¸co for do algoritmo tem complexidade O( V ), então a | |
complexidade total do algoritmo ser´a O( V + E ). | | | | ♦
cik =
aij bjk 1 ≤ i ≤ m; 1 ≤ k ≤ o
≤≤
1 j n
e resulta na implementa¸cão
47
2 An´alise de complexidade
Sa´
ıda O produto C = (cik ) = AB ∈ Rm × o .
1 fo r i := 1,...,m do
2 f or k := 1,...,o do
3 cik := 0
4 fo r j := 1,...,n do
5 cik := cik + aij bjk
6 end for
78 end
end
forfor
2.3 Complexidade m´
edia
Nesse capı́tulo, vamos estudar algumas técnicas de análise da complexidade
média.
Motiva¸c˜
ao
48
2.3 Complexidade média
Cm [a](n) = E [desemp[a]] =
P (d) desemp[a](d)
d Dn∈
Tratabilidade?
(Resultados citados: (Gurevich and Shelah, 1987; Du and Ko, 1997) (Caminho
Hamiltanio), (Wang, 1997) (Parada em k passos).)
Criptografia
M´
eto do
49
2 An´alise de complexidade
Busca seq¨uencial
50
2.3 Complexidade média
Exemplo 2.14
(Continuando o exemplo 2.1.)
Neste exemplo vamos analisar o algoritmo considerando que a ocorrência dos
números siga uma outra distribui¸cão que n˜ao a uniforme. Ainda, considere o
caso em que não há números repetidos no conjunto. Seja n um tamanho fixo.
{
Para Busca1 temos o espaço amostral Dn = (a1 ,...,a n ) a1 1,...,a n | ≥ ≥
}
1 . Supondo que os n´umeros sigam uma distribuição na qual cada elemento da
sequência é gerado independentemente com a probabilidade Pr[ai = n] = 2−n
(que é possı́vel porque 1≤i 2−i = 1).
Com isso temos
Pr[(a1 ,...,a n )] = 2−ai
≤≤
1 i n
e, Pr[ ai = 1 ] = 1 /2 e Pr[ ai = 1 ] = 1 /2. Considere as variáveis aleatórias
desemp[a] e
µ se o primeiro 1 est´a na posi¸cão µ
p=
n caso contrário
Temos desemp[a] = 2p +1 (veja os resultados do exemplo 2.1). Para i estar na
primeira posição com elemento 1 as posi¸cões 1 ,...,i −
1 devem ser diferente
de 1, e ai deve ser 1. Logo para 1 ≤i<n
Pr[p = i] = Pr[ a1 = 1] Pr[ai = 1] = 2 −i .
= 1] ··· Pr[ai−1
O caso p = n tem duas causas: ou a posi¸cão do primeiro 1 é n ou a sequência
não contém 1. Ambas têm probabilidade 2−n e logo Pr[ p = n] = 21−n .
A complexidade média calcula-se como
cp [a](n) = E [desemp[a]] = E [2p + 1] = 2 E [p] + 1
E [p] =
Pr[p = i]i = 2−n n +
2−n n
≥i 0 1≤i≤n
= 2 n + 2 − 2 (n + 2) = 2 − 21−n
− n − n
(A.33)
cp [a](n) = 5 − 22−n = O(1)
51
2 An´alise de complexidade
Ordena¸c˜
ao por inser¸
c˜
ao direta
• Qual o número médio de comparações?
• Observação: Com as entradas distribuı́das uniformemente, a posição da
chave i na sequência já ordenada também é.
comparações em média.
Bubblesort: Transposi¸c˜
oes
52
2.3 Complexidade média
4
2.5x10
4
2.0x10
e
d
a
idt 4
n
1.5x10
au
Q
4
1.0x10
3
5.0x10
0 5 10 15 20 25 30 35
Número de transposições
Invers˜
oes
• Uma invers˜ao em uma permutação é um par que não está ordenado, i.e.
i<j tal que ai > aj .
Permutação #Inversões
123 0
132 1
• Exemplos 213 1
231 2
312 2
321 3
53
2 An´alise de complexidade
N´
umero m´
edio de transposi¸
c˜
oes
N´
umero m´
edio de transposi¸
c˜
oes
= n(n − 1)/4
Logo, a complexidade média (de transposições) é Θ(n2 ).
• ♦
54
2.3 Complexidade média
M´
aximo
Tabelas de invers˜oes
• Observação,
seu esquerdo na
sãobusca do m´
menores, aximo
i.e. i é máximo
se todos local
n´umeros quesesão
todos n´umeros
maiores são no
no
seu direito, i.e. se bi = 0.
N´
umero esperado de atualiza¸c˜
oes
55
2 An´alise de complexidade
Quicksort
Particionar
Sa´ ∈
ıda Um ı́ndice m [l, r] e a com elementos ordenados tal que ai ≤ am
∈ ≤ ∈
para i [l, m[ e am ai para i ]m, r].
1 esco lhe u m p iv ˆo ap
2 t r o c a ap e ar
3 i := l − 1 { último ı́n di ce menor que pivˆo }
4 f o r j:= l to r − 1 do
5 i f aj ≤ ar then
6 i:=i +1
7 t r o c a ai e aj
8 end i f
9 end for
10 tr oc a ai+1 e ar
11 return i + 1
56
2.3 Complexidade média
Escolher o pivˆo
• O tamanho da entrada é n = r − l + 1
Dependendo da escolha do pivˆo: precisa nenhuma ou uma compara¸cão.
•• O laço nas linhas 4–9 tem n − 1 iterações.
• O trabalho no corpo do la¸co é 1 = Θ(1) (uma comparação)
• Portanto temos a complexidade pessimista
cp [Partition] = n − 1 = n = Θ(n)
cp [Partition] = n − 1 + 1 = n = Θ(n).
Quicksort
Sa´
ıda a com os elementos em ordem não-decrescente, i.e. para i < j temos
≤
ai aj .
57
2 An´alise de complexidade
1 i f l < r then
2 m : = Partitio n ( l , r , a );
3 −
Q u i c k s o r t( l , m 1 , a ) ;
4 Q u i c k s o r t( m + 1 , r , a ) ;
5 end i f
Complexidade pessimista
58
2.3 Complexidade média
Complexidade pessimista
O máximo 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)
2
= ··· = (i − 1) = Θ(n )
≤≤
1 i n
• Caso i = n/2
cp [QS ](n) = n + 2cp [QS ](n/2) = n − 1 + 2((n − 1)/2 + cp(n/4))
= ···
= Θ(n log2 n)
cm [QS ] =
Pr[d] desemp[QS ](d)
∈
d Dn
59
2 An´alise de complexidade
=
Pr[d](desemp[QS ](dl ) + desemp[QS ](dr ))
≤≤ ∈
1 i n d Dn
i
=
Pr[X = i](cm [QS ](i − 1) + cm [QS ](n − i))
≤≤
1 i n
Tn = n +
Pr[X = i] (Ti−1 + Tn−i )
≤≤
1 i n
≤
com base Tn = 0 para n 1. A probabilidade de escolher o i-gésimo elemento
como pivô depende da estratégia da escolha. Vamos estudar dois casos.
1. Escolhe o primeiro elemento como pivô. Temos Pr[X = i] = 1/n. Como
Pr[X = i] não depende do i a equação acima vira
Tn = n − 1 + 2/n
Ti
≤
0 i<n
60
2.3 Complexidade média
Tn = n + 2/(n(n − 1))
(i − 1) (Ti−1 + Tn−i )
≤≤
1 i n
= n + 2/(n(n − 1))
i (Ti + Tn−i−1 )
≤
0 i<n
= n + 2/(n(n − 1))
iTi +
iTn−i−1
≤
0 i<n ≤
0 i<n
= n + 2/n
Ti
≤
0 i<n
Recorrˆ
encia
Exemplo 2.19
Vamos determinar a probabilidade de escolher o pivô Pr[X = i] no caso n = 3
explicitamente:
Permutação Pivô
123 2
132 3
213 2
231 3
312 3
321 3
61
2 An´alise de complexidade
Resolver a equa¸c˜
ao
• A solução da recorrência
Tn = n + 1 + 2/n Ti
≤
0 i<n
é
Tn = Θ(n ln n)
Tn = n + 1 + 2/n
Ti para n > 0
≤
0 i<n
nTn = n2 + n + 2
Ti
≤
0 i<n
2 2 4
Tn = Tn−1 +
n+1 n n+1
62
2.4 Exercı́cios
2 4
An = An−1 + =
n+1 i+1
≤≤
1 i n
e portanto
1
Tn = 2(n + 1)
≤ ≤ i+1
1 i n
= 2(n + 1)(Hn − n +n 1 )
= Θ(n ln n)
2.4 Exerc´ıcios
(Soluções a partir da p´agina 238.)
Exercı́cio 2.1
Qual a complexidade pessimista dos seguintes algoritmos?
63
2 An´alise de complexidade
1 fo r i := 1 ...n do
2 f or j := 1 . . . 2i
3 o p e r a ¸c ões com comple xidade O(j 2 )
4 j := j + 1
5 end for
6 end for
64
2.4 Exercı́cios
2 j := i
3 while j n do ≤
4 o p e r a ç ˜oes com complex idade O(2j )
5 j := j +1
6 end for
7 end for
Exercı́cio 2.2
Tentando resolver a recorrência
Tn = n − 1 + 2/n
Ti
0≤i<n
Tn = n − 1 + 2/n
O(i)
≤
0 i<n
Exercı́cio 2.3
Escreve um algoritmo que determina o segundo maior elemento de uma sequência
a1 ,...,a n . Qual a complexidade pessimista dele considerando uma com-
paração como operação básica?
Exercı́cio 2.4
Escreve um algoritmo que, dado uma sequência a1 ,...,a n com ai ∈ N deter-
⊆
mina um conjunto de ı́ndices C [1, n] tal que
∈
i C
ai
− ∈
i C
ai
Exercı́cio 2.5
Qual o n´umero médio de atualizações no algoritmo
65
2 An´alise de complexidade
1 s := 0
2 for i = 1,...,n do
3
i f i > n/2 then
4 s := s+i
5 end i f
6 end for
Exercı́cio 2.6
6 end for
Exercı́cio 2.7
Suponha um conjunto de chaves numa ´arvore binária completa de k n´ıveis e
suponha uma busca bin´aria tal que cada chave da ´arvore está buscada com
a mesma probabilidade (em particular n˜ao vamos considerar o caso que uma
chave buscada não pertence à árvore.). Tanto n´
os quanto folhas contém chaves.
Tn = n + 1 + 2/n
Ti
≤
0 i<n
66
2.4 Exercı́cios
resolve as recorrências
Tn = n + 2/n
Ti
≤
0 i<n
Tn = n − 1 + 2/n
Ti
≤
0 i<n
explicitamente.
67
Parte II
Projeto de algoritmos
69
3 Introdu ¸c˜
ao
Resolver problemas
• Modelar o problema
– Simplificar e abstrair
– Comparar com problemas conhecidos
• Inventar um novo algoritmo
– Ganhar experiência com exemplos
– Aplicar ou variar técnicas conhecidas (mais comum)
Resolver problemas
71
4 Algoritmos gul osos
Radix omnium malorum est cupiditas.
(Seneca)
4.1 Introdu¸c˜
ao
(Veja (Toscani and Veloso, 2005, cap. 5.1.3).)
Algoritmos gulosos
Trocar moedas
Troca m ı́nima
73
4 Algoritmos gulosos
A abordagem gulosa
1 for i:=1,...,n do
2 ci
:= s/vi
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 solu¸ cão melhor: v1 = 0, v2 = 2, v3 = 0.
No primeiro exemplo, parece que a abordagem gulosa acha a melhor solu¸ cão.
Qual a diferença? ♦
Uma condição simples é que todos valores maiores são múltiplos inteiros dos
menores; essa condi¸cão não é necessária, porque o algoritmo guloso também
acha soluções para outros sistemas de moedas, por exemplo no primeiro sis-
tema do exemplo acima.
Lema 4.1
A solução do algoritmo guloso é a única que satisfaz
ci vi < vm−1
∈
i [m,n]
74
4.1 Introduç˜
ao
=
fi−1 vi −
vi
∈
i [m,n] ∈
i [m,n]
= vi−1 vi
∈−
i [m,n] −
∈
i [m,n]
= vm − 1 vn = vm−1 − 1 < vm − 1
Exemplo 4.2
Considere caminhos (simples) em grafos. O caminho mais curto v1 v2 ...v n
entre dois vértices v1 e vn tem subestrutura ´otima, porque um subcaminho
também é mais curto (senão seria possı́vel de obter um caminho ainda mais
curto).
75
4 Algoritmos gulosos
Do outro lado, o caminho mais longo entre dois vértices v1 ...v n não tem
subestrutura ótima: o subcaminho v2 ...v n , por exemplo, n˜ao precisa ser o
caminho mais longo. Por exemplo no grafo
1
iGG j
GG
GG
GG
G
1 GG 1
GG
G
G
k
o caminho mais longo entre i e j é ikj, mas o subcaminho kj não é o subca-
minho mais longo entre k e j. ♦
Para aplicar a defini¸cão 4.1 temos que conhecer (i) o conjunto de subpro-
blemas de um problema e (ii) provar, que uma solu¸ cão ótima contém uma
(sub-)solução que é ótima para um subproblema. Se sabemos como esten-
der uma solução de um subproblema para uma solu¸ cão de todo problema, a
subestrutura ótima fornece um algoritmo genérico da forma
Algoritmo 4.1instância
Entrada Uma (Solu¸cão genérica
I de de problemas com subestrutura ótim
um problema.
ıda Uma solução ótima S ∗ de I .
Sa´
1 re so lv e ( I ):=
2 S ∗ := n i l { melhor solu ção }
3 f or todos sub pro ble mas I de I do
4 S :=r es ol ve ( I )
5 e s t e n d e S par a uma solu ¸c ã o S de I
6 i f S é a melho r so lu ¸c ã o then
7 S ∗ := S
8 end i f
9 end for
76
4.2 Algoritmos em grafos
´
Arvores espalhadas m´ınimas (AEM)
• Um subgrafo conexo com custo mı́nimo deve ser uma árvore (por quê?).
• Grafo não conexo: Busca uma árvore em todo componente (floresta
mı́nima).
77
4 Algoritmos gulosos
Aplica¸c˜
oes
• Redes elétricas
• Sistemas de estradas
• Pipelines
• Caixeiro viajante
• Linhas telefônicas alugadas
Resolver AEM
78
4.2 Algoritmos em grafos
Prova
Resolver AEM
Sa´
ıda Uma árvore T = (V, ET ) com custo
∈
e ET c(e) mı́nimo.
79
4 Algoritmos gulosos
1 V := v para um v V
{} ∈
2 ET := ∅
3 while V = V do
4 { }
e s c o l h e e = u, v com c u s t o mı́nimo
5 e n t r e V e V V (com u V )
\ ∈
6 V := V
∪{ }v
7 ET := ET ∪{ } e
8 end while
1 ET := ∅
2 while (V, ET ) não é con exo do
3 e s c o l h a e com cu st o mı́nimo que n˜ao pro duz cı́ c l o
4 ET := ET ∪ {e}
5 end while
Exemplo 4.3
Resultado dos algoritmos de Prim e Kruskal para Polinésia Francesa:
O mesmo! ♦
80
4.2 Algoritmos em grafos
Implementa¸c˜
ao do algoritmo de Prim
6
7 for wQ.∈ N (v ) do
atualiza((v, w), c(v, w ))
8 end for
9 ET := ET ∪ {{u, v }}
10 end while
81
4 Algoritmos gulosos
Algoritmo de Prim
• Complexidade do algoritmo com o refinamento acima:
• O laço 4–9 precisa n − 1 iterações.
• O laço 6–8 precisa no total menos que m iterações.
• cp[AEM-Prim] = O(n log n + m log n) = O(m log n)
Uma implementação do algoritmo de Kruskal em tempo O(m log n) também
érepresentam
possı́vel. Para esta implementação
nós conectados de maneira é necessário de manter
eficiente. Isso leva a conjuntos que
uma estrutura
de dados conhecida como Union-Find que tem as opera¸cões
• C := cria(e): cria um conjunto com ´unico elemento e.
• união(C1, C2): junta os conjuntos C1 e C2.
• C := busca(e): retorna o conjunto do elemento e.
Essas operações podem ser implementados em tempo O(1), O(1) e O(log n)
(para n elementos) respectivamente.
82
4.3 Algoritmos de seqüenciamento
Aproxima¸
c˜
ao: Uma id´
eia
1. Começa com uma estimativa vi´avel: d(s) = 0 e d(t) = ∞ para todo n´o
em V \{ }
s .
2. Depois escolhe uma aresta e = (u, v) ∈ E tal que d(u) + c(e) ≤ d(v) e
atualiza d(v) = d(u) + c(e).
Seq¨
uenciamento de intervalos
Considere o seguinte problema
Seqüenciamento de intervalos
{
ancia Um conjunto de intervalos S = [ci , fi ], 1
Instˆ ≤ i ≤ n}, cada com
começo ci e fim fi tal que ci < fi .
ai1o, iUm
Solu¸c˜ ∈
2 Cconjunto
temos i1compat´
∩ . C
i2 =ıvel
∅⊆ S de intervalos, i.e. cada par
83
4 Algoritmos gulosos
Como resolver?
Implementa¸c˜
ao
1 C := ∅ ∅
2 while S = do
3 ∈
S e j a [ c, f ] S com f mı́nimo
4 ∪
C := C [c, f ]
5 \{ ∈ | ∩
S := S i S i [c, f ] = ∅}
6 end while
7 return C
Proposição 4.2
Para todo 1 ≤ ≤
i n temos fi ≤ fi.
≤
Prova. Como O é ótimo, temos n m. Prova por indução. Base: Como o
algoritmo guloso escolhe o intervalo cujo terminação é mı́nima, temos f1 f1 .
≤
Passo: Seja fi fi com i < n. O algoritmo guloso vai escolher entre os inter-
≤
valos que começam depois fi o com terminação mı́nima. O próximo intervalo
84
4.3 Algoritmos de seqüenciamento
[ci+1 , mi+1 ] do seqüenciamento ótimo está entre eles, porque ele começa depois
fi e fi
≥ fi . Portanto, o próximo intervalo escolhido pelo algoritmo guloso
termina antes de fi+1 , i.e. fi+1 fi+1 .
≤
Proposição 4.3
O seqüenciamento do algoritmo guloso é ótimo.
Complexidade
Conjunto independente m´
aximo
Considere o problema
Solu¸c˜m1Um
ao
{ , m2conjunto
E . independente M
} ∈ ⊆ V , i.e. todo m1, m2 ∈ V temos
85
4 Algoritmos gulosos
Grafos de intervalo
Varia¸
c˜
ao do problema
Considere uma variação de Seqüenciamento de intervalos:
Particionamento de intervalos
ancia Um conjunto de intervalos S = [ci , fi ], 1
Instˆ i n , cada com
começo ci e fim fi tal que ci < fi . { ≤ ≤ }
Solu¸c˜
ao Uma atribuição de rótulos para intervalos tal que cada conjunto
de intervalos com a mesma r´otula é compat´ ıvel.
Objetivo Minimiza o número de rótulos diferentes.
Observa¸c˜
ao
86
4.3 Algoritmos de seqüenciamento
Corretude
Colora¸
c˜
ao de grafos
Considere o problema
Coloração mı́nima
ancia Um grafo não-direcionado G = (V, E ).
Instˆ
87
4 Algoritmos gulosos
Solu¸c˜
ao Uma coloração de G, i.e. uma atribui¸cão de cores c : V → C tal
{
que c(v1 ) = c(v2 ) para v1 , v2 E. }∈
Objetivo Minimiza o número de cores C . | |
4.4 T´opicos
Compress˜
ao de dados
GATCCCTCCGCTCTGGGGAGGCAGCGCTGGCGGCGG...
com 1666bp1 .
• Como comprimir?
– Com código fixo:
A = 00; G = 01;
T = 10; C = 11.
88
4.4 T´opicos
C´
odigos: Exemplos
• Tentativa 1
T = 0; A = 1;
G = 01; C = 10
• Desvantagem: Ambı́guo! 01 = T A ou 01 = G?
• Tentativa 2
C = 0; G = 10;
A = 110; T = 111
• Os exemplos mostram
– Dependendo das freqüências, um código com comprimento variável
pode custar menos.
– Para evitar ambigüedades, nenhum prefixo de um c´odigo pode ser
outro código: ele é livre de prefixos (inglês: prefix-free).
• Observação: Esses c´odigos correspondem a ´arvores binárias.
•
0 || fff1
~~|| f
C •
0 ~~ bbb1
~~~ b
G •
0 Ð bbb1
Ð b
ÐÐ
A T
Cada código livre de prefixo pode ser representado usando uma árvore binária:
Começando com a raiz, o sub-´ arvore da esquerda representa os c´odigos que
começam
com 1. Esse comprocesso
0 e a sub-´arvore
continuada
emdireita
cada representa
sub-árvoreos c´odigos queos
considerando come¸cam
demais
bits. Caso todos bits de um c´odigo foram considerados, a árvore termina nessa
posição com uma folha para esse c´odigo.
Essas considera¸cões levam diretamente a um algoritmo. Na seguinte imple-
mentação, vamos representar ´arvores binárias como estrutura da dados abs-
trata que satisfaz
89
4 Algoritmos gulosos
|
BinTree ::= Nil Node(BinTree,Bintree)
uma folha sendo um n´o sem filhos. Vamos usar a abrevia¸cão
Leaf ::= Node(Nil,Nil).
90
4.4 T´opicos
Algoritmo
91
4 Algoritmos gulosos
{ | ∈ }
1 Q := Leaf(fs ) s S { f i l a de pr io ri da de }
| |
2 while Q > 0 do
3 b1 := Q. min() com b1 = Node(fi , bi1 , bi2 )
4 b2 := Q. min() com b2 = Node(fj , bj 1 , bj 2 )
5 Q := Q.add(Node(fi + fj , b1 , b2 ))
6 end while
Exemplo 4.4
Saccharomyces cerevisiae
Considere a sequência genética do Saccharomyces cerevisiae (inglês: baker’s
yeast)
S = A,C,D,E,F,G,H,I,K,L,M,N,P,Q,R,S,T,V,W,Y
{ }
que ocorrem com as freq¨uências
ACD EF G H I KL
0.055 0 .013 0 .058 0 .065 0 .045 0 .050 0 .022 0 .066 0 .073 0 .096
M NP QRS T VWY
0.021 0 .061 0 .043 0 .039 0 .045 0 .090 0 .059 0 .056 0 .010 0 .034
Resultados
O algoritmo Huffman resulta em
A C D E F G HIK L
0010 100110 1110 0101 0000 1000 100111 1101 0011 100
M N PQ R STVWY
000111 1011 11011 01011 10111 1111 0001 1010 000110 10110
que precisa 4 .201 b/bp (compare com log 20 4.32). ♦
2 ≈
4.5 Notas
O algoritmo guloso para sistemas de moedas Magazine, Nemhauser e Trot-
ter ( Magazine et al. , 1975) dão critérios necessários e suficientes para uma
solução gulosa do problema de troca ser ´otima. Dado um sistema de moedas,
92
4.6 Exercı́cios
4.6 Exerc´ıcios
(Soluções a partir da p´agina 241.)
93
5 Programa¸c˜
ao dinˆ
amica
5.1 Introdu¸c˜
ao
Temos um par de coelhos recém-nascidos. Um par recém-nascido se torna fértil
depois um mês. Depois ele gera um outro par a cada mês seguinte. Logo, os
primeiros descendentes nascem em dois meses. Supondo que os coelhos nunca
morrem, quantos pares temos depois de n meses?
n 01 23 45 6 ···
# 1 1 2 3 5 8 13 ···
Como os pares somente produzem filhos depois de dois meses, temos
Fn = Fn − 1 + Fn−2
população antiga
descendentes
95
5 Programaç˜
ao dinâmica
1+ 5
√
− n
1 −√5 n √
1+ 5
n
2 2 2 1
Fn = √ √ 5
=
5
+
2
e foi publicado por Binet em 1843.)
Qual o problema dessa solu¸cão? De um la do temos um n´umero exponencial
de caminhos das chamadas recursivas
% % !
Fn Fn − 1 Fn−2
B Fn−3
9 Fn−4
B : ···
1 f0 := 1
2 f1 := 1
3 fi := ⊥
para i ≥2
4
56 fi bi(f n)fn :=
= ⊥
then
7 −
fn := fi b ( n 1)+ f i b ( n − 2)
8 end i f
9 return fn
10 end
Exemplo de uma execu¸cão:
4 : f5h
hh
hh
hh
zz "
3 : f4r f3
rr
rr
rr
zz
r$
2 : f3rrr f2
rr
rr
zz r$
1 : f2r f1
zz rr
zz rr
zz rr
||z r$
f1 f0
96
5.1 Introduç˜
ao
f5 f4 f3 f2 f1 f0
Inicial ⊥⊥⊥⊥ 1 1
1 ⊥ ⊥ ⊥ 2 1 1
2 ⊥ ⊥ 3211
3 ⊥ 53211
4 8 5 3 2 1 1
O trabalho agora é O(n), i.e. linear! Essa abordagem se chama memoizaç˜ ao:
usamos uma cache para evitar recalcular resultados intermedi´arios utilizados
frequentemente. Essa implementação é top-down e corresponde exatamente
à recorrência acima. Uma implementação (ligeiramente) mais eficiente que
preenche a “cache” de forma bottom-up é
1 fi b ( n ) :=
2 f0 := 1
3 f1 := 1
4 ∈
f or i [2, n] do
5 fi := fi−1 + fi−2
6 end for
7 return fn
8 end
Finalmente, podemos otimizar essa computa¸cão ainda mais, evitando total-
mente a cache
1 fi b ( n ) :=
2 f := 1
3 g := 1
4 ∈
f or i [2, n] do
5 { invariante: ∧
f = Fi−2 g = Fi−1 }
6 g := f + g
7 f := g f−
8 { invariante: ∧
f = Fi−1 g = Fi }
9 end for
A idéia de armazenar valores intermediários usados freqüentemente numa com-
putação recursiva é uma das idéias principais da programa¸ ao dinâmica (a
c˜
outra senda o princı́pio de otimalidade, veja abaixo). A sequência de imple-
mentações no nosso
de programação exemploinclusive
dinâmica, dos n´umeros Fibonacci
o ´ultimo é tı́pico
para reduzir para algoritmos
a complexidade de
espaço. Tipicamente usa-se implementações ascendentes (ingl. bottom-up).
Programa¸c˜
ao Dinˆ
amica (PD)
97
5 Programaç˜
ao dinâmica
Id´
eias b´
asicas da PD
• Inicialmente a entrada
forma ascendente é decomposta em partes mı́nimas e resolvidas de
(bottom-up)
• A cada passo os resultados parciais s˜ ao combinados resultando respos-
tas para subproblemas maiores, até obter a resposta para o problema
srcinal
• A decomposição é feita uma única vez, e os casos menores s˜ao tratados
antes dos maiores
• Este método é chamado ascendente, ao contrário dos métodos recursivos
que são métodos descendentes.
98
5.2 Comparaç˜
ao de sequências
5.2 Compara¸c˜
ao de sequˆ
encias
5.2.1 Subsequˆ
encia Comum Mais Longa
Subsequˆ
encia Comum Mais Longa
Subsequˆ
encia Comum Mais Longa
99
5 Programaç˜
ao dinâmica
Com
duzir memoização ou armazenamento
o tempo e espaço para O(nm): de valores intermedi´arios, podemos re-
SCML
23 nfo:=
r ico
:=mp0 ri
tomemnt odo
(Y)c [ i ,0 ] := 0;
4 fo r j := 1 to n do c [0 , j ] := 0;
5 fo r i := 1 to m do
6 for j := 1 to n do
7 i f xi = yj then
100
5.2 Comparaç˜
ao de sequências
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 for
13 return c[m, n]
Exemplo
. BDCA BA
.0 00 000 0
A 0 0 0 0 1 11
B 0 1 1 1 12 2
C 0 1 1 2 22 2
B
D 00 11 12 22 22 3 3 3 3
A 0 1 2 2 3 34
B 0 1 2 2 34 4
101
5 Programaç˜
ao dinâmica
15
16 return c e b b[i, j] := ←
Exemplo
. B DCABA
. 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 método simples para reduzir o espaço de O(nm) (veja
os comentários sobre o algoritmo de Hirschberg abaixo). Mantendo duas li-
nhas ou colunas de c, gasta menos recursos, mas para recupar a subsequência
comum, temos que manter O(nm) elementos em b.
102
5.2 Comparaç˜
ao de sequências
Print-SCML
103
5 Programaç˜
ao dinâmica
ou uma inser¸cão no segundo string, etc.). Esse problema tem subest rutura
ótima: Uma solução ótima contém uma solução ótima do subproblema sem
a última coluna, sen˜ao podemos obter uma solução de menor custo. Existem
quatro casos poss´ıveis para a última coluna:
−
a
; ;
a
;
a
− a a b
com caracteres a, b diferentes. O caso ( a, a) somente se aplica, se os ´ultimos
caracteres são iguais, o caso ( a, b) somente, se eles s˜ao diferentes. Portanto,
considerando todos casos possı́veis fornece uma solução ótima:
| |||
max( s , t ) | | ||
se s = 0 ou t = 0
d(s, t) =
min(d(s , t) + 1, d(s, t ) + 1, d(s , t ) + [c1 = c2 ]) se s = s c1 e t = t c2
Essa distˆancia está conhecida como distância de Levenshtein (Levenshtein,
1966). Uma implementa¸cão direta é
Distˆ
ancia de Edi¸
c˜
ao
104
5.2 Comparaç˜
ao de sequências
Distˆ
ancia de Edi¸
c˜
ao
Distˆ
ancia entre textos
Valores armazenados na matriz M para o c´alculo da distância entre ALTO e
LOIROS
· 0· LOI
1234
ROS
56
A 1 1 234 56
L 2 1 234 56
T 3 2 234 56
O 4 3 234 4 5
105
5 Programaç˜
ao dinâmica
-ALTO-
LOIROS
Distˆ
ancia entre textos
Algoritmo 5.6
Entrada Dois (PD-distância)
strings s e t, e n e m, seus respectivos tamanhos medidos
em número de caracteres.
ıda A distância mı́nima entre s e t e uma matriz P = (pi,j ) que arma-
Sa´
zena a sequência de operações.
Coment´ario O algoritmo usa uma matriz M = (mi,j ) ∈N(n+1)×(m+1)
que armazena as distˆancias mı́nimas mi,j entre os prefixos s[1 ...i ]
e t[1 ...j ].
−
1 PD distˆa nc i a ( s , t ,n ,m):=
2 f or i := 0,...,n do mi,0 = i; pi,0 := 1 −
3 f or i := 1,...,m do m0,i = i; p0,i := 1 −
45 f orfo ir :=j :=
1,...,n
1,...,mdo do
6 i f ( si = tj ) then
7 sol0 = mi−1,j −1
8 else
9 sol0 = mi−1,j −1 + 1
10 end i f
11 sol1 := mi,j −1 + 1
12 sol2 := mi−1,j + 1
13 mi,j := min(sol0 ,sol 1 ,sol 2 ) ;
14 {|
pi,j := min i soli = mij }
15 end for
16 return mi,j
Reconstru¸c˜
ao da Sequˆ
encia de Opera¸
c˜
oes
106
5.3 Problema da Mochila
aWo . Um subconjunto S
Solu¸c˜ ⊆ [1, n] que cabe na mochila, i.e. ∈ wi ≤
i S
Idéia: Ou item i faz parte da solu¸cão ótima com itens i...n ou não.
107
5 Programaç˜
ao dinâmica
• Caso sim: temos uma solução com valor vi a mais do que a solução ótima
para itens i + 1,...,n com capacidade restante W − wi .
• Caso não: temos um valor correspondente à solução ótima para itens
i + 1,...,n com capacidade W .
Seja M (i, w) o valor da solu¸cão máxima para itens em [ i, n] e capacidade W .
A idéia acima define uma recorrência
0 se i > n ou w = 0
M (i, w) = M (i + 1, w) se wi > w não cabe
{
max M (i + 1, w), M (i + 1, w − w i ) + vi } se wi w ≤
A solução desejada é M (n, W ). Para determinar a sele¸cão de itens:
Mo chila m´
axima (Knapsack)
5.4 Multiplica¸c˜
ao de Cadeias de Matrizes
Qual é a melhor ordem para multiplicar n matrizes M = M1 ×···× Mn ? Como
o produto de matrizes é associativo, temos várias possibilidades de chegar em
M . Por exemplo, com quatro matrizes temos as cinco possibilidades
Poss´ıveis multiplica¸
c˜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
Dependendo do tamanho
número de adi¸cões dos matrizes,
é multiplicações. O um desses
produto de produtos tem o pmenor
duas matrizes ×q e
× −
q r precisa prq multiplicações e pr(q 1) adições. No exemplo acima, caso
temos matrizes do tamanho 3 × × × ×
1, 1 4, 4 1 e 1 5 as ordens diferentes
resultam em
N´
umero de multiplica¸c˜
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
109
5 Programaç˜
ao dinâmica
em tempo linear. Mas quantas ordens tem? O produto final consiste em duas
−
matrizes que são os resultados dos produtos de i e n i matrizes; o ponto de
separação i pode ser depois qualquer matriz 1 ≤
i < n. Por isso o n´umero de
possibilidades Cn satisfaz a recorrência
Cn =
Ci Cn−i
≤
1 i<n
Solu¸c˜
ao p or Recorrˆ
encia
O número de possibilidades Tn satisfaz a recorrência
T (n) =
T (i)T (n − i)
≤
1 i<n 1 −
≥
para n 1 e as condi¸cões T (1) = 1.
A solução dessa recorrência é T (n) = 2nn (2(2n 1)) = O(4n /n3/2 ) e temos
−
Cn 2n−2 .
≥
Então não vale a pena avaliar o melhor ordem de multiplica¸cão, enfrentando
um n´umero exponencial de possibilidades? Não, existe uma solução com
programação dinâmica, baseada na mesma observa¸cão que levou `a nossa re-
corrência.
mini≤j<k mij + m(j +1)k + bi−1 bj bk caso i < k
mik =
0 caso i = kx
Multiplica¸c˜
ao de Cadeias de Matrizes
Algoritmo Multi-Mat-1
Retorna o n´umero mı́nimo de multiplicações necessárias para multiplicar a cadeia de matrizes
passada como parˆametro.
1 Podemos obter uma solu¸cão usando fun¸cões geratrizes. (Cn−1 )n≥1 são os n´umeros Ca-
talan, que têm diversas aplicações na combinatórica.
110
5.4 Multiplicaç˜
ao de Cadeias de Matrizes
Considera¸c˜
oes para a An´
alise
An´
alise de Complexidade do Algoritmo
− −
n 1n u
j 1 − − −
n 1n u
Cp = (1 + 4) = (1 + 4u)
u=1 i=1 k i − u=1 i=1
n 1 n 1
= − (n
− u)˙(1 + 4u) = − n + 4nu − u − 4u2 = O(n3 )
u=1 u=1
An´
alise de Complexidade do Algoritmo
111
5 Programaç˜
ao dinâmica
Cp [Inicialização] = O(n)
Cp [Iteração] = O(n3 )
Cp [Finalização] = O(1)
Cp [Algoritmo] = O(n) + O(n3 ) + O(1) = O(n3 )
Algoritmo Multi-Mat-2
Retorna o número m´ınimo de multiplicações e a parentiza¸cão respectiva para multiplicar a cadeia
de matrizes passada como parˆametro.
Sa´
ıda Número mı́nimo de multiplicações.
1 f o r i :=1 to n do mi,j := 0 { ini cial iza di ag ona l pri nc ipa l }
2 f o r d := 1 to n 1 do { para to da s diag onais superiore s }
−
3 f o r i := 1 to n u do { para cada posi¸cão na di ago na l }
−
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 + bi−1 bk bj
8 i f c < mi,j then
9 mi,j := c
10 Pi,j = k
11 end for
12 end for
13 end for
14 return m1,n , p
Algoritmo Print-Parentiza¸c˜
ao
112
5.5 T´opicos
3 else
4 p r i n t ”( ”
5 −
P r i n t Parentiza¸ c ã o ( P,i,P i,j )
6 −
P r i n t Parentiza¸ c ã o ( P, Pi,j + 1, j )
7 p r i n t ”) ”
8 end i f
5.5 T´opicos
5.5.1 Algoritmo de Floyd-Warshall
O algoritmo de Floyd-Warshall calcula o caminho mı́nimo entre todos os pares
de vértices de um grafo.
Algoritmo de Floyd-Warshall
• Conteúdo
a
disponı́vel na seção 25.2 do Cormen, e Exemplo 5.2.4 (Laira&Veloso,
2 edição).
Subestrutura ´otima
Subcaminhos de caminhos mais curtos s˜ao caminhos mais curtos.
Algoritmo de Floyd-Warshall
113
5 Programaç˜
ao dinâmica
Excurso 5.1
Podemos substituir as opera¸cões sobre ( R, min, +) no algoritmo de Floyd-
Warshall por outras opera¸cões, 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 máximo k hops entre todos pares de vértices, e portanto D n é a matriz
calculada pelo algoritmo de Floyd-Warshall. (Observe que a matriz Dk no
algoritmo do Floyd-Warshall não é D elevado a k.)
Portanto, podemos aplicar n vezes uma multiplica¸cão de matrizes para ob-
ter Dn em O(n n3 ). Como Di = D n para i
× ≥
n, podemos calcular
n log2 n
D = D mais rápido quadrando D log2 n vezes (ver os
de potênciação),
uma abordagem que possui complexidade O(n3 log algoritmos
n).
É uma observação importante que o algoritmo de Strassen (e algoritmos mais
avançados como o algoritmo de Coppersmith-Winograd) s´o funcionam sobre
aneis, porque eles precisam um inverso para a adi¸ cão. Um algoritmo sub-
cúbico para a multiplica¸cão de matrizes em semi-aneis implicaria em um al-
goritmo sub-cúbico para o problema do caminho mı́nimo entre todos pares de
114
5.5 T´opicos
vértices e problemas similares. Para mais informações ver por exemplo Chan
(2007); Williams and Williams (2010).
Outra observação é que o algoritmo de Floyd-Warshall somento calcula as
distâncias entre todos pares de vértices. Para determinar os caminhos mais
curtos, veja por exemplo ( Alon et al., 1992). ♦
Exemplo
115
5 Programaç˜
ao dinâmica
´
5.5.3 Arvore de busca bin´
aria otima
´
Motiva¸c˜
ao para o Problema
• Caso a busca é repetida muitas vezes, vela a pena construir uma estru-
tura de dados que minimiza o tempo médio para encontrar uma chave.
Exemplo 5.1
Considere a sequência ordenada a < b < c < d e as probabilidades
116
5.5 T´opicos
Exemplo
Elemento a b c d
Pr 0.2 0.1 0.6 0.1
qual seria uma árvore ótima? Alguns exemplos
´
Arvore correspondente
'!&"#%$
a aa '!&"#%$
b` d (/).*+-,
'!&b"#%$`` ÑÑ `
'!&a"#%$ '!&c"#%$aa ÓÓ
'!&"#%$
Ñ b aa
'!&c"#%$aa(/).d*+-, (/).d*+-, '!&"#%$ '!&"#%$
aÑ c
´
Arvor e de Busca Bin´ ´
aria Otima
Em geral, temos que considerar n˜ao somente as probabilidades que procure-se
uma dada chave, mas também as probabilidades que uma chave procurada
não pertence à árvore. Logo supomos que temos
1. uma sequência ordenada a1 < a2 < ··· < an de n chaves e
2. probabilidades
Pr[c < a1 ], Pr[c = a1 ], Pr[a1 < c < a 2 ],...
..., Pr[an−1 < c < a n ], Pr[c = an ], Pr[an < c]
117
5 Programaç˜
ao dinâmica
cM =
Pr[c = ai ]prof(ai ) +
Pr[ai < c < a i+1 ](prof(]ai , ai+1 [) − 1);
≤≤
1 i n ≤≤
0 i n
ser
Para ´arvores otimas
´
expressar essapelas sub-sequências
observação correspondentes.
numa equação, vamos denotar com cM (e, d) a
complexidade média de uma busca numa sub-árvore ótima para os elementos
ae ,...,a d . Para a complexidade da árvore inteira, definido acima, temos cM =
cM (1, n). Da mesmo forma, obtemos
cM (e, d) =
Pr[c = ai ]prof(ai )+
Pr[ai < c < a i+1 ](prof(]ai , ai+1 [) 1)−
≤≤
e i d − ≤≤
e 1 i d
cM (e, d) = Pr[ c = ar ]
+
Pr[c = ai ]prof(ai ) +
Pr[ai < c < a i+1 ](prof(]ai , ai+1 [) − 1)
≤
e i<r −≤
e 1 i<r
+
Pr[c = ai ]prof(ai ) +
Pr[ai < c < a i+1 ](prof(]ai , ai+1 [) − 1)
≤
r<i d ≤≤
r i d
=
Pr[ai < c < a i+1 ] +
Pr[c = ai ]
− ≤≤
e 1 i d ≤≤
e i d
−
+ cM (e, r 1) + cM (r + 1, d)
= Pr[ae−1 < c < a d+1 ] + cM (e, r − 1) + cM (r + 1, d)
118
5.5 T´opicos
´
Arvore de Busca Bin´ ´
aria Otima
(O pen´ultimo passo é justificado porque, passando para uma sub-árvore a
profundidade e um a menos.) Essa equa¸cão define uma recorrência para a
complexidade média ótima: Escolhe sempre a raiz que minimiza essa soma.
Como base temos complexidade cM (e, d) = 0 se d > e:
cM (e, d) =
mine≤r≤d Pr[ae−1 < c < a d+1 ] + cM (e, r − 1) + cM (r + 1, d) caso e ≤d
0 caso e>d
(5.1)
´
Arvor e de Busca Bin´ ´
aria Otima
Ao invés de calcular o valor cM recursivamente, vamos usar a programa¸cão
(tabelação) dinâmica com três tabelas:
• cij : complexidade média da árvore ótima para as chaves ai até aj , para
1 ≤ i ≤ n e i − 1 ≤ j ≤ n.
• rij : raiz da ´arvore ótima para as chaves ai até aj , para 1 ≤ i ≤ j ≤ n.
• pij : Pr[ ai−1 < c < a j+1]
´
Arvore de Busca Bin´ ´
aria Otima
Sa´
ıda Vetores c e r como descrita acima.
1 f o r i := 1 to n+1 do
2 pi(i−1) := qi−1
3 ci(i−1) := 0
4 end for
5
6 f o r d := 0 to n 1 do { para tod as diagonais }
7 f o r i :=1 to n d do { da cha ve i }
−−
8 j := d + i { até chave j }
9 pij := pi(j −1) + pj + qj
10 ∞
cij :=
11 f o r r := i t o j do
12 c := pij + ci(r−1) + c(r+1)j
13 i f c < cij then
14 cij := c
119
5 Programaç˜
ao dinâmica
15 rij := r
16 end for
17 end for
18 end for
TBD: Illustrate the dependencies and the initial values for c and p. The
dependencies are like in the matrix multiplication case. Show the diagonal
axis etc.
Also, we need an example to illustrate the algorithm.
−∞ − ∞ ] , a[ a ]a, b[ b ]b, c[ c ]c, d[ d ]d, [ ∞ ∞
0.04 0.2 0.04 0.1 0.04 0.4 0.04 0.1 0.04
a0 a1 a2 a3 a4 a5
i/j 1 2 3 ··· n
1
2
·
·
n
5.6 Exerc´ıcios
Exercı́cio 5.1
Da três exemplos de problemas que não possuem uma subestrutura ´otima,
i.e. a solu¸cão ótima de um problema n˜ao contém soluções ótimas de subpro-
blemas.
120
6 Divis˜
ao e conquista
6.1 Introdu¸c˜
ao
M´
eto do de Divis˜
ao e Conquista
Recorrˆ
encias
Divis˜
ao e conquista
121
6 Divis˜
ao e conquista
Recurs˜
ao natural
Recurs˜
ao natural: caso balanceado
Mergesort
Sa´
ıda A com elementos em ordem n˜ao-decrescente, i.e. para i < j temos
≤
Ai Aj .
1 i f p < r then
2
q = (p + r)/2
3 MergeSort( A,p,q );
4 MergeSort( A,q+ 1,r );
5 Merge( A,p,q, r)
6 end i f
Recorrˆ
encias simplificadas
Formalmente, a equação de recorrência do Mergesort é
Θ(1) se n=1
T (n) =
T ( n2 ) + T ( n
2
) + Θ(n) se n > 1
122
6.2 Resolver recorrências
Em vez de
Recorrˆ
encias: caso do Mergesort
A equação de recorrência do Mergesort é
Sendo que:
• Método da substituição
• Método de árvore de recurs˜ao
• Método mestre
123
6 Divis˜
ao e conquista
6.2.1 M´
eto do da substitui¸c˜
ao
M´
eto do da substituic¸˜
ao
• O método da substituição envolve duas etapas:
1. pressupõe-se um limite hipotético.
2. usa-se indução matemática para provar que a suposi¸ cão está cor-
reta.
Aplica-se este método em casos que é f´
acil pressupor a forma de resposta.
•• Pode ser usado para estabelecer limites superiores ou inferiores.
T (n) = 2T
n
2
+n
tem limite superior igual a n log n, ou seja, T (n) = O(n log n). Devemos
≤
provar que T (n) cn log n para uma escolha apropriada da constante c > 0.
n n
T (n) 2 c log( + n)
≤≤ cn log2n/2 + n2= cn log n − cn + n
≤ cn log n
≥
para c 1.
A expressão na equa¸cão
· −·
c n log n c n + n
residuo
se chama res´
ıduo. O objetivo na prova é mostrar, que o resı́duo é negativo.
124
6.2 Resolver recorrências
Exemplo 6.1
Vamos procurar o m´aximo de uma sequência por divisão é conquista:
T (n) = T ( n/2 ) + T ( n/2 ) + 1
Substitui¸c˜
ao direta
125
6 Divis˜
ao e conquista
Exemplo 6.2
Na aula sobre a complexidade média do algoritmo Quicksort (veja página 59),
encontramos uma recorrência da forma
T (n) = n + T (n − 1)
cuja solução é i = n(n 1)/2. ♦
≤≤
1 i n −
Substitui¸c˜
ao direta
• Da mesma forma podemos resolver recorrências como
f (1) caso n = 1
T (n) =
T (n/2) + f (n) caso contrário
• substituindo
T (n) = f (n) + T (n/2) = f (n) + f (n/2) + T (n/4)
= ··· = f (n/2i )
≤≤
0 i log2 n
Exemplo 6.3
Ainda na aula sobre a complexidade média do algoritmo Quicksort (veja
página 59), encontramos outra recorrência da forma
T (n) = n + 2T (n/2).
126
6.2 Resolver recorrências
Para colocá-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)
cuja solu¸cão é ≤≤
0 i log2 n 1 = log 2 n. Portanto temos a solu¸cão T (n) =
f (n) = 2f (n/2)
log n
f (n) = c1 f (n/c2 ) = ··· = c1 = nlog c
c2 c2 1
f (n)
A(n) = A(n/c2 ) + log n
c1 c2
127
6 Divis˜
ao e conquista
cn (3/2)log2 n+1
= = 3c
3log2 n 1/2
e portanto
6.2.2 M´ eto do da ´
arvore de recurs˜ao
O m´ eto do da ´
arvore de recurs˜ao
Uma árvore de recursão apresenta uma forma bem intuitiva para a an´alise de
complexidade de algoritmos recursivos.
• Numa árvore de recursão cada n´o representa o custo de um ´unico sub-
problema da respectiva chamada recursiva
128
6.2 Resolver recorrências
Exemplo
Dada a recorrência T (n) = 3T ( n/4 ) + Θ(n2 )
• Em que log
nı́vel
n
da árvore o tamanho do problema é 1? No nı́vel i =
log4 n = 2
2 .
Exemplo
nı́vel n´ os
2
0 k Θ(n ) 30
ukkk
k )
1 Θ((n/4)2 ) Θ((n/4)2 ) Θ(( n/4)2 ) 31
ukkk )
2 Θ((n/4 ) ) Θ(( n/4 ) ) Θ(( n/42 )2 )
2 2 2 2
32
···
h = log4 n
··· Θ((n/4h )2 ) ··· 3h
129
6 Divis˜
ao e conquista
T (n) =
(3/2)i n + Θ(3log2 n )
≤
0 i<log2 n
(3/2)log2 n 1
−
=n + Θ(3log2 n )
3/2 1
= 2(nlog2 3 − 1)− + Θ(nlog
2 3)
= Θ(nlog2 3 )
Resumindo o m´
eto do
2. Determina
o número de nı́veis
• o número de nós e o custo por nı́vel
• o número de folhas
3. Soma os custos dos nı́veis e o custo das folhas
130
6.2 Resolver recorrências
´
Arvore de recorrˆ
encia: ramos desiguais
Calcule a complexidade de um algoritmo com a seguinte equação de recorrência
6.2.3 M´
eto do Mestre
M´eto do Mestre
Para aplicar o método mestre deve ter a recorrência na seguinte forma:
T (n) = aT
n
+ f (n)
b
onde a ≥ 1, b > 1 e f (n) é uma função assintoticamente positiva. Se a
recorrência estiver no formato acima, então T (n) é limitada assintoticamente
como:
1. Se f (n) = O(nlogb a− ) para algum > 0, então T (n) = Θ( nlogb a )
2. Se f (n) = Θ(nlogb a ), então T (n) = Θ( nlogb a log n)
logb a+
3. Se
c <f1(n) = Ω(todo
e para n n suficientemente
) para algum grande,
> 0, eentão
se afT(n/b) cf(n))
(n) = Θ(f (n) para
≤
Considera¸c˜
oes
• Nos casos 1 e 3f (n) deve ser polinomialmente menor, resp. maior que
n b , ou seja, f (n) difere assintoticamente por um fator n para um
log a
> 0.
• Os três casos não abrangem todas as possibilidades
Proposta de exercı́cios: 6.1 e 6.2.
Algoritmo Potencia¸c˜
ao
131
6 Divis˜
ao e conquista
ıda A potência an .
Sa´
1 if n = 0
2 return 1
3 else
4 return PT(a, n − 1) × a
5 end i f
Complexidade da potencia¸c˜
ao
Θ(1) se n = 0
T (n) =
−
T (n 1) + 1 se n > 0
A complexidade dessa recorrência é linear, ou seja, T (n) ∈ O(n)
ao para n = 2i
Algoritmo Potencia¸c˜
Complexidade da potencia¸c˜
ao-Npotˆ
encia2
Θ(1) se n = 0
T (n) = n
T ( 2 ) + c se n > 0
132
6.2 Resolver recorrências
Busca Bin´
aria
Complexidade da Busca-Bin´
aria
Θ(1) se n = 1
T (n) = n
T ( 2 ) + c se n > 1
A complexidade dessa recorrência é logarı́tmica, ou seja, T (n) ∈ O(log n)
Quicksort
133
6 Divis˜
ao e conquista
3 −
Q u i c k s o r t( l , m 1 , a ) ;
4 Q u i c k s o r t( m + 1 , r , a ) ;
5 end i f
T (n) =
Θ(1) se n = 1
T (n 1) + Θ(n) se n > 1
−
A complexidade dessa recorrência é quadrática, ou seja, T (n) ∈ O(n2)
Complexidade do Quicksort no melhor caso
Θ(1) se n = 1
T (n) =
2˙T ( 2 ) + Θ(n) se n > 1
n
∈
A complexidade dessa recorrência é T (n) O(n log n)
Agora, vamos estudar dois exemplos, em que o método mestre não se aplica.
T (n) =
(n log n − in) + Θ(n) = Θ(n log2 n)
≤
0 i<log2 n
134
6.2 Resolver recorrências
T (n) =
(n/(log n − i)) + Θ(n)
≤
0 i<log2 n
−
logb (n 1)
g(n) = aj f (n/bj )
·
j =0
135
6 Divis˜
ao e conquista
3. Se a·f (n/b) ≤ c·f (n) para c < 1 e para todo n ≥ b, então g(n) = Θ(f (n))
Prova do M´
eto do Mestre
logb a+ +
3. Se
para c <=1Ω(n
f (n) e para todo) para
n suficientemente R , e se
algum > 0 grande, ∈ a fT(n/b)
então c f(n))
·
(n) = Θ(f (n) ≤ ·
6.2.4 Um novo m´
eto do Mestre
O método Master se aplica somente no caso que a ´arvore de recurs˜ao está
balanceado. O método de Akra-Bazzi (Akra and Bazzi , 1998) é uma genera-
lização do método Master, que serve também em casos não balanceados1 . O
que segue é uma versão generalizada de Leighton (1996).
T (x) = Θ(1)
se x≤x 0
≤ ≤ ai T (bi x + hi (x)) + g(x) caso contrário
1 i k
136
6.2 Resolver recorrências
T (x) ∈Θ
xp 1 +
x
g(u)
du
1 up+1
com p tal que
p
1 i k a i bi
≤≤ = 1.
Observação 6.1
As funções hi (x) servem particularmente para aplicar o teorema para com
pisos e tetos. Com
hi (x) = bi x bi x −
∈
(que satisfaz a condi¸cão de h, porque hi (x) O(1)) obtemos a recorrência
Θ(1) se x x0 ≤
T (x) = a
1≤i≤k i T ( b i x )
+ g(x) caso contrário
demonstrando que obtemos a mesmo solu¸cão aplicando tetos.
Exemplo 6.8
Considere a recorrência
T (n) = T (n/5) + T (7n/10 + 6) + O(n)
(que ocorre no algoritmo da sele¸ cão do k-ésimo elemento). Primeiro temos
que achar um p tal que (1/5)p + (7/10)p = 1 que é o caso para p 0.84. Com
isso, teorema ( 6.1) afirma que ≈
T (n) ∈ Θ(np + (1 +
n
c1 u/up+1 du)) = Θ(np (1 + c1
n
u−p du))
1 1
p c1 − ))
1 p
= Θ(n (1 +
1 − pn
c1
= Θ(np +
1 − p n) = Θ(n)
♦
Exemplo 6.9
Considere T (n) = 2T (n/2)+n log n do exemplo 6.6 (que não pode ser resolvido
pelo teorema Master). 2(1 /2)p = 1 define p = 1 e temos
T (n) ∈ Θ(n + (1 +
n
log u/udu )) = Θ(n(1 + [log 2 (u)/2]n1 )
1
= Θ(n(1 + log2 (n)/2))
= Θ(n log2 (n))
2 As condições exatas são definidas em Leighton (1996).
137
6 Divis˜
ao e conquista
Exemplo 6.10
Considere T (n) = 2T (n/2) + n/ log n do exemplo 6.7 (que não pode ser resol-
vido pelo teorema Master). Novamente p = 1 e temos
T (n) ∈ Θ(n + (1 +
n
1/(u log u) du)) = Θ(n(1 + [log log u]n1 )
1
6.3 T´opicos
O algoritmo de Strassen
No capı́tulo 2.2.2 analisamos um algoritmo para multiplicar matrizes qua-
dradas de tamanho (n´umero de linhas e colunas) n com complexidade de
O(n3 ) multiplicações. Mencionamos que existem algoritmos mais eficientes.
A
A idéia
× B= doCalgoritmo
em quatrodesub-matrizes
Strassen (1969)
comé:a subdivide
metade doostamanho
matrizes(e,
num produto
portanto,
um quarto de elementos):
A11 A12
× B11 B12
=
C11 C12
.
A21 A22 B21 B22 C21 C22
138
6.4 Exercı́cios
6.4 Exerc´ıcios
(Soluções a partir da p´agina 242.)
Exercı́cio 6.1
Resolva os seguintes recorrências
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
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
139
6 Divis˜
ao e conquista
Exercı́cio 6.2
Aplique o teorema mestre nas seguintes recorrências:
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
Exercı́cio 6.3
Descreva o funcionamento dos problemas abaixo, extraia as recorrências dos
algoritmos, analise a complexidade pelos três métodos vistos em aula.
Exercı́cio 6.4
A recorrência na análise do algoritmo de Strassen leva em conta somente
multiplicações. Determina e resolve a recorrência das multiplicações e adições.
140
7 Backtracking
Motiva¸c˜
ao
´
Backtracking: Arvore de busca
´
Backtracking: Arvore de busca
141
7 Backtracking
142
O problema das n-rainhas
143
7 Backtracking
Backtracking
144
Instˆ
ancia Um grafo G=(V,E) com pesos p (distâncias) atribuı́dos aos
links. V = [1, n] sem perda de generalidade.
ao Uma rota que visita todos vértices exatamente uma vez, i.e. uma
Solu¸c˜
permutação de [1 , n].
Objetivo Minimizar o custo da rota
≤
1 i<n p{i,i+1} + p{n,1} .
• Para cada chamada recursiva existem diversos vértices que podem ser
selecionados
145
7 Backtracking
• Fácil implementação
• Linguagens da área de programa¸cão lógica (prolog, ops5) trazem meca-
nismos embutidos para a implementação de backtracking
Desvantagens
Caracterı́stica Marcante
146
Problema de Enumera¸c˜
ao de conjuntos
Enumeração de conjuntos
Instˆ
ancia Um conjunto de n itens S=a1 , a2 , a3 , ...an .
ao Enumeração de todos os subconjuntos de S.
Solu¸c˜
• A enumeração
n
de todos os conjuntos gera uma solução de custo expo-
nencial 2 .
Problema da Mochila
Problema da Mochila
ancia Um conjunto de n itens a1 , a2 , ...an e valores de importˆancia
Instˆ
vi e peso wi referentes a cada elemento i do conjunto; um valor K
referente ao limite de peso da mochila.
ao Quais elementos selecionar de forma a maximizar o valor total
Solu¸c˜
de “importância” dos objetos da mochila e satisfazendo o limite de
peso da mochila?
Problema de colora¸c˜
ao em grafos
147
7 Backtracking
Solu¸c˜
ao Uma coloração do grafo, i.e. uma atribui¸cão c : V→C de cores
tal que vértices vizinhos não têm a mesma cor: c(u) = c(v) para
∈
(u, v) E .
Objetivo Minimizar o número de cores C . | |
Colora¸
c˜
ao de Grafos
• A coloração de mapas é uma abstração do problema de colorir vértices.
• 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 intersecção entre arestas.
• Algoritmo O(nn), supondo o caso em que cada ´ area necessite uma cor
diferente
• Teorema de Kuratowski: um grafo é planar se e somente se não possuir
minor K5 ou K3,3 .
148
• Teorema das Quatro Cores: Todo grafo pla nar pode ser colorido com
até quatro cores (1976, Kenneth Appel e Wolfgang Haken, University of
Illinois)
b
f
a
c
e
a a
c c
e e
d d
(Precisamos de 4 cores!)
Backtracking
149
7 Backtracking
Sa´
ıda Uma coloração c : V → [1, 4] do grafo.
Objetivo Minimiza o número de cores utilizadas.
Para um vértice v ∈ V , vamos definir o conjunto de cores adjacentes
{
C (v) := c(u) | {u, v} ∈ A}.
1 return bt − coloring(1, 1)
2
3 bo ol ea n b t coloring(v, cv ) :=
−
4 if v > n
5 return true
6
7 ∈
i f c C (v) then { v c o l o rı́ v e l com cv ? }
8 c(v) := cv
9 ∈
fo r cu [1, 4] do
10 −
i f bt coloring(v + 1, cu )
11 return true
12 end for
13 else
14 return false
15 end i f
16 end
c
a
d
b e
150
c c
a a
d d
b e b e
Precisamos
de 3 cores!
Colora¸
c˜
ao de Grafos
Mas talvez sejam necess´arias menos que 4 cores para colorir um grafo!
•• Decidir se para colorir um grafo planar s˜ ao necessárias 3 ou 4 cores é
um problema NP-completo.
a
d
e
c
Roteamento de Ve´ıculos
Roteamento de Ve ı́culos
151
7 Backtracking
Instˆ
ancia Um grafo G=(V,A), um dep´osito v0 , frota de veı́culos com ca-
pacidade Q (finita ou infinita), demanda qi > 0 de cada n´o (q0 = 0,
distância di > 0 associada a cada aresta
Solu¸c˜
ao Rotas dos veı́culos.
Objetivo Minimizar a distância total.
Roteamento de Ve´ıculos
• Mais de um depósito
• veı́culos com capacidades diferentes
• Entrega com janela de tempo (perı́odo em que a entrega pode ser reali-
zada
• ...
Backtracking versus Branch & Bound
152
n
– Exemplo do Problema da Mochila: enumerar os 2 subconjuntos e
retornar aquele com melhor resultado.
• Branch&Bound: usa a estratégia de backtracking
– usa limitantes inferior (relaxações) e superior (heurı́sticas e propri-
edades) para efetuar cortes
– explora a árvore da forma que convier
– aplicado apenas a problemas de otimiza¸cão.
M´
eto dos Exatos
• Algoritmos
S = αS ∗ .
de aproxima¸cão: algoritmos com garantia de aproximação
153
8 Algoritmos de aproxima¸c˜
ao
8.1 Introdu¸c˜
ao
Vertex cover
Considere
O que fazer?
2
6
4
3 5
23 7
10
20 21
9
22
25 8
19
14
18 24 15
12
17
16 13 11
155
8 Algoritmos de aproximaç˜
ao
Simplificando o problema
• Vértice de grau 1: Usa o vizinho.
• Vértice de grau 2 num triângulo: Usa os dois vizinhos.
Arvore
´ de busca
156
8.1 Introduç˜
ao
Sa´
ıda Cobertura por vértices S ⊆V m´
ınima.
1 min Vert exC over(G ):=
2 ∅
i f E = return ∅
3 escolhe u, v{ }∈
E
4 C1 := minVertexCover(G − u) ∪ {u}
5 C2 := minVertexCover(G − v) ∪ {v}
6 | | | |
i f ( C1 < C2 ) then
87 return C1
else
9 return C2
10 end i f
Solu¸c˜
ao otima?
´
2
6
4
3 5
23 7
10
20 21
9
22
25 8
19
14
18 24 15
12
17
16 13 11
Problemas de otimiza¸c˜
ao
Definição 8.1
Um problema de otimizaç˜ao é uma relação binária P ⊆ I × S com instâncias
∈ ∈
x I e soluções y S , tal que ( x, y) ∈P e com
157
8 Algoritmos de aproximaç˜
ao
Tipo de problemas
Conven¸c˜
ao
Escrevemos um problema de otimização na forma
Nome
ancia x
Instˆ
Solu¸c˜
ao y
Classes de complexidade
P
Lembrança (veja definição 11.1): é polinomialmente limitada, se para soluções
(x, y)∈P temos y | |≤ | |
p( x ), para um polinˆomio p.
158
8.1 Introduç˜
ao
Motiva¸c˜
ao
• Contra-exemplo: Knapsack.
4-colorability in O(n2 ); decision 3 or 4 colors in NP-complete.
Fürer and Raghavachari (1994) show how to get MSTs or Steiner trees whose
minimal (maximum) degree is within one of the optimal. Singh and Lau (2007)
extend this result for weighted case of MSTs. They show that it is possible to
get a MST whose weight is at most the weight of an optimal MST of degree
less than k, and whose maximum degree is at most k + 1.
O que ´
e “quase”? Aproxima¸
c˜
ao relativa
159
8 Algoritmos de aproximaç˜
ao
Aproxima¸
c˜
ao relativa: Taxa de aproxima¸
c˜
ao
• Definição alternativa
• Taxa de aproximação R(x, y) = 1/(1 − E (x, y)) ≥ 1.
• Com taxa r, o algoritmo é r-aproximativo.
• (Não tem perigo de confus˜ao com o erro relativo, porque r ∈ [1, ∞].)
Nossa definição segue Ausiello et al. (1999). Ela tem a vantagem, de ser
não-ambı́gua entre o erro relativo e o erro absoluto. Um algoritmo de mini-
mização que garante no m´aximo um fator 3 da solu¸ cão ótima ou um algo-
ritmo de maximiza¸cão que garante no mı́nimo um terço da solu¸cão ótima é
2/3-aproximativo ou 3-aproximativo. A definição tem a desvantagem que ela é
pouco intuitivo: seria mais claro, chamar o primeiro algoritmo 3-aproximativo,
e o segundo 1 /3-aproximativo, usando simplesmente a taxa de aproxima¸ cão
r = ϕ(x, y)/OPT (x). Hromkovič (2001) usa ...
Aproxima¸
c˜
ao relativa: Exemplos
Aproxima¸
c˜
ao relativa
Maximização Minimização
160
8.1 Introduç˜
ao
Proposição 8.1
| |
O algoritmo VC-GV é uma O(log V )-aproximação.
Prova. Seja Gi o grafo depois da itera¸cão i e C ∗ uma cobertura ótima, i.e.,
C ∗ = OPT(G).
| |
A cobertura ´otima C ∗ é uma cobertura para Gi também. Logo, a soma dos
graus dos vértices em C ∗ (contando somente arestas em Gi !) ultrapassa o
número de arestas em Gi
δGi (v) ≥ Gi
v C∗
∈
e o grau médio dos vértices em Gi satisfaz
δ̄Gi (Gi ) =
v C∗
∈ δGi (v)
≥ |CG∗i| = OPT(G)
Gi .
|C ∗ |
Como o grau m´aximo é maior que o grau médio temos também
∆(Gi )
Gi .
≥ OPT(G)
Com isso podemos estimar
∆(Gi ) ≥
Gi ≥ GOPT
≤
0 i<OPT 0≤i<OPT
|OPT(G)| 0≤i<OPT |OPT(G)|
= GOPT = G − ∆(Gi )
≤
0 i<OPT
161
8 Algoritmos de aproximaç˜
ao
ou ∆(Gi ) ≥ G/2
≤
0 i<OPT
i.e. a metade das arestas foi removido em OPT itera¸ cões. Essa estimativa
continua a ser v´alido, logo depois
iterações não tem mais arestas. Como em cada itera¸cão foi escolhido um
vértice, a taxa de aproximação é log G .
| |
Aproxima¸
c˜
ao: Motivac¸˜
ao
162
8.1 Introduç˜
ao
Proposição 8.2
Algoritmo VC-GE é uma 2-aproximação para VC.
Prova. Cada cobertura contém ao menos um dos dois vértices escolhidos, i.e.
T´
ecnicas de aproxima¸
c˜
ao
• Aproximações gulosas
• Randomização
• Busca local
• Programação linear
163
8 Algoritmos de aproximaç˜
ao
• Programação dinâmica
• Algoritmos seqüenciais (“online”), p.ex. para particionamento.
Exemplo 8.1
Sequenciamento em processores paralelos
Entrada m processadores, n tarefas com tempo de execução li , 1 ≤ i ≤ n.
ao Um sequenciamento S : [n]
Solu¸c˜ → [m], i.e., uma aloca¸cão das tarefas
às máquinas.
Objetivo Minimizar o
makespan (tempo terminal)
maxj ∈[m] i∈n|S (i)=j li .
164
8.2 Aproximaç˜
oes com randomiza¸c˜
ao
Proposição 8.4
−
LPT é uma 4/3 1/3p-aproximação.
Prova. Por análise de casos. TBD.
8.2 Aproxima¸c˜
oes com randomiza¸c˜
ao
Randomiza¸c˜
ao
• Idéia: Permite escolhas randômicas (“joga uma moeda”)
• Objetivo: Algoritmos que decidem correta com probabilidade alta.
• Objetivo: Aproximações com valor esperado garantido.
• Minimização: E [ϕA (x)] ≤ 2OPT(x)
• Maximização: 2 E [ϕA(x)] ≥ OPT(x)
Randomiza¸c˜
ao: Exemplo
Nossa solu¸c˜ ao
1 −
SAT R( ϕ ) :=
2 s e j a ϕ = ϕ(v1 ,...,v k )
3 ∈
f or all i [1, k] do
4 e s c o l h e vi = v com probabilidade 1 /2
5 end for
165
8 Algoritmos de aproximaç˜
ao
Aproxima¸
c˜
ao?
• Surpresa: Algoritmo é 2-aproximação.
Prova. Seja X a variável aleatória que denota o n´umero de cla´usulas satis-
feitas. Afirmação: E [X ] (1 2−l )n com l o número mı́nimo de literais por
≥ −
≥
claúsula. Portanto, com l 1, temos E [X ] n/2. ≥
Prova da afirmação: P [[[Ci ]] = f ] 2−l e logo P [[[Ci ]] = v] (1 2−l ) e
≤ ≥ −
E [X ] = E [[[Ci ]] = v] = P [[[Ci ]] = v] = (1 2−l )n.
≤≤
1 i k
≤≤
1 i k −
Outro exemplo
Cobertura por vértices guloso e randomizado.
−
1 VC RG(G ) :=
2 s e j a ¯w := v∈V deg(v)
3 C := ∅
4 ∅
while E = do
5 ∈
e s c o l h e v V com pro babi lida de deg( v)/w̄
6 C := C ∪{ } v
78 G :=
end G−v
while
9 return C ∪ V
Resultado: E [φVC-RG(x)] ≤ 2OPT(x).
8.3 Aproxima¸c˜
oes gulosas
Problema de mochila (Knapsack)
Knapsack
Instˆ ∈
ancia Itens X = [1, n] com valores vi N e tamanhos ti N , para ∈
i X , um limite M , tal que ti M (todo item cabe na mochila).
∈
ao Uma seleção S
Solu¸c˜ ⊆ X tal que ≤ i∈S ti ≤ M .
Objetivo Maximizar o valor total
∈ vi .
i S
166
8.3 Aproximaç˜
oes gulosas
Como aproximar?
Abordagem
−
1 K G( vi , ti ) :=
2 o r den e o s i t e ns t al que vi /ti vj /tj , i<j.
3 ∈
f or i X do ≥ ∀
4 i f ti < M then
5 S := S ∪{ }
i
6 M := M ti −
7 end i f
8 end for
9 return S
Aproxima¸
c˜
ao boa?
• Considere
v1 = 1,...,v − = 1, vn = M − 1
n 1
t1 = 1,...,t n−1 = 1, tn = M = kn k ∈ N arbitrário
• Então:
v1 /t1 = 1,...,v − = 1, vn /tn = (M − 1)/M < 1
n 1 /tn 1
−
• K-G acha uma solução com valor ϕ(x) = n − 1, mas o ótimo é OPT(x) =
M − 1.
• Taxa de aproximação:
M −1 kn − 1
OPT(x)/ϕ(x) =
n−1
=
n−1
≥ knn −−1k = k
• K-G não possui taxa de aproxima¸cão fixa!
• Problema: Não escolhemos o item com o maior valor.
167
8 Algoritmos de aproximaç˜
ao
Tentativa 2: Modifica¸c˜
ao
−
1 K G’ ( vi , ti ) :=
2
3 v1 :=
−
S1 := K G( vi , ti )
i∈S1 vi
4
5
{
S2 := argmaxi vi
v2 := i∈S2 vi
}
6 i f v1 > v2 then
7 return S1
8 else
9 return S2
10 end i f
Aproxima¸
c˜
ao b oa?
• O algoritmo melhorou?
• Surpresa
Proposição 8.5
K-G’ é uma 2-aproximação, i.e. OPT( x) < 2ϕK-G (x).
v¯j =
vi ≤ ϕK-G(x) (8.1)
≤
1 i<j
t¯j =
ti ≤M (8.2)
≤
1 i<j
1. Seja vj ≤ v¯j .
OPT(x) < v¯j + vj ≤ 2v¯j ≤ 2ϕK-G(x) ≤ 2ϕK-G
Prova da afirma¸cão: No mom ento em que item j não cabe, temos espa¸ co
M t¯j < tj sobrando. Como os itens são ordenados em ordem de densidade
−
168
8.3 Aproximaç˜
oes gulosas
Problemas de particionamento
Bin packing
Abordagem?
169
8 Algoritmos de aproximaç˜
ao
Aproxima¸
c˜
ao?
Aproxima¸
c˜
ao melhor?
171
8 Algoritmos de aproximaç˜
ao
• Taxa de aproximação?
ϕPiC (x) ≤ 1.7OPT(x)
ϕPiCD (x) ≤ 1.5OPT(x) + 1
Prova. (Da segunda taxa de aproximação.) Considere a parti¸cão A B C ∪ ∪ ∪
{ }
D = v1 ,...,v n com
A= {{vvii || v2/3
i > 2/3}
B= ≥ vi > 1/2}
C= {vi | 1/2 ≥ vi > 1/3}
D= {vi | 1/3 ≥ vi}
| |
PiCD primeiro vai abrir A containeres com os itens do tipo A e depois B | |
containeres com os itens do tipo B. Temos que analisar o que acontece com
os itens em C e D.
Supondo que um container contém somente itens do tipo D, os outros contai-
neres tem espa¸co livre menos que 1 /3, senão seria poss´ıvel distribuir os itens
do tipo D para outros containeres. Portanto, nesse caso
V
B ≤ ≤
2/3 3/2V + 1 ≤ 3/2OPT(x) + 1.
Caso contrário (nenhum container contém somente itens tipo D), PiCD en-
contra a solução ótima. Isso pode ser justificado pelos seguintes observa¸ cões:
\ | |
ϕPiCD (x D) = A + ϕPiCD (x (A \ ∪ D)).
3. O melhor caso para os restantes itens são pares de elementos em B e C :
Nesse situação, PiCD acha a solu¸cão ótima.
172
8.4 Esquemas de aproximaç˜
ao
Aproxima¸
c˜
ao melhor?
• Desvantagem: Pseudo-polinomial.
Denotamos uma instˆancia do problema do mochila com I = ({vi }, {ti }).
173
8 Algoritmos de aproximaç˜
ao
−
1 MM PTAS(I , r ) :=
2 vmax := max vi
{ }
3 t := log r−r 1 vmax
n
4 vi := vi /2t para i = 1,...,n
5 D e f i n e nova i ns tˆ ancia I = ( vi , ti ) { }{ }
6 return MM PD( I )
Teorema 8.1
MM-PTAS é uma r-aproximação em tempo O(rn3 /(r 1)).
Prova. A complexidade da prepara¸cão nas linhas 1–3 é O(n). A chamada −
para MM-PD custa
vi
O n vi = O n
−i
r
i
((r
2
1)/r)(tmax /n)
r 3
=O n vi /tmax =O
− r 1 i
r − 1n .
174
8.5 Exercı́cios
8.5 Exerc´ıcios
Exercı́cio 8.1
Um aluno propõe a seguinte heurı́stica para Binpacking: Ordene os itens em
ordem crescente, coloca o item com peso m´aximo junto com quantas itens de
peso mı́nimo que é possı́vel, e depois continua com o segundo maior item, até
todos itens foram colocados em bins. Temos o algoritmo
1 or de ne itens em ordem crescente
2 m := 1 ; M := n
3 while ( m < M ) do
4 abr e n ovo c on ta i ne r , co lo ca vM , M := M 1 −
5 while ( vm cabe e m < M ) do
6 c o l o c a vm no con tai ner atu al
7 m := m + 1
8 end while
9 end while
Qual a qualidade desse algoritmo? É um algoritmo de aproxima¸cão? Caso
sim, qual a taxa de aproxima¸cão dele? Caso n˜ao, por quê?
Exercı́cio 8.2
Prof. Rapidez propõe o seguinte pré-processamento para o algoritmo SAT-R de
aproximação para MAX-SAT (página 165): Caso a instˆancia contém claúsulas
com um único literal, vamos escolher uma delas, definir uma atribuição parcial
que satisfazê-la, e eliminar a variável correspondente. Repetindo esse procedi-
mento, obtemos uma instˆancia cujas claúsulas tem 2 ou mais literais. Assim,
175
8 Algoritmos de aproximaç˜
ao
≥
obtemos l 2 na análise do algoritmo, o podemos garantir que E [X ] ≥ 3n/4,
i.e. obtemos uma 4 /3-aproximação.
Este análise é correto ou não?
176
Parte III
Teoria de complexidade
177
9 Do algoritmo ao problema
9.1 Introdu¸c˜
ao
Motiva¸c˜
ao
179
9 Do algoritmo ao problema
Modelo de computa¸c˜
ao: M´
aquina de Turing
M´
aquina de Turing
180
9.1 Introduç˜
ao
Cabeça de leitura
e escritura
Fita infinita
...
M´
aquina de Turing (MT)
M = (Q, Σ, Γ, δ)
• Alfabeto de entrada Σ (sem branco )
• Conjunto de estados Q entre eles três 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 a D
M´
aquina de Turing: Opera¸
c˜
ao
• Inı́cio da computação:
– No
– comestado inicial
w qΣ∗com cabeça na posi¸cão
damais
fita, esquerda,
0
entrada ∈ escrita na esquerda resto da fita em
branco.
• Computação:
No estado q lendo um sı́mbolo a aplica uma regra qa →
q a D (um L na primeira posi¸cão não tem efeito) até
– não encontrar uma regra: a computa¸cão termina, ou
181
9 Do algoritmo ao problema
Tabela da transi¸c˜
ao
Seja Σ = 0, 1 . Uma m´aquina de Turing que reconhece a linguagem
{ } {wwR |
w Σ∗ é
∈ }
Nota¸c˜
ao gr´
afica
182
9.1 Introduç˜
ao
M´
aquinas n˜
ao-determin´ısticas
• Uma linguagem tal que existe um MTD M que reconhece ela é Turing-
ıvel por M .
reconhec´
L Turing-reconhecı́vel ⇐⇒ ∃M : L = L(M )
• Observe que uma MTD não precisa parar sempre. Se uma MTD sempre
para, ela decide a sua linguagem.
183
9 Do algoritmo ao problema
M´
aquina de Turing n˜
ao-determin´ıstica
• Resposta sim, se existe uma computa¸cão que responde sim.
Robustez da defini¸c˜
ao
• A definição de uma MTD é computacionalmente robusto: as seguintes
definições alternatives decidem as mesmas linguagens:
1. Uma MT com k > 1 fitas (cada uma com cabe¸ca própria),
2. uma MT com fita duplamente infinita,
3. uma MT com alfa beto restrito Σ = 0, 1 ,
{ }
4. uma MTND e
5. uma MT com fita de dua s ou mais dimens˜oes.
• O poder computacional também é equivalente com vários outros modelos
de computação (p.ex. cálculo lambda, máquina RAM, autômato celular):
Tese de Church-Turing.
184
9.1 Introduç˜
ao
Prova. (Rascunho.)
(i) Determina
as opera¸ os sı́mbolos
cões da abaixo
k cabeças. Casodas
umacabeças
cabeçaemultrapassa
um passo.a(ii) executa
direita da
representação, a MTD estende-la, copiando todos sı́mbolos da direita
mais uma para direita.
∈
2. Seja ai o sı́mbolo na posição i da fita, com i Z. A m´aquina com uma
xúnica fita meia-infinita representa essa fita por
a0 a−1 a1 a−2 a2 ....
4. A MTD simula uma MTN listando todas as execu¸ cões possı́veis siste-
maticamente.
5. Usando uma representação linear da fita, por exemplo linha por linha
no caso de duas dimens˜oes, similar com o caso 1, a m´ aquina pode ser
simulado calculando o novo ı́ndice da cabeça.
Observação 9.2
Uma modelo conveniente com k > 1 fitas é usar a primeira fita como fita de
−
entrada e permitir somente leitura; uma outra fita das k 1 restantes e usado
como fita da sa´ıda caso a MT calcula uma fun¸cão.
185
9 Do algoritmo ao problema
Proposição 9.1
Se uma MTD M = (Q, Σ, Γ, δ) com Σ = 0, 1 decide uma linguagem L em
{ }
tempo t(n), com t(n) tempo-construtı́vel, então existe uma MT com alfabeto
Γ = 0, 1, que decide L em tempo 4 log Γ t(n).
{ } ||
Prova. Para construir uma MT que trabalha com Γ vamos codificar cada
sı́mbolo em Γ por um string de log Γ bits. Em cada passo, a simulação lê
||
||
log Γ na posição atual, calcula o novo sı́mbolo e estado usanda as regras de M ,
|| ||
escreve os novos log Γ sı́mbolos, e movimenta a cabeção log Γ posições para
direita Q
estado oueesquerda. Para
no máximo logessa
|| simulação,
Γ sı́mbolos na acabeça,
nova máquina precisa um
e ainda precisa armazenar
contadoro
||
de 1 até log Γ . Isso é possı́vel com O(Q ×| | 2
Γ ) estados e em menos que
||
4log Γ t(n) passos (ler, escrever, movimentar e talvez alguns passos para o
controle).
Proposição 9.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-construtı́vel, então existe
uma MT com ´unica fita que decide L em tempo 5 kt(n)2 .
Prova. Vamos construir uma MT M que simula M com uma ´unica fita.
M armazeno o conteúdo das k fitas de M de forma intercalada nas posi¸cões
1 + ki, para 1 i k. Para representar as posi ções das cabe¸cas, usamos
sı́mbolos com uma marca ȧ. M não altera as primeiras n posições da sua
≤ ≤
fita que contém a entrada, mas copia-las para a posição n + 1 na codifica¸cão
acima.
Para simular um passo de M , M escaneia a fita de esquerda para direita para
determinar as posições das cabeças e os sı́mbolos correspondentes. Depois M
usa as regras de transi¸cão de M para determinar o novo sı́mbolo, estado, e o
movimento da cabe¸ca. Um segunda scan da direita para esque rda atualiza a
fita de acordo.
M produz as mesma s´aida que M . Como a mai or posição visitada por M é
t(n), a maior posi¸cão visitada por M é no m´ ≤
aximo kt(n) + 2n (k + 2)t(n) ≤
2kt(n). Portanto, para cada passo de M , M precisa no máximo 5kt(n) passos
(4kt(n) para escanear, e alguns para o controle).
186
9.1 Introduç˜
ao
Observação 9.3
Uma simulação de MTND é possı́vel com os mesmos limites.
Computabilidade e complexidade
187
9 Do algoritmo ao problema
A m´ aquina RAM
A m´ aquina RAM (random access machine) é o modelo padrão para an´alise
de algoritmos. Ela possui
A m´aquina RAM
Existem RAMs com diferentes tipos de instru¸cões aritméticas
Exemplos de simula¸c˜
ao
188
9.1 Introduç˜
ao
Robustez da complexidade
Tese estendida de Church-Turing
Qualquer modelo de computação universal é equivalente à máquina de Turing
com
custo adicional de tempo no m´aximo polinomial
•• custo adicional de espa¸co no máximo constante
• Equivalência definido por simulação mutual.
• Verdadeiro para quase todos modelos conhecidos:
Maquina de Turing, cálculo lambda, máquina RAM, máquina
pontador, circuitos lógicos, autômatos celulares (Conway), ava-
liação de templates em C++, computador billiard, ...
• Computador quântico?
Consequˆ
encia: Shor’s trilemma
Ou
• a tese estendida de Church-Turing é errada, ou
• a fı́sica quântica atual é errada, ou
• existe um algoritmo de fatora¸cão clássico rápido.
189
10 Classes de complexidade
10.1 Defini¸c˜
oes b´
asicas
Complexidade pessimista
• Recursos básicos: tempo e espaço.
• A complexidade de tempo (pessimista) é uma função
t:N→N
tal que t(n) é o n´
umero máximo de passos para entradas de tamanho n.
• A complexidade de espaço (pessimista) é uma função
s:N→N
tal que s(n) é o número máximo de posi¸cões usadas para entradas de
tamanho n.
Fun¸
c˜
oes construt´ıveis
• No que segue, consideraremos somente funções t e s que são tempo-
construtı́veis e espaço-construt´
ıveis.
Definição 10.1
Uma função t(n) é tempo-construtı́vel caso existe uma MTD com com-
plexidade de tempo t(n) que precisa t(n) passos para alguma entrada
de tamanho n. Uma fun¸cão s(n) é espaço-construtı́vel caso existe uma
MTD com complexidade de espa¸co s(n) que precisa s(n) posições para
alguma entrada de tamanho n.
191
10 Classes de complexidade
Observação 10.1
A restrição para fun¸cões tempo- ou espa¸co-construtı́veis exclui funções não-
computáveis ou difı́ceis de computar e assim permite uma simulação eficiente
por outras MT. Existem funções que não são espaço-construtı́veis; um exemplo
simples é uma função que não é computável; um outro exemplo é log log n .
Classes de complexidade fundamentais
Our definition uses accepts, but the time complexities require all computati-
ons to terminate after t(n) steps, such that for every machine an equivalent
decider exists. This is the same defin iton that Hopcroft (12.1) and Sipse r
use (TBD: Check some of our proofs below that the simulations always termi-
nate.). Atallah (1999) has two different definitions in the same book, and does
not comment on this. See also the comment above that for space complexity,
≥
in most cases ( s(n) log n) the definition also is equivalent for deciders.
Sipser: NDTM accepts a word, if some computation accepts it (p.150). NDTM
is a decider, if all computations halt. For time complexity: Time is defined
for deciders. DTM time is the longest time for any word of a given input size,
NDTM time is the time of the longest computation, for any word of a given
input size.
Arora/Barak use “decide” in time cT (n), i.e., they anticipate the speedup
theorem.
Hierarquia b´
asica
192
10.2 Hierarquias básicas
• Observação
DTIME[F (n)] ⊆ NTIME[F (n)] ⊆ DSPACE[F (n)] ⊆ NSPACE[F (n)]
• Definições conhecidas:
P=
DTIME[nk ]; NP =
NTIME[nk ]
≥
k 0 ≥
k 0
Classes de complexidade
Zoológico de complexidade
• Classes com espa¸co logarı́tmico: Interessante no contexto de memôria
secundária.
10.2 Hierarquias b´
asicas
Acelera¸c˜
ao
193
10 Classes de complexidade
Teorema 10.1
Podemos comprimir ou acelerar computa¸cões por um fator constante. Para
todos c > 0 no caso de espa¸co temos
L ∈ DSPACE[s(n)] ⇒ L ∈ DSPACE[cs(n)]
L ∈ NSPACE[s(n)] ⇒ L ∈ NSPACE[cs(n)]
e no caso do tempo, para m´aquinas de Turing com k > 1 fitas e t(n) = ω(n)
L DTIME[s(n)] L DTIME[cs(n)]
L ∈ NTIME[s(n)] ⇒ ∈ NTIME[cs(n)]
L
n + n/m + 8t(n)/m ≤ n + n/m + 8t(n)/m + 2 ≤ 3n + 8t(n)/n
que para cm ≥ 16 ⇔ 8/m ≤ c/2 e n suficientemente grande não ultrapassa
ct(n). O n´umero finito de palavras que n˜ao satisfazem esse limite superior é
reconhecido diretamente no controle finito.
Teorema 10.2
Para t(n) e s(n) total recursivo, existe um linguagem L tal que L ∈ DTIME[t(n)]
∈
ou L DSPACE[s(n)], respectivamente.
194
10.2 Hierarquias básicas
{ | | |}
L = xi Mi naõ aceita xi em tempo t( xi ) .
Essa linguagem é decidı́vel: Uma MT primeira computa t(n) (que é poss´ıvel
porque t(n) é recursivo e total.). Depois com entrada xi , ela determina i e a
máquina Mi correspondente e simula Mi para t(n) passos. Se Mi aceita, ela
DTIME(f ) DTIME(g).
Prova. (Rascunho.) Para provar o segundo parte (que é mais fácil) temos
que mostrar que existe uma linguagem L Σ∗ tal que L DSPACE[g] mas
⊆ ∈
L DSPACE[f ]. Vamos construir uma MT M sobre alfabeto de entrada Σ =
∈
{ }
0, 1 cuja linguagem tem essa caracterı́stica. A idéia básica é diagonalização:
com entrada w simula a m´aquina Mw com entrada w e garante de nunca
reconhecer a mesma linguagem que Mw caso ela é limitada por f .
Considerações:
1. Temos que garantir que M precisa não mais que g(n) espaço. Portanto,
M começa de marcar g( w ) espaço no começo (isso é possı́vel porque g
| |
é espaço-construtı́vel). Caso a simulação ultrapassa o espa¸co marcado,
M rejeita.
2. Nos temos que garantir que M pode simular todas m´aquinas que tem
limite de espa¸co f (n). Isso tem duas problemas (a) M tem um alfabeto
de fita fixo, mas a m´ aquina simulada pode ter mais sı́mbolos de fita.
195
10 Classes de complexidade
Espa¸co polinomial
Teorema 10.4 (Savitch)
≥
Para cada função S (n) log2 n (espaço-construtı́vel)
196
10.3 Exercı́cios
e divisão e conquista: Para ver, se tem uma tran si¸cão A⇒ B com menos de
2i passos, tenta se tem um caminho A ⇒ IeI⇒ B, cada um com 2 i−1 passos
para todas configura¸cões I com menos que S (n) lugares. A altura do ´arvore
de procura é O(S (n)) e o espa¸co da cada nı́vel também eO(S (n)), resultando
em O(S (n)2 ) para tudo.
A fun¸cão tem que ter S (n) ≥ log2 n, por que para a simula¸ cão precisamos
também gravar a posição de cabe¸ca de entrada em cada nı́vel, que precisa
log2 n bits.
10.3 Exerc´ıcios
Exercı́cio 10.1
Dado uma m´aquina de Turing com or´aculo para o problema de parada, é
possı́vel calcular a função do “castor ocupado” (ingl. busy beaver)?
197
11 Teoria de NP-completude
11.1 Caracteriza¸c˜
oes e problemas em NP
A hierarquia de Chomsky classifica linguagens em termos de autˆ omatos e
gramáticas que aceitam ou produzem elas:
Linguagem Nome Tipo Autˆomato Gram´atica
Regular REG 3 Autˆ omato finito (deter- Regular
minı́stico)
Livre de contexto CFL 2 Autˆ omato de pilha (não- Livre de con-
determin´ ıstico) texto
Sensitiva ao con- CSL 1 MT linearmente limitada Sensitiva ao
texto (não-determin´ ıstico) contexto
Recursivamente RE 0 MT Sistema semi-
enumerável Thue (sem res-
trição)
O seguinte teorema relaciona a hierarquia de Chomsky com as classes de
complexidade (sem prova, referências em (complexity zoo ), (Atallah, 1999,
Th. 25.6) e ( Sipser, 2006, Th. 7.16)).
P e NP em termos de busca
199
11 Teoria de NP-completude
P e NP em termos de busca
• 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 n˜ao
tem.
∈ ∈
• Essa definição do P às vezes é chamado FP ou PF.
• A classe NP: Linguagens LR tal que existe MTD que, com entrada (x, y),
decida se (x, y) ∈ R em tempo polinomial. y se chama certificado.
Teorema 11.2 ( (Trevisan, 2010, Th. 2),(Arora and Barak , 2009, Th. 2.18))
Para cada problema de busca definido por uma rela¸cão polinomialmente limi-
tada R, existe um problema de decis˜ao tal que, caso o problema de decis˜ ao
pode ser resolvido em tempo t(n), o problema de busca pode ser resolvido em
tempo nO(1) t(n). Em particular, P = NP sse cada problema de busca possui
solução em tempo polinomial
Prova. Para a relação R, considera o problema de decidir, para entrada x,
◦ ∈
w, se existe um z tal que (x, w z) R. Supõe que temos um algoritmo A que
resolve este problema em tempo t(n). Então podemos construir o seguinte
algoritmo, para entrada x
200
11.2 Reduç˜
oes
Exemplos de problemas em NP
11.2 Redu¸c˜
oes
Redu¸c˜
oes
Definição 11.2 (Redução em tempo polinomial)
Uma (many-one) reduç˜ ao entre duas linguagens L, L com alfabetos Σ e Σ é
um função total f : Σ ∗→ ∗
Σ tal que x L∈ ⇐⇒ f (x) L . Se f é com-
∈
putável em tempo polinomial, se chama uma reduç˜ ao em tempo polinomial ;
escrevemos L P L .
≤
201
11 Teoria de NP-completude
Caracter´ısticas de ≤P
Proposição 11.1 (Fecho para baixo)
≤ ∈
Se A P B e B P então A P. ∈
Proposição 11.2 (Transitividade)
≤P é transitivo, i.e. se A ≤
P B e B ≤
P C então A ≤P C .
Prova. (Fecho para baix o.) Uma instância w ∈
A pode ser reduzido em
tempo polinomial para w B. Depois podemos simular B com entrada w
∈
em
A tempo
∈
P.
polinomial. Como a composição de polinˆomios é um polinômio,
∈
(Transitividade.) Com o mesmo argumento podemos reduzir w A primeiro
para w B e depois para w C , tudo em tempo polinomial.
∈ ∈
O problema de parada
• O problema da parada
HALT = {M, w | MT M para com entrada w }
não é decidı́vel.
202
11.2 Reduç˜
oes
Teorema 11.3
Ladrilhar: Exemplo
Ladrilhar: Solu¸c˜
ao
203
11 Teoria de NP-completude
Ladrilhar: Exemplo
Ladrilhar: O problema
Ladrilhamento
204
11.2 Reduç˜
oes
Instˆ
ancia Tipos de ladrilhos t1 ,...,t k e um grade de tamanho n n com ×
cores nas bordas . (Cada ladrilho pode ser representado por quatro
sı́mbolos para as cores; a grade consiste de n2 ladrilhos em branco e
4n cores; uma instância tem tamanho O(k + n2 ).
Quest˜ ao Existe um ladrilhamento da grade tal que todas cores casam
(sem girar os ladrilhos)?
205
11 Teoria de NP-completude
(q, a) (q, a) −
( , a)
(q, R) − − (q, L) − −
−
( , a) ( , a) − ( , a) −
As cores no sul da grade representam a configura¸cão inicial
−
(q0 , a1 )( , a2 ) ··· (−, an )(−, ) ··· (−, )
− − ··· (−, )
(qa , )( , )
e as cores dos lados oeste e este todos s˜ ao −. Pela construção uma com-
putação da MT que aceita corresponde com um ladrilhamento e vice versa.
A construção do grade e das tipos de ladrilhos pode ser computado por uma
máquina de Turing em tempo polinomial.
Resultado intermedi´
ario
Ladrilhamento ≤P L.
Proposição 11.3
⊆
Se A B e A é fechado para baixo em relação à redução ≤ e L e B-≤-completo
então
L A A = B.
∈ ⇐⇒
O fecho para baixo é necessário para evitar que A é subconjunto de B que
contém os problemas completas mais não todos problemas em B.
206
11.2 Reduç˜
oes
SAT
Instˆ
ancia Fórmula proposicional em forma normal conjuntiva
Φ(x1 ,...,x n ).
ao Tem uma atribuição a1 ,...,a
Quest˜ n ∈ B que satisfaz Φ?
Prova (1)
Objetivo: Provar Ladrilhamento ≤P SAT.
Seja
∧ Wx,y,t (W )
i
∧
¬ Wx,y,c
c∈C
c
=ti (W )
∧ Sx,y,t (S)
i
∧
¬ Sx,y,c
c∈C
c
=ti (S)
∧ Ex,y,t (E) ∧
i
¬Ex,y,c
c∈C
c
=t (E)
i
Prova (2)
207
11 Teoria de NP-completude
Prova (3)
• O número de variáveis e o tamanho deφ é polinomial em n, k; φ pode
ser computado em tempo polinomial para uma instˆancia de Ladrilha-
mento.
O significado do P = NP
Kurt Gödel 1958: Uma carta para John von Neum ann
Obviamente,
cada fórmula Fpodemos construir
da lógica uma máquina
de predicados de Turing,
de primeira ordem e que
cadadecide,
n´umeropara
na-
tural n, se F tem uma prova do tamanho n (tamanho = número de sı́mbolos).
Seja Φ(F, n) o n´umero de passos que a m´ aquina precisa para isso, e seja
Ψ(n) = max F Φ(F, n). A questão é como Φ(n) cresce para uma m´aquina
ótima. É poss´ıvel provar que Φ(n) ≥
kn. Se existisse uma m´aquina com
Φ(n) ∼ kn (ou pelo menos Φ( n) kn2 ), isso teria consequências da maior
∼
208
11.2 Reduç˜
oes
A significado do P = NP
Minesweeper consistência
ancia Uma matriz de tamanho b
Instˆ × b cada campo ou livre, ou com um
número ou escondido.
209
11 Teoria de NP-completude
Decis˜
ao A matriz é consistente (tem uma configuração dos campos es-
condidos, que podem ser “bombas” ou livres tal que os n´umeros são
corretos)?
O mundo agora
•O milagre da NP-completude
– Qualquer problema em NP tem uma redução po-
linomial para SAT!
– Por que não usar s´o SAT? (soluções em 1 .3n )?
• Teorema
Se P
11.6 (Ladner ( Ladner, 1975))
= N P , existe uma linguagem L ∈ N P que nem
é NP-completo nem em P.
Stephen Arthur
Cook (*1939)
Leonid Levin
(*1948)
Muitos se interessavam
210
12 Fora d o NP
Classes fora do P-NP
L = DSPACE[log n]
NL = NSPACE[log n]
EXPTIME =
k
DTIME[2n ]
k> 0
NEXPTIME =
k
NTIME[2n ]
k>0
EXPSPACE =
DSPACE[2n ]
k
k> 0
NEXPSPACE =
NSPACE[2n ]
k
k>0
Co-classes
Definição 12.1 (Co-classes)
Para uma linguagem L, a linguagem complementar é L = Σ∗ L. Para uma
\
− { | ∈ }
classe de complexidade C , a co-classe co C = L L C e a classe das
linguagens complementares.
Proposição 12.1
−
P = co P.
211
12 Fora do NP
A classe co- NP
• Uma prova sucinta para esse problema não é conhecido, então suponha-
mos que TAUT ∈ NP.
• Em outras palavras, NP parece de não ser fechado sobre a comple-
mentação:
co-NP = NP ?
Proposição 12.2
∈
Se L NPC então L ∈ co-NP ⇐⇒ NP = co-NP.
Proposição 12.3
TAUT é co-NP-completo.
212
SAT ={ϕ | ϕ em FNC é satisfat´ıvel}
SAT = {ϕ | ϕ em FNC é insatisfatı́vel (ou lixo)}
= {¬ϕ | ϕ em FND é uma tautologia (ou lixo)} = ¬TAUT
TAUT = {ϕ | ϕ em FND é uma tautologia}
SAT é trivial sobre fórmulas disjuntivas, TAUT é trivial sobre fórmulas con-
juntivas (ambas tempo O(n)).
A classe co-NP
• NP: Resposta sim, se existe uma computa¸cão que responde sim.
213
12 Fora do NP
12.1 De P at´
e PSPACE
Problemas PSPACE-completos
• Considere
Formulas booleanas quantificadas (ingl. quantified boolean
formulas, QBF)
ancia Uma sentença booleana
Instˆ
Φ := (Q1 x1 )(Q2 x2 ) ··· (Qn xn)[ϕ(x1, x2,...,x n )]
com Qi ∈ {∀ ∃}
, .
ao Φ é verdadeira?
Decis˜
214
12.1 De P até PSPACE
• Exemplo:
∀ ∃ ∀
( x1 )( x2 )( x3 )(x1 ∨ x3 ≡ x2)
Teorema 12.1
QBF é PSPACE-completo.
∈
Prova. (Rascunho.) É fácil de provar que QBF PSPACE: Podemos verificar
recursivamente que a sentença é verdadeira: Para uma fórmula Qx1 ϕ(x1 ,... )
com Q ,
∈ {∀ ∃} vamos aplicar o algoritmos para os casos ϕ(0) e ϕ(1).
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 espa¸co nk e seja w ∈L. A idéia principal é construir uma
fórmula φq,s,t que afirma que tem uma transi¸cão do estado q para s em ao
máximo t passos. A idéia é testar φq0 ,qf ,2cf(n) com 2 cf (n) sendo o n´umero
máximo de estados para entradas de tamanho n.
Um estado pode ser codificado em um string de w k bits. Para φq,r,1 podemos
| |
usar basicamente a mesma fórmula do teorema de Cook. Para t > 1 a fórmula
∃
φq,s,t = r(φq,r,t/2 ∧ φr,s,t/2)
define se tem uma transi¸cão com estado intermediário r. Essa f´ormula infeliz-
mente tem t sı́mbolos (que é demais para 2cf (n) ), mas a f´ormula
∃∀
φq,s,t = r (a, b) ∈ {(q, r), (r, s)}(φa,b,t/2)
evite a ocorrência dupla de φ a tem comprimento polinomial.
Outro exemplo
Mais quantifica¸c˜oes
O que acontece, se n´os permitimos mais quantifica¸cões?
215
12 Fora do NP
A hierarquia polinomial
Σi+1 = NPΣi
−
Πi+1 = co Σi+1
∆i+1 = PΣi
216
12.1 De P até PSPACE
Quantifica¸c˜
oes restritas ou n˜
ao
Corolário 12.1
ATIME = PSPACE
217
12 Fora do NP
Double Knapsack
Instˆ
ancia Dois conjuntos de itens X = x1 ,...,x m { } ⊆ N, Y =
{
y1 ,...,y n }⊆ ∈
N, um limite N N, um ı́ndice k.
• Ganhar um jogo:
∃p1 ∀p2 ∃p3 ∀p4 ···∃ p2k+1 :
p1 , p2 , p3 ,...,p 2k+1 é uma sequência de passos para ganhar.
218
12.1 De P até PSPACE
Peru...
Minha estratégia (em português): Tira o adversário em paı́ses com a. Aqui só
tem dois saı́das pouco conhecidos: Afeganistão e Azerbaijão. A ´unica resposta
para isso é Omã – a segunda vez, ele n˜ao tem resposta.
Teorema 12.3
Geografia generalizada é PSPACE-completo.
219
12 Fora do NP
O mundo at´
e PSPACE
Problemas intrat´
aveis demonstr´
aveis
≥
k 0
O(1) k
EXPSPACE = DSPACE[2n
O(1)
]=
k
DSPACE[2n ]
≥
k 0
220
12.2 De PSPACE até ELEMENTAR
PSPACE: Auch hier haben Pfade noch polynomiale Länge, aber ich muss u.U.
alle durchgehen (z.B. Summation).
EXPTIME: Hier haben selbst (einzelne) Pfade exponentielle L¨ange.
221
12 Fora do NP
{}
– 0 ou 1 (denota o conjunto L(0) = 0 e L(1) = 1 ). {}
◦ ◦
– e f , se é um operador, e e, f são expressões regulares.
• Operadores possı́veis: ∪, ·, 2, ∗ , ¬.
• Decisão: Dadas as express˜oes regulares e, f , L(e) = L(f )?
Expressões regulares com Completo para
∪·
, NP
, ,∗ PSPACE
∪∪,, ··,,22 ,∗ NEXP
EXPSPACE
∪, ·, ¬ Fora do ELEMENTAR!
• O tempo do último problema de decisão cresce ao menos como uma torre
de altura lg n.
12.3 Exerc´ıcios
Exercı́cio 12.1
Considera a seguinte prova que o problema de isomorfismo de grafos (GI) é
PSPACE-completo:
222
A Conceitos matem´
aticos
A.1 Fun¸c˜
oes comuns
N, Z, Q e R denotam os conjuntos dos n´umeros naturais sem 0, inteiros,
racionais e reais, respectivamente. Escrevemos também N0 = N ∪{ }
0 , e para
{ ∈ | }
um dos conjuntos C acima, C+ := x C x > 0 e C− := x C x < 0 . { ∈ | }
Por exemplo
{ ∈ | }
R+ = x R x > 0 .
x| = |x| (A.1)
x ≤ |x| (A.2)
|x + y| ≤ |x| + |y| Desigualdade triangular (A.3)
|xy| = |x||y| (A.4)
223
A Conceitos matemáticos
Corolário A.1
≤≤
1 i n
xi ≤ | |
≤≤
1 i n
xi (A.5)
xi = | | xi (A.6)
≤≤
1 i n ≤≤
1 i n
(A.7)
max ai + bi
i
≤ max
i
ai + max bi
i
(A.8)
max ai + bi = ak + bk
i
≤ max ai + bi
i
≤ max
i
ai + max bi .
i
O parte fracion´ {}
ario de x é x = x − x.
Observe que o parte fracionário sempre é positivo, por exemplo 0.3 = 0.7.
{− }
Proposição A.3 (Regras para pisos e tetos)
Pisos e tetos satisfazem
224
A.1 Funç˜
oes comuns
Definição A.3
O fatorial é a função
n! : N → N : n →
i.
≤≤
1 i n
Uma estimativa menos preciso, pode ser obtido pelas observa¸ cões
n! nn ≤
i
n nn
en = >
i! n!
≥
i 0
loga (1)
0= (A.12)
aloga (n) = n por definição (A.13)
·
loga (n m) = log a (n) + loga (m) propriedade do produto (A.14)
n
m
−
loga ( ) = log a (n) loga (m) propriedade da divis˜ao (A.15)
loga (nm ) = m loga (n)
· propriedade da potência (A.16)
·
loga (n) = log b (n) loga (b) trocadebase (A.17)
logc (n)
loga (n) = mudança de base (A.18)
logc (a)
1
logb (a) = (A.19)
loga (b)
alogc (b) = blogc (a) expoentes (A.20)
Os números harmônicos 1
Hn =
i
≤≤
1 i n
225
A Conceitos matemáticos
Proposição A.4
ln n < Hn < ln n + 1.
ln(n) ≤ ln(n + 1) =
n+1
1
1 x
n+1
1
2 x − 1 = ln(n)
0 1 2 3 4 5 6 7 8 9 10
A.2 Somat´
orio
Revis˜
ao: Notac˜
¸ao Somatorio
´
226
A.2 Somatório
ai .
≤≤
0 i n ≤ −≤
0 p i n − ≤≤
p n i p
Parte da análise de algoritmos se faz usando somat´orios, pois la¸cos while e for
em geral podem ser representados por somat´orios. Como exemplo, considere
o seguinte problema. Dadas duas matrizes matA e matB, faça um algoritmo
que copie a matriz triangular inferior de matB para matA.
227
A Conceitos matemáticos
1 fo r i := 1 to n do
2 f or j := 1 to i do
3 Aij = Bij
4 end for
5 end for
n i n
1= i = n(n + 1)/2 = O(n2 )
i=1 j =1 i=1
S´
eries
n
n(n + 1)
i= série aritmética (A.27)
i=1 2
n
xn+1 1 −
xi =
série geométrica, para x =1 (A.28)
i=0
x 1 −
||
se x < 1 então
∞
1
xk = série geométrica infinitamente decrescente (A.29)
k=0
1 −x
Série geométrica com limites arbitrários:
xb+1 xa −
xi =
para x = 1
≤≤
a i b
x 1 −
S´
eries
228
A.3 Induç˜
ao
n
2i = 2n+1 −2 (A.30)
i=1
n
n(n + 1)(2n + 1)
i2 = (A.31)
i=0
6
n
i2i = 2 + (n 1)2n+1 (A.32)
i=0 −
Mais geral para alguma sequência fi temos
ifi =
fi = fi = fi
1≤i≤n 1≤i≤n 1≤j ≤i 1≤j ≤i≤n 1≤j ≤n j ≤i≤n
=
− fi fi .
1≤j ≤n 1≤i≤n 1≤i<j
Uma aplicação:
n+1 1 j 1
ixi = − xi xi = x − x − xx −− x1
≤≤ ≤≤ ≤≤ ≤ ≤≤ x−1
1 i n 1 j n 1 i n 1 i<j 1 j n
1
= − xn+1 xj
x− 1 ≤≤
1 j n
=
− −
1
nxn+1
xn+1 x1
=
x n
− n − 1) + 1)
x −1 x 1 − (x − 1)2 (x (nx
A.3 Indu¸c˜
ao
Revis˜
ao: Induc¸˜
ao matem´
atica
229
A Conceitos matemáticos
Revis˜
ao: Induc¸˜
ao matem´
atica
Indu¸c˜
ao matem´
atica: exerc´ıcios
Mostre que n! nn .
• ≤
• Mostre que log1(c) = logc (a).
a
230
A.4 Limites
A.4 Limites
Definição A.4 (Limites)
Para f : N →R o limite de n para ∞ é definido por
lim f (n) = c ⇐⇒ ∃c ∀ > 0 ∃n0 ∀n > n0 |f (n) − c| < . (A.34)
n→∞
n
lim
→∞ f (n) = ∞ ⇐⇒ ∀c ∃n0 ∀n > n0 f (n) > c (A.35)
Também temos
231
A Conceitos matemáticos
Exemplo A.1
Para um dado sem bias temos Ω = { }
1, 2, 3, 4, 5, 6 e Pr[ i] = 1/6. O evento
{ }
Par = 2, 4, 6 tem probabilidade Pr[Par] = e∈Par Pr[e] = 1/2. ♦
Probabilidade: No¸c˜
oes b´
asicas
• Vari´avel aleat´oria
X:Ω →N
• Escrevemos Pr[X = i] para Pr[ X −1(i)].
• Variáveis aleatórias independentes
P [X = x e Y = y] = P [X = x]P [Y = y]
• Valor esperado
E [X ] =
Pr[e]X (e) =
i Pr[X = i]
e Ω∈ ≥
i 0
=
Pr[e]X (e) =
Pr[e]X (e)
≤ ∈
0 i e X −1 (i) ∈
e Ω
Prova. (Da linearidade.)
E [X + Y ] =
Pr[e](X (e) + Y (e))
∈
e Ω
=
Pr[e]X (e)
Pr[e]Y (e)) = E [X ] + E [Y ]
∈
e Ω ∈
e Ω
232
A.6 Grafos
Exemplo A.2
(Continuando exemplo A.1.)
Seja X a variável aleatório que denota o n´umero sorteado, e Y a variável
aleatório tal que Y = [a face em cima do dado tem um ponto no meio].
E [X ] =
Pr[X = i]i = 1/6
i = 21/6 = 7/2
≥
i 0 ≤≤
1 i 6
A.6 Grafos
Seja [D]k o conjunto de todos subconjuntos de tamanho k de D.
Um grafo (ou grafo n˜ao-direcionado) é um par G = (V, E ) de vértices (ou
nós ou pontos) V e arestas (ou arcos ou linhas) E tal que E [V ]2 . Com
⊆
| |
G e G denotamos o n´umero de vértices e arestas, respectivamente. Dois
{ }∈
vértices u, v são adjacentes, se u, v E , duas arestas e, f são adjacentes, se
∩ ∅
e f = . Para um vértice v, a vizinhança (de vértices) N (v) é o conjunto
de todas vértices adjacentes com ele, e a vizinhança (de arestas) E (v) é o
conjunto de todas arestas adjacentes com ele. O grau de um vértice v é o
| | |
número de vizinhos δ(v) = N (v) = E (v) . |
{
Um caminho de comprimento k é um grafo C = ( v0 ,...,v k , vi , vi+1 } {{ }|
0 ≤ }
i < k ) com todo vi diferente. Um ciclo de comprimento k + 1 é um
{ }
caminho com a aresta adicional vn , v0 . O caminho com comprimento k é
denotado com P k , o ciclo de comprimento k com C k .
Um grafo G é conexo se para todo par de vértices u, v existe um caminho
entre eles em G.
Um subgrafo de G é um grafo G = (V , E ) tal que V V e E
⊆ ⊆
E,
escrito G ⊆ G. Caso G contém todas arestas entre vértices em V (i.e.
E = E [V ]2 ) ela é um subgrafo induzido de V em G, escrito G = G[V ].
∩
Um grafo direcionado é um par G = (V, E ) de vértices V e arestas E V 2 . ⊆
Cada aresta e = (u, v) tem um começo u e um termino v.
233
B Solu¸c˜
oes dos exerc´ıcios
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)
Solução
⇐
“ ”: do exercı́cio 1.2.
Seja f + c O(g), logo existem c e n0 tal que n > n0 f + c c g. Portanto
∈ ∀ ≤
f f + c c g também, e temos f O(g).
≤ ≤ ∈
⇒
“ ”:
∈
Essa direção no caso geral não é válida. Um contra-exemplo simples é 0 O(0)
∈
mas 0+ c O(0). O problema é que a função g pode ser 0 um n´umero infinito
235
B Soluç˜
oes dos exercı́cios
de vezes. Assim f tem que ser 0 nesses pontos também, mas f + c não é. Mas
com a restrição que g Ω(1), temos uma prova:
∈
Seja f O(g) logo existem c e n0 tal que n > n0 f
∈ ∀ c g. Como g Ω(1)
≤ ∈
também existem c e n0 tal que n > n0 g c . Logo para n > max(n0 , n0 )
∀ ≥
c c
f + c ≤ c g + c ≤ c g + g = (c + )g.
c c
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 inequa¸cão acima está correto com
c = 1.
fn = 2fn−1
≤ 2cn
≤cn Perdido!
236
Prova que fn O(Φn ) com indu¸cão que fn
∈ ≤ cΦn.
Base: f0 = 0 ≤ c e
≤ ≈ ≥
f1 = 1 cΦ para c 1/Φ 0.62. Passo:
caso cΦ + c ≤ cΦ2 .
Prova que fn ∈ Ω(Φn ) com indu¸cão que fn ≥ cΦn . Base: Vamos escolher
n0 = 1. f1 = 1 ≥ cΦ e f2 = 1 ≥ cΦ2 caso c ≤ Φ−2 ≈ 0.38. Passo:
n 1 n 2 n 2 n
fn = fn 1− + fn−2 ≥ cΦ − + cΦ − = (cΦ + c)Φ − ≤ cΦ
caso cΦ + c ≥ cΦ2.
Solução do exercı́cio (Toscani and Veloso, 2005, 2.3).
d1 f q g f
≤ ◦ ≤ d2 f q
⇒ d1 (c1 np )q
≤ g ≤ d2 (c2np)q
⇒ f1cq1 np+q ≤ g ≤ d2cq2np+q
⇒ g ∈ Θ(np+q )
237
B Soluç˜
oes dos exercı́cios
n 2i−1 n
c
Cp [Alg1] = c= · 2i = c 2n · − c = O(2n )
i=1 j =1
2 i=1
Cp [Alg2] =
j2 ≤ j2
≤≤
1 i n 1≤j ≤2i
j ı́mpar
≤≤ ≤ ≤
1 i n1 j 2i
= O(
(2i )3 )
≤≤
1 i n
8n+1 − 8 ≤ 8n+1 = O(8n)
= O( 8i ) =
7
≤≤
1 i n
n
· −n n
Cp [Alg3] = 2i = 2i (n i + 1)
i=1 j =i i=1
n n n n
=
− −
i
(n2 i2i + 2i ) = 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
= n2 − 2n − 2 − n2n+1 + 2n+1 + 2n+1 − 2
= 2n+2 − 2n − 4 = O(2n )
238
n
i n
Cp [Alg4] = j
2 = (2i+1 − 2)
i=1 j =1 i=1
n
− n
i
=2 2 2 = 2 (2n+1 · − 2) − 2n
i=1 i=1
=4 2 · − 4 − 2n = O(2n )
n
Cp [Alg5] =
−
n n
2j =
n n
2j
i 1−
2j
i=1 j =i i=1 j =1 j =1
n
− − − · n
= 2n+1 2 (2i−1+1 2) = 2 2n − 2 − 2i + 2
i=1 i=1
n
− · − − n
=2 2n 2i = 2 n2n (2n+1 2)
i=1 i=1
= 2 n2n
· −2·2 n
+ 2 = O(n2n )
Tn = n − 1 + 2/n
O(i)
≤
0 i<n
≤ n − 1 + 2c/n
i
≤
0 i<n
−
= n 1 + c(n 1) = cn + (n 1 c) − − −
≤cn Não funciona para n > c + 1
239
B Soluç˜
oes dos exercı́cios
3 for i = 1,...,n do
4 i f ai > M then
5 m := M
6 M := ai
7 e ls e if ai > m do
8 m := ai
9 end i f
10 end for
11 return m
O número de comparações é ao máximo dois por itera¸cão, e esse limite ocorre
numa sequência crescendo 1, 2,...,n . Portanto, a complexidade pessimista é
2n = Θ(n). Existem outras solu¸cões que encontram o segundo maior elemento
com somente n + log2 n comparações.
Solução do exercı́cio 2.4.
Uma abordagem simples com busca exaustiva é
1 m :=
≤ ≤ ai
1 i n
2 for C ⊆ [1, n]
do
3 m := i∈C ai − i C∈ ai
4 i f m < m then
5 m := m
6 end i f
7 end for
Ele tem complexidade cp = O(n) + O(2n nc) = O(n2n ).
Solução do exercı́cio 2.5.
Para um dado n temos sempre n −n/2 atualizações. Logo, o n´umero médio
de atualizações é e mesma.
Solução do exercı́cio 2.6.
Seja A, A1 ,...,A n as variáveis aleatórias que denotam o n´umero total de
atualizações, e o n´umero de atualiza¸cões devido a posi¸cão i, respectivamente.
Com a distribui¸cão uniforme temos E [Ai ] = 1/6 e pela linearidade
E [A] = E ≤ ≤ A = n/6.
1 i n
i
Com o mesmo argumento a segunda distribuição leva a E [Ai ] = 1/10 éE [A] =
n/10 finalmente.
Solução do exercı́cio 2.7. i−1
∈
Cada chave em nı́vel i [1, k] precisa i comparações e a árvore tem ≤≤ 2 =
1 i k
240
2k− 1 nós e folhas em total. Para o n´umero de compara¸cões C temos
2i−1
E [C ] = P [C = i]i = i = 2−k 2i i = 2(k − 1) + 21−k .
2k −1
≤≤
1 i k ≤≤
1 i k ≤≤
1 i k
ıda true, se S
Sa´ ⊆ S (S é uma subsequência de S )
1 i f m > n then
2 return false
3 end i f
4 i := 1
5 fo r j := 1,...,n do
6 i f si = sj then
7 i := i + 1
8 i f i > m then
9 return true
10 end i f
11 end i f
12 end for
13 return false
241
B Soluç˜
oes dos exercı́cios
Sa´
ıda Uma sequência mı́nima de posições bi de bases.
1 Sejam S = x1 ...x n as po si ¸c ões em or dem cresc ente
2 B=
3 while S do
4 Seja S = x S
5 B := B, (x + 4) { aumenta a se qu ên ci a B }
6 Remove t o d o s os e l e m e n t o s x x + 8 de S
≤
7 end while
1. T (n) = 9T (n/3) + n
i i log n
T (n) = 9 (n/3 ) + Θ(9 3
)
≤
0 i<log3 n
=n
3i + n 2
≤
0 i<log3 n
3log3 n − 1 + n2 = Θ(n2)
=n
2
242
2. T (n) = 2T (n/2) + n log n
T (n) =
2i (n/2i )log 2 n/2i + Θ(2log2 n )
≤
0 i<log n
=n
− i + Θ(n)
log2 n
≤
0 i<log n
n log2 n(log2 n − 1)
= n log2 n − 2 + Θ(n)
2
= O(n log2 n)
243
B Soluç˜
oes dos exercı́cios
p= |
| |
p1 p2
n/2bits n/2bits
x= | |
p1
n/2bits
+ | p2|
= x1
| | |
n/2bits
x2
1bit n/2bits
p1 q 2 + p2 q 1 = t −u−v
n
pq = u2 + (t − u − v)2n/2 + v
Complexidade
substituição quedoa algoritmo Inicialmente
recorrência deste provaremos
algoritmo é O(nlog2 3pelo
). Se método
usarmosda
a
≤ log2 3
hipótese de que T (n) cn , não conseguiremos finalizar a prova pois
permanecerá um fator adicional que n˜ao podemos remover da equa¸cão.
Caso este fator adicional for menor em ordem que a complexidade que
queremos provar, podemos usar uma hip´otese mais forte como apresen-
tado abaixo.
244
Hipótese: T (n) ≤ cnlog 3 − dn
2
≤ cnlog 3 − 3d(n/2) + bn
2
≤ cnlog 3 − dn
2
A desigualdade
para d ≤− 2b: Tacima
(n) éO(n
∈verdadeira
log2 3 para O(n
dn) 3d(n/2)
−log2 3 + bn
). ∈− ≤ −dn, ou seja,
Com a hip´otese que uma multiplicaç˜ ao com 2k precisa tempo constante
(shift left), a linha 7 do algoritmo também precisa tempo constante,
porque uma multiplica¸cão com x1 ou y1 precisa tempo constante (de
fato é um if). O custo das adi¸cões é O(n) e temos a recorrência
1 se n = 1
Tn =
3T (n/2) + cn se n > 1
O algoritmo acima n˜ao é limitado para números binários, ele pode ser
aplicado para números com base arbitr´ario. Ele é conhecido como algo-
ritmo de Karatsuba ( Karatsuba and Ofman, 1962). Um algoritmo mais
eficiente é do Schönhage e Strassen ( Schönhage and Strassen, 1971) que
multiplica em O(n log n log log n). Fürer (2007) apresenta um algoritmo
∗
que multiplica em n log n 2O(log n) , um pouco acima do limite inferior
Ω(n log n).
245
B Soluç˜
oes dos exercı́cios
T (n) ≤
cn2 (7/4)i + 7h+1
≤≤
0 i h
246
obtemos uma cota superior para o custo da ´arvore
T (n) ≤n
ci + F (n)
≤≤
0 i h
≤n
ci + F (n) porque c < 1 = 10 n/(1 − ) + F (n)
≤ ∞
0 i<
247
Bibliografia
Scott Aaronson. NP-complete problems and physical reality. ACM SIGACT
News, March 2005.
Manindra Agrawal, Neeraj Kayal, and Nitin Saxena. PRIMES is in P. Annals
of Mathematics, 160:781–793, 2004.
Mohamad Akra and Louay Bazzi. On the solution of linear recurrence equa-
tions. Computational Optimization and Applications, 10:195–210, 1998.
Noga Alon, Zvi Galil, Oded Margalit, and Moni Naor. Witnesses for boolean
matrix multiplication and for shortest paths. In FOCS, 1992.
Sanjeev Arora and Boaz Barak. Computational Complexity: A Modern Ap-
proach. Cambridge University Press, 2009.
Mikhail J. Atallah, editor. Algorithms and theory of computation handbook.
CRC Press, 1999.
G.and
Ausiello, P. Crescenzi,
M. Protasi. G. Gambosi,
Complexity V. Kann, A.
and approximation Marchetti-Spaccamela,
– Combinatorial Optimiza-
tion Problems and their Approximability Properties. Springer-Verlag, 1999.
URL http://www.nada.kth.se/ ~viggo/approxbook.
Richard Bellman. Dynamic programming treatment of the travelling salesman
problem. J. ACM , 9(1):61–63, 1962.
Timothy M. Chan. More algorithms for all-pairs shortest paths in weighted
graphs. In STOC’07, 2007.
complexity zoo. Complexity zoo. Online.
Don Coppersmith and Shmuel Winograd. Matrix multiplication via arithmetic
progressions. In STOC ’87: Proceedings of the nineteenth annual ACM
conference on Theory of computing, pages 1–6, 1987.
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford
Stein. Introduction to Algorithms. The MIT Press, 2nd edition, 2001.
L.J. Cowen, Robert Cowen, and Arthur Steinberg. Totally greedy coin sets and
greedy obstructions. The Electronic Journal of Combinatorics, 15, 2008.
249
Bibliografia
Shafi Goldwasser, Silvio Micali, and Charles Rackoff. The knowledge com-
plexity of interactive proof-systems. In ACM Symposium on Theory of
Computing (STOC), pages 291–304, 1985.
Yuri Gurevich and Saharon Shelah. Expected computation time for Hamilto-
nian path problem. SIAM J. on Computing , 16(3):486–502, 1987.
Donald E. Knuth. The art of computer programming, volume III, Sorting and
searching. Addison-Wesley, 2nd edition, 1998.
250
Bibliografia
Mohit Singh and Lap Chi Lau. Approximating minimum bounded degree
spanning trees to within one of the optimal. In STOC ’07: Proceedings of
the thirty-ninth annual ACM symposium on Theory of computing , 2007.
Michael Sipser. The history and status of the P versus NP question. In Pro-
ceedings of the 24th Annual ACM Symposium on the Theory of Computing ,
pages 603–619, 1992.
251
Bibliografia
252
´Indice
253
Índice
254
Índice
255
Índice
tabela de inversões, 57
256