Vous êtes sur la page 1sur 242

Algoritmos e complexidade

Notas de aula
Marcus Ritt
Luciana Buriol
Edson Prestes
22 de Abril de 2008

Conte
udo

I.

An
alise de algoritmos

1. Introduc
ao e conceitos b
asicos
1.1. Notac
ao assint
otica . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3. Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7
18
27
28

2. An
alise de complexidade
2.1. Introduc
ao . . . . . . . . . . .
2.2. Complexidade pessimista . .
2.2.1. Metodologia de an
alise
2.2.2. Exemplos . . . . . . .
2.3. Complexidade media . . . . .
2.4. Exerccios . . . . . . . . . . .

31
31
35
35
41
49
63

. . . . . . . . . .
. . . . . . . . . .
de complexidade
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

II. Projeto de algoritmos

69

3. Introduc
ao

71

4. Algoritmos gulosos
4.1. Introduc
ao . . . . . . . . . . . . . .
4.2. Algoritmos em grafos . . . . . . . .

4.2.1. Arvores
espalhadas mnimas
4.2.2. Caminhos mais curtos . . .
4.3. Algoritmos de seq
uenciamento . .
4.4. T
opicos . . . . . . . . . . . . . . .
4.5. Notas . . . . . . . . . . . . . . . .
4.6. Exerccios . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

73
73
77
77
82
83
88
92
92

5. Programac
ao din
amica
93
5.1. Introduc
ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.2. Comparac
ao de seq
uencias . . . . . . . . . . . . . . . . . . . . . 97
5.2.1. Subseq
uencia Comum Mais Longa . . . . . . . . . . . . 97

Conte
udo
5.2.2. Similaridade entre strings . . .
5.3. Mochila m
axima . . . . . . . . . . . .
5.4. Multiplicac
ao de Cadeias de Matrizes .
5.5. T
opicos . . . . . . . . . . . . . . . . .
5.5.1. Algoritmo de Floyd-Warshall .
5.5.2. Caixeiro viajante . . . . . . . .

5.5.3. Arvore
de busca bin
aria
otima
6. Divis
ao e conquista
6.1. Introduc
ao . . . . . . . . . . . . . . .
6.2. Resolver recorrencias . . . . . . . . .
6.2.1. Metodo da substituic
ao . . .
6.2.2. Metodo da
arvore de recurs
ao
6.2.3. Metodo Mestre . . . . . . . .
6.3. T
opicos . . . . . . . . . . . . . . . .
6.4. Exerccios . . . . . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

101
105
106
111
111
112
113

.
.
.
.
.
.
.

119
119
121
122
127
129
134
135

7. Backtracking
8. Algoritmos de aproximac
ao
8.1. Introduc
ao . . . . . . . . . . . . .
8.2. Aproximac
oes com randomizac
ao
8.3. Aproximac
oes gulosas . . . . . .
8.4. Esquemas de aproximac
ao . . . .
8.5. Exerccios . . . . . . . . . . . . .

III. Teoria de complexidade

137

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

151
151
160
162
168
169

171

9. Do algoritmo ao problema
173
9.1. Introduc
ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
10.Classes de complexidade
181
10.1. Definic
oes b
asicas . . . . . . . . . . . . . . . . . . . . . . . . . . 181
10.2. Hierarquias b
asicas . . . . . . . . . . . . . . . . . . . . . . . . . 183
11.Teoria da NP-completude
187
11.1. Caracterizac
oes e problemas em NP . . . . . . . . . . . . . . . 187
11.2. Reduc
oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

Conte
udo
12.Fora do NP
199
12.1. De P ate PSPACE . . . . . . . . . . . . . . . . . . . . . . . . . . 201
12.2. De PSPACE ate ELEMENTAR . . . . . . . . . . . . . . . . . . . 206
A. Conceitos matem
aticos
A.1. Func
oes comuns . . . .
A.2. Somat
orio . . . . . . .
A.3. Induc
ao . . . . . . . .
A.4. Limites . . . . . . . .
A.5. Probabilidade discreta
A.6. Grafos . . . . . . . . .
B. Soluc
oes dos exerccios

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

209
209
212
215
217
217
219
221

Conte
udo
Essas notas servem como suplemento `
a material do livro Complexidade de
algoritmos de Toscani/Veloso e o material didatico da disciplina Complexidade de algoritmos da UFRGS.

Vers
ao 2561 do 2008-04-22, compilada em 22 de Abril de 2008. Obra esta licenciada sob uma Licenca Creative Commons (Atribuicao-Uso Nao-ComercialN
ao a obras derivadas 2.5 Brasil).

Parte I.
An
alise de algoritmos

1. Introduc
ao e conceitos b
asicos
A teoria da computac
ao comecou com a pergunta Quais problemas sao efetivamente comput
aveis? e foi estudado por matem
aticos como Post, Church,
Kleene e Turing. A nossa intuic
ao e que todos os computadores diferentes,
por exemplo um PC ou um Mac, tem o mesmo poder computacional. Mas nao
e possvel imaginar algum outro tipo de m
aquina que seja mais poderosa que
essas? Cujos programas nem podem ser implementadas num PC ou Mac? Nao
e f
acil de resolver essa pergunta, porque a resposta a ela depende das possibilidades computacionais em nosso universo, e logo do nosso conhecimento da
fsica. Mesmo enfrentando esses problemas, matem
aticos inventaram varios
modelos de computac
ao, entre eles o c
alculo lambda, as funcoes parcialmente
recursivas, a m
aquina de Turing e a m
aquina de RAM, que se tornaram todos equivalente em poder computacional, e s
ao considerados como maquinas
universais.
Nossa pergunta e mais especfica: Quais problemas sao eficientemente comput
aveis?. Essa pergunta e motivada pela observacao de que alguns problemas que, mesmo sendo efetivamente comput
aveis, s
ao tao complicados, que a
soluc
ao deles para instancias do nosso interesse e impraticavel.
Exemplo 1.1
N
ao existe um algoritmo que decide o seguinte: Dado um programa arbitrario
(que podemos imaginar escrito em qualquer linguagem de programacao como
C ou Miranda) e as entradas desse programa. Ele termina? Esse problema e
conhecido como problema de parada.

Vis
ao geral
Nosso objetivo: Estudar a an
alise e o projeto de algoritmos.
Parte 1: An
alise de algoritmos, i.e. o estudo teorico do desempenho e
uso de recursos.
Ela e pre-requisito para o projeto de algoritmos.
Parte 2: As principais tecnicas para projetar algoritmos.

1. Introduc
ao e conceitos b
asicos
Introduc
ao
Um algoritmo e um procedimento que consiste em um conjunto de regras
n
ao ambguas as quais especificam, para cada entrada, uma seq
uencia
finita de operac
oes, terminando com uma sada correspondente.
Um algoritmo resolve um problema quando, para qualquer entrada, produz uma resposta correta, se forem concedidos tempo e memoria suficientes para a sua execuc
ao.
Motivac
ao
Na teoria da computac
ao perguntamos Quais problemas sao efetivamente comput
aveis?
No projeto de algoritmos, a pergunta e mais especfica: Quais problemas s
ao eficientemente comput
aveis?
Para responder, temos que saber o que eficiente significa.
Uma definic
ao razo
avel e considerar algoritmos em tempo polinomial
como eficiente (tese de Cobham-Edmonds).

Custos de algoritmos
Tambem temos que definir qual tipo de custo e de interesse.
Uma execuc
ao tem v
arios custos associados: Tempo de execucao, uso de
espaco (cache, mem
oria, disco), consumo de energia, ...
Existem caractersticas e medidas que sao importantes em contextos
diferentes Linhas de c
odigo fonte (LOC), legibilidade, manutenabilidade,
corretude, custo de implementac
ao, robustez, extensibilidade,...
A medida mais importante e nosso foco: tempo de execucao.
A complexidade pode ser vista como uma propriedade do problema
Mesmo um problema sendo comput
avel, n
ao significa que existe um algoritmo
que vale a pena aplicar. O problema
es regulares com 2
Expresso

Inst
ancia Uma express
ao regular e com operac
oes (uniao), (fecho de
2
Kleene), (concatenac
ao) e (quadratura) sobre o alfabeto =
{0, 1}.
Decis
ao L(e) 6= ?

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


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

Existem exemplos de outros problemas que s


ao decidveis, mas tem uma complexidade t
ao grande que praticamente todas inst
ancias precisam mais recursos que o universo possui (p.ex. a decis
ao da validade na logica monadica fraca
de segunda ordem com sucessor).
O universo do ponto da vista da ci
encia da computac
ao Falando sobre
os recursos, e de interesse saber quantos recursos nosso universo disponibiliza
aproximadamente. A seguinte tabela contem alguns dados basicos:
Idade
13.7 0.2 109 anos 43.5 1016 s
Tamanho
78 109 anos-luz
Densidade
9.9 1030 g/cm3
N
umero de
atomos
1080
N
umero de bits
10120
N
umero de operac
oes 10120
l
ogicas elementares ate
hoje
Operac
oes/s
2 10102
(Todos o dados correspondem ao consenso cientfico no momento; obviamente
novos descobrimentos podem os mudar. Fontes principais: [21, 1])

1. Introduc
ao e conceitos b
asicos
M
etodos para resolver um sistema de equac
oes lineares
sistema quadr
atico de equac
oes lineares

Como resolver um

a11 x1 + a12 x2 + + a1n xn = b1


a21 x1 + a22 x2 + + a2n xn = b2

an1 x1 + an2 x2 + + ann xn = bn


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

det(Ai )
det(A)

seja Ai a matriz resultante da substituic


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

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

1in

mas ele precisa n! adic


oes (A) e n!n multiplicacoes (M ), e nossos custos sao

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


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

(sendo Aij a matriz A sem linha a i e sem a coluna j). O trabalho Tn nesse
caso e dado pelo recorrencia
Tn = n(A + M + Tn1 );

T1 = 1

cuja soluc
ao e

Tn = n! 1 + (A + M )

X
1i<n

1 n!

10

1i<n

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

1/i! 1

P
e como 1i<n 1/i! aproxima e temos n! Tn n!(1 + (A + M )e) e logo Tn
novamente e mais que n!. Mas qual e o metodo mais eficiente para calcular
o determinante? Caso for possvel em tempo proporcional ao tamanho da
entrada n2 , tivermos um algoritmo em tempo aproximadamente n3 .
Antes de resolver essa pergunta, vamos estudar uma abordagem diferente da
pergunta original, o metodo de Gauss para resolver um sistema de equacoes
lineares. Em n passos, o matriz e transformada em forma triangular e cada
passo n
ao precisa mais que n2 operac
oes (nesse caso inclusive divisoes).
o de Gauss
Eliminac
a
Entrada Uma matriz A = (aij ) Rnn
Sada A em forma triangular superior.
1 e l i m i n a c
a o g a u s s ( a Rnn )=
2 f o r i := 1, . . . , n do { eliminate column i }
3
f o r j := i + 1, . . . , n do { eliminate row j }
4
f o r k := n, . . . , i do
5
ajk := ajk aik aji /aii
6
end f o r
7
end f o r
8 end f o r

Exemplo 1.3
Para resolver

1
4
7

2
5
8


x1
2
3
7 x2 = 4
9
6
x3

vamos aplicar a eliminac


ao de Gauss `
a

1 2
4 5
7 8

matriz aumentada

3 2
7 4
9 6

obtendo

1
0
0

2
3
6

3
5
12

2
4 ;
8

1 2
0 3
0 0

3
5
2

2
4
0

11

1. Introduc
ao e conceitos b
asicos
e logo x3 = 0, x2 = 3/4, x1 = 1/2 e uma solucao.

Logo temos um algoritmo que determina a solucao com


X

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

1in

operac
oes de ponto flutuante, que e (exceto valores de n bem pequenos) consideravelmente melhor que os resultados com n! operacoes acima2 .
Observe que esse metodo tambem fornece o determinante do matriz: ela e
o produto dos elementos na diagonal! De fato, o metodo e um dos melhores
para achar o determinante. Observe tambem, que ela nao serve para melhorar
o metodo de Cramer, porque a soluc
ao do problema original ja vem junto3 .
Qual o melhor algoritmo?
Para um dado problema, existem diversos algoritmos com desempenhos
diferentes.
Queremos resolver um sistema de equacoes lineares de tamanho n.
O metodo de Cramer precisa 6n! operacoes de ponto flutuante (OPF).
O metodo de Gauss precisa n3 n OPF.
Usando um computador de 3 GHz que e capaz de executar um OPF por
ciclo temos
n
2
3
4
5
10
20
2O

Cramer
4 ns
12 ns
48 ns
240ns
7.3ms
152 anos

Gauss
2 ns
8 ns
20 ns
40 ns
330 ns
2.7 ms

resultado pode ser melhorado considerando que aji /aii n


ao depende do k
estudo da complexidade do determinante tem muito mais aspectos interessantes. Um
deles
e que o m
etodo de Gauss pode produzir resultados intermedi
arios cuja representac
ao precisa um n
umero exponencial de bits em relac
ao `
a entrada. Portanto, o
m
etodo de Gauss formal mente n
ao tem complexidade O(n3 ). Resultados atuais mostram que uma complexidade de operac
oes de bits n3.2 log ||A||1+o(1)
e possvel [15].

3O

12

Motivac
ao para algoritmos eficientes
Com um algoritmo ineficiente, um computador rapido nao ajuda!
Suponha que uma m
aquina resolva um problema de tamanho N em um
dado tempo.
Qual tamanho de problema uma m
aquina 10 vezes mais rapida resolve
no mesmo tempo?
N
umero de operac
oes
log2 n
n
n log2 n
n2
n3
2n
3n

M
aquina r
apida
N 10
10N
10N
(N grande)
10N 3.2N

3
10N 2.2N
N + log2 10 N + 3.3
N + log3 10 N + 2.1

Exemplo 1.4
Esse exemplo mostra como calcular os dados da tabela acima. Suponha um
algoritmo que precisa f (n) passos de execuc
ao numa dada maquina e uma
outra m
aquina que e c vezes mais r
apida. Portanto, ele e capaz de executar c
vezes mais passos que a primeira. Ao mesmo tempo, qual seria o tamanho de
problema n0 que a nova m
aquina e capaz de resolver? Temos
f (n0 ) = cf (n).
Por exemplo para f (n) = log2 n e c = 10 (exemplo acima), temos
log2 n0 = 10 log2 n n0 = n10 .
Em geral obtemos
n0 = f 1 (cf (n))
(isso faz sentido para func
oes monot
onicas, que tem inversa).

Crescimento de func
oes

13

1. Introduc
ao e conceitos b
asicos

Crescimento de func
oes
1 ano 365.2425d 3.2 107 s
1 seculo 3.2 109 s
1 milenio 3.2 1010 s

Comparar efici
encias
Como comparar eficiencias? Uma medida concreta do tempo depende
do tipo da m
aquina usada (arquitetura, cache, memoria, ...)
da qualidade e das opc
oes do compilador ou ambiente de execucao
do tamanho do problema (da entrada)
Portanto, foram inventadas m
aquinas abstratas.
A an
alise da complexidade de um algoritmo consiste em determinar o
n
umero de operac
oes b
asicas (atribuic
ao, soma, comparacao, ...) em
relac
ao ao tamanho da entrada.
Observe que nessa medida o tempo e discreto.

14

An
alise assint
otica
Em geral, o n
umero de operac
oes fornece um nvel de detalhamento
grande.
Portanto, analisamos somente a taxa ou ordem de crescimento, substituindo func
oes exatas com cotas mais simples.
Duas medidas s
ao de interesse particular: A complexidade
pessimista e
media
Tambem podemos pensar em considerar a complexidade otimista (no caso
melhor): mas essa medida faz pouco sentido, porque sempre e possvel enganar
com um algoritmo que e r
apido para alguma entrada.
Exemplo
Imagine um algoritmo com n
umero de operacoes
an2 + bn + c
Para an
alise assint
otica n
ao interessam
os termos de baixa ordem, e
os coeficientes constantes.
Logo o tempo da execuc
ao tem cota n2 , denotado com O(n2 ).
Observe que essas simplificac
oes n
ao devem ser esquecidas na escolha de um
algoritmo na pr
atica. Existem v
arios exemplos de algoritmos com desempenho bom assintoticamente, mas n
ao s
ao vi
aveis na pratica em comparacao
com algoritmos menos eficientes: A taxa de crescimento esconde fatores
constantes e o tamanho mnimo de problema tal que um algoritmo e mais
rapido que um outro.
Complexidade de algoritmos
Considere dois algoritmos A e B com tempo de execucao O(n2 ) e O(n3 ),
respectivamente. Qual deles e o mais eficiente ?
Considere dois programas A e B com tempos de execucao 100 n2 milisegundos,e 5 n3 milisegundos, respectivamente, qual e o mais eficiente?

15

1. Introduc
ao e conceitos b
asicos
Exemplo 1.5
Considerando dois algoritmos com tempo de execucao O(n2 ) e O(n3 ) esperamos que o primeiro seja mais eficiente que o segundo. Para n grande, isso e
verdadeiro, mas o tempo de execuc
ao atual pode ser 100n2 no primeiro e 5n3
no segundo caso. Logo para n < 20 o segundo algoritmo e mais rapido.

Comparac
ao de tempo de execuc
ao
Assintoticamente consideramos um algoritmo com complexidade O(n2 )
melhor que um algoritmo com O(n3 ).
De fato, para n suficientemente grande O(n2 ) sempre e melhor.
Mas na pratica, n
ao podemos esquecer o tamanho do problema real.
100000

80000

60000

40000

20000

0
0

10

15

20

25

30

x
n^2
n^3

Exemplo 1.6
Considere dois computadores C1 e C2 que executam 107 e 109 operacoes por
segundo (OP/s) e dois algoritmos de ordenacao A e B que necessitam 2n2 e
50n log10 n operac
oes com entrada de tamanho n, respectivamente. Qual o
tempo de execuc
ao de cada combinac
ao para ordenar 106 elementos?
Algoritmo
Comp. C1
Comp. C2
A

2(106 )2 OP
107 OP/s

50(106 ) log 106 OP


107 OP/s

= 2 105 s
= 30s

2(106 )2 OP
109 OP/s

= 2 103 s

50(106 ) log 106 OP


109 OP/s

= 0.3s

16

Um panorama de tempo de execuc


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

Problemas super-polinomiais?
Consideramos a classe P de problemas com solucao em tempo polinomial
trat
avel.
NP e outra classe importante que contem muitos problemas praticos (e
a classe P).
N
ao se sabe se todos possuem algoritmo eficiente.

17

1. Introduc
ao e conceitos b
asicos
Problemas NP-completos s
ao os mais complexos do NP: Se um deles
tem uma soluc
ao eficiente, toda classe tem.
V
arios problemas NP-completos s
ao parecidos com problemas que tem
algoritmos eficientes.
Soluc
ao eficiente conhecida
Ciclo euleriano
Caminho mais curto
Satisfatibilidade 2-CNF

Soluc
ao eficiente improvavel
Ciclo hamiltoniano
Caminho mais longo
Satisfatibilidade 3-CNF

Ciclo euleriano
Inst
ancia Um grafo n
ao-direcionado G = (V, E).
Decis
ao Existe um ciclo euleriano, i.e. um caminho v1 , v2 , . . . , vn tal que
v1 = vn que usa todos arcos exatamente uma vez?
Coment
ario Tem uma decis
ao em tempo linear usando o teorema de
Euler (veja por exemplo [8, Teorema 1.8.1]) que um grafo conexo
contem um ciclo euleriano sse cada n
o tem grau par. No caso de um
grafo direcionado tem um teorema correspondente: um grafo fortemente conexo contem um ciclo euleriano sse cada no tem o mesmo
n
umero de arcos entrantes e saintes.

Ciclo hamiltoniano
Inst
ancia Um grafo n
ao-direcionado G = (V, E).
Decis
ao Existe um ciclo hamiltanio, i.e. um caminho v1 , v2 , . . . , vn tal
que v1 = vn que usa todos n
os exatamente uma u
nica vez?

1.1. Notac
ao assint
otica
O an
alise de algoritmos considera principalmente recursos como tempo e
espaco. Analisando o comportamento de um algoritmo em termos do tamanho da entrada significa achar uma func
ao c : N R+ , que associa com
todos entradas de um tamanho n um custo (medio,maximo) c(n). Observe,

18

1.1. Notacao assintotica


que e suficiente trabalhar com func
oes positivas (com co-domnio R+ ), porque os recursos de nosso interesse s
ao positivos. A seguir, supomos que todas
func
oes s
ao dessa forma.
Notac
ao assint
otica: O
Freq
uentemente nosso interesse e o comportamento assint
otico de uma
func
ao f (n) para n .
Por isso, vamos introduzir classes de crescimento.
O primeiro exemplo e a classe de func
oes que crescem menos ou igual
que g(n)
O(g(n)) = {f : N R+ |(c > 0)n0 (n > n0 ) : f (n) cg(n)}
A definic
ao do O (e as outras definic
oes em seguido) podem ser generalizadas
para qualquer func
ao com domnio R.
Notac
ao assint
otica: O

Notac
ao assint
otica

19

1. Introduc
ao e conceitos b
asicos
Com essas classes podemos escrever por exemplo
4n2 + 2n + 5 O(n2 )
Outra notac
ao comum que usa a identidade e
4n2 + 2n + 5 = O(n2 )
Observe que essa notac
ao e uma equacao u
nica (ingles: one-way equation);
O(n2 ) = 4n2 + 2n + 5
n
ao e definido.
Para f O(g) leia: f e do ordem de g; para f = O(g) leiamos as vezes
simplesmente f e O de g. Observe numa equacao como 4n2 = O(n2 ), as
express
oes 4n2 e n2 denotam func
oes, n
ao valores. Um jeito mais correto (mas
menos confort
avel) seria escrever n.4n2 = O(n.n2 ).
Caso f O(g) com constante c = 1, digamos que g e uma cota assint
otica
superior de f [27, p. 15]. Em outras palavras, O define uma cota assintotica
superior a menos de constantes.
O: Exemplos
5n2 + n/2 O(n3 )
5n2 + n/2 O(n2 )
sin(n) O(1)

Exemplo 1.8
Mais exemplos
n2 O(n3 log2 n)
3

32n O(n )
n 2

10 n 6 O(n2 )

c = 1; n0 = 2
c = 32; n0 = 1

porque 10n n2 cn2n 5n n c

n log2 n O(n log10 n)

c = 4; n0 = 1

20

1.1. Notacao assintotica


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

(1.1)

Prova.




X

i

|p(n)| =
ai n
0im

X

|ai |ni

Corol
ario A.1

0im

|ai |nm = nm

0im

|ai |

0im


Notac
ao assint
otica: Outras classes
Func
oes que crescem (estritamente) menos que g(n)
o(g(n)) = {f : N R+ |(c > 0)n0 (n > n0 ) : f (n) cg(n)}

(1.2)

Func
oes que crescem mais ou igual `
a g(n)
(g(n)) = {f : N R+ |(c > 0)n0 (n > n0 ) : f (n) cg(n)} (1.3)
Func
oes que crescem (estritamente) mais que g(n)
(g(n)) = {f : N R+ |(c > 0)n0 (n > n0 ) : f (n) cg(n)} (1.4)
Func
oes que crescem igual `
a g(n)
(g(n)) = O(g(n)) (g(n))

(1.5)

Observe que a nossa notac


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

21

1. Introduc
ao e conceitos b
asicos
Conven
c
ao 1.1
Se o contexto permite, escrevemos f O(g) ao inves de f (n) O(g(n)),
f cg ao inves de f (n) cg(n) etc.
Proposi
c
ao 1.2 (Caracteriza
c
ao alternativa)
Caracterizac
oes alternativas de O, o, e s
ao
f (n)
<
n g(n)
f (n)
f (n) o(g(n)) lim
=0
n g(n)
f (n)
f (n) (g(n)) lim inf
>0
n g(n)
f (n)
=
f (n) (g(n)) lim
n g(n)

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

(1.6)
(1.7)
(1.8)
(1.9)

Prova. Prova de 1.6:


: Seja f O(g). Como s(n) = supmn f (m)/g(m) e nao-crescente e
maior ou igual que 0, e suficiente mostrar que existe um n tal que s(n) < .
Por definic
ao do O temos c > 0 e n0 tal que n > n0 f cg. Logo n >
n0 supmn f (m)/g(m) c.
: Seja lim supn f (n)/g(n) < . Ent
ao
c > 0n0 n > n0 ( sup f (m)/g(m)) < c.
mn

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


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

22

1.1. Notacao assintotica


Caso l < : Escolhe, por exemplo, c = l/2. Pela definicao do limite existe n0
tal que n > n0 |l f /g| l/2. Logo f l/2g (f /g aproxima l por baixo) e
f (g).
Caso l = , i(n) n
ao tem limite superior, i.e. (c > 0)n0 i(n0 ) > c. Como
i(n) e n
ao-decrescente isso implica (c > 0)n0 (n > n0 ) i(n) > c. Portanto
n > n0 f > cg e f (g) (g).
Prova de 1.9:
f (g)

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

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

f (n)/g(n) n
ao tem limite


Conven
c
ao 1.2
Escrevemos f, g, . . . para func
oes f (n), g(n), . . . caso nao tem ambig
uedade no
contexto.
Operac
oes
As notac
oes assint
oticas denotam conjuntos de funcoes.
Se um conjunto ocorre em uma f
ormula, resulta o conjunto de todas
combinac
oes das partes.
Exemplos: nO(1) , log O(n2 ), n1+o(1) , (1 o(1)) ln n
Em uma equac
ao o lado esquerdo e (implicitamente) quantificado universal, e o lado direto existencial.
Exemplo: n2 + O(n) = O(n4 ) Para todo f O(n), existe um g O(n4 )
tal que n2 + f = g.
Exemplo 1.9
nO(1) denota
{nf (n) | c f (n) c} {f (n) | cn0 n > n0 f (n) nc }
o conjunto das func
oes que crescem menos que um polinomio.

que e uma abreviacao para f =


Uma notac
ao assint
otica menos comum e O
e usado se fatores logartmicos nao importam.
O(g logk g) para algum k. O

23

1. Introduc
ao e conceitos b
asicos
Caractersticas
f = O(f )

(1.10)

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

(1.11)
(1.12)

O(O(f )) = O(f )
O(f )O(g) = O(f g)

(1.13)
(1.14)

O(f g) = f O(g)

(1.15)

Prova.
Prova de 1.10: Escolhe c = 1, n0 = 0.
Prova de 1.11: Se g cO(f ), temos g = cg 0 e existem c0 > 0 e n0 tal que
n > n0 g 0 c0 f . Portanto n > n0 g = cg 0 cc0 f e com cc0 e n0 temos
g O(f ).
Prova de 1.12: Para g O(f ) + O(f ) temos g = h + h0 com c > 0 e n0 tal
que n > n0 h cf e c0 > 0 e n00 tal que n > n0 h0 c0 f . Logo para
n > max(n0 , n00 ) temos g = h + h0 (c + c0 )f .
Prova de 1.13: Para g O(O(f )) temos g ch com h c0 f a partir de
ndices n0 e n00 , e logo g cc0 h a partir de max(n0 , n00 ).
Prova de 1.14: h = f 0 g 0 com f 0 cf f e g 0 cg g tal que h = f 0 g 0 cf cg f g.
Prova de 1.15: Para h O(f g) temos c > 0 e n0 tal que n > n0 h cf g.
Temos que mostrar, que h pode ser escrito como h = f g 0 com g 0 O(g). Seja
(
h(n)/f (n) se f (n) 6= 0
0
g (n) =
cg(n)
caso contrario
Verifique-se que h = f g 0 por an
alise de casos. Com isso, temos tambem
g 0 = h/f cf g/f = cg nos casos f (n) 6= 0 e g 0 = cg cg caso contrario. 
As mesmas caractersticas s
ao verdadeiras para (prova? veja exerccio 1.1).
E para o, e ?
Caractersticas
f = O(h) g = O(h) f + g = O(h)
g = O(f ) f + g = (f )
A segunda caracterstica se chama princpio de absorcao [27, p. 35].

24

1.1. Notacao assintotica


Relac
oes de crescimento A motivac
ao pela notac
ao O e o seu uso no meio
de f
ormulas. Para os casos em que isso n
ao for necessario, podemos introduzir
relacoes de crescimento entre func
oes com uma notacao mais comum. Uma
definicao natural e
Relac
oes de crescimento
Defini
c
ao 1.1 (Rela
c
oes de crescimento)

f g f o(g)
f  g f O(g)

(1.16)
(1.17)

f  g f (g)

(1.18)

f  g f (g)
f  g f (g)

(1.19)
(1.20)

Essas relac
oes tambem s
ao conhecidas como a notacao de Vinogradov. Uma
variante comum dessa notac
ao usa  para  e  para  (infelizmente a
notac
ao nessa
area n
ao e muito padronizada.)
Caso f  g digamos as vezes f e absorvido pela g. Essas relacoes satisfazem
as caractersticas b
asicas esperadas.
Caractersticas das relac
oes de crescimento
Proposi
c
ao 1.3 (Caractersticas das rela
c
oes de crescimento)
Sobre o conjunto de func
oes [N R+ ]
1. f  g g  f ,
2.  e  s
ao ordenac
oes parciais (reflexivas, transitivas e anti-simetricas
em relac
ao de ),
3. f g g  f ,
4. e  s
ao transitivas,
5.  e uma relac
ao de equivalencia.
Prova.

25

1. Introduc
ao e conceitos b
asicos
1. Temos as equivalencias
f  g f O(g)
c n0 n > n0 f cg
c0 n0 n > n0 g c0 f

com c0 = 1/c

g (f )
2. A reflexividade e transitividade s
ao f
aceis de verificar. No exemplo do
, f  f , porque nf (n) f (n) e f  g, g  h garante que a partir de
um n0 temos f cg e g c0 h e logo f (cc0 )h tambem. Caso f  g e
g  f temos com item (a) f  g e logo f  g pela definicao de .
3. Temos as equivalencias
f g f o(g)
c n0 n > n0 f cg
c0 n0 n > n0 g c0 f

com c0 = 1/c

g (f )
4. O argumento e essencialmente o mesmo que no item (a).
5. Como e definido pela intersecc
ao de O e , a sua reflexividade e
transitividade e uma conseq
uencia da reflexividade e transitividade do
O e . A simetria e uma conseq
uencia direta do item (a).

Observe que esses resultados podem ser traduzidos para a notacao O. Por
exemplo, como  e uma relac
ao de equivalencia, sabemos que tambem
satisfaz
f (f )
f (g) g (f )
f (g) g (h) f (h)
A notac
ao com relac
oes e sugestiva e freq
uentemente mais facil de usar, mas
nem todas as identidades que ela sugere s
ao validas, como a seguinte proposic
ao mostra.
Identidades falsas das relac
oes de crescimento

26

1.2. Notas
Proposi
c
ao 1.4 (Identidades falsas das rela
c
oes de crescimento)
verdadeiro que
E
f  g f 6 g

(1.21)

f g f 6 g

(1.22)

mas as seguintes afirmac


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

(Tricotomia)

Prova. Prova de 1.21 e 1.22: Suponha f  g e f  g. Entao existe um c


tal que a partir de um n0 temos que f = cg (usa as definicoes). Mas entao
f 6 g e uma contradic
ao. A segunda caracterstica pode ser provada com um
argumento semelhante.
Para provar as tres afirmac
oes restantes considere o par de funcoes n e en sin(n) .
Verifique-se que nenhuma relac
ao , , ,  ou  e verdadeira.

Considerando essas caractersticas, a notac
ao tem que ser usada com cautela. Uma outra abordagem e definir O etc. diferente, tal que outras relacoes
acima s
ao verdadeiras. Mas parece que isso n
ao e possvel, sem perder outras,
veja [29].
Outras notac
oes comuns
Defini
c
ao 1.2
O logaritmo iterado e
(
0
se n 1
log n =

1 + log (log n) caso contrario


O logaritmo iterado e uma func
ao que cresce extremamente lento; para valores
pr
aticos de n, log n n
ao ultrapassa 5.

1.2. Notas
Alan Turing provou em 1936 que o problema de parada nao e decidvel.
O estudo da complexidade de algoritmos comecou com o artigo seminal de
Hartmanis e Stearns [12].

27

1. Introduc
ao e conceitos b
asicos

1.3. Exerccios
(Soluc
oes a partir da p
agina 221.)
Exerccio 1.1
Prove as caractersticas 1.10 ate 1.15 (ou caractersticas equivalentes caso alguma n
ao se aplica) para .
Exerccio 1.2
Prove ou mostre um contra-exemplo. Para qualquer constante c R, c > 0
f O(g) f + c O(g)

(1.23)

Exerccio 1.3
Prove ou mostre um contra-exemplo.
1. log(1 + n) = O(log n)
2. log O(n2 ) = O(log n)
3. log log n = O(log n)
Exerccio 1.4
Considere a func
ao definido pela recorrencia
fn = 2fn1 ;

f0 = 1.

Professor Veloz afirme que fn = O(n), e que isso pode ser verificado simplesmente da forma
fn = 2fn1 = 2O(n 1) = 2O(n) = O(n)
Mas sabendo que a soluc
ao dessa recorrencia e fn = 2n temos d
uvidas que
n
2 = O(n). Qual o erro do professor Veloz?
Exerccio 1.5
Mostre que a definic
ao
o(g(n)) = {f : N R+ |(c > 0)n0 (n > n0 ) : f (n) < cg(n)}
(denotado com o para diferenciar da definic
ao o) e equivalente com a definicao
1.2 para func
oes g(n) que s
ao diferente de 0 a partir de um n0 .

28

1.3. Exerccios
Exerccio 1.6
Mostre que o n
umeros Fibonacci
(
n
fn =
fn2 + fn1

se 0 n 1
se n 2

tem ordem assint


otica fn (n ) com = (1 +

5)/2.

Exerccio 1.7
Prove a seguinte variac
ao do princpio de absorc
ao:
g o(f ) f g (f ).
Exerccio 1.8
Prove que
f g O(f ) = O(g).
Exerccio 1.9
Prove que (f ) = O(f ), mas o contr
ario O(f ) = (f ) nao e correto.

29

2. An
alise de complexidade
2.1. Introduc
ao
Para analisar a eficiencia de algoritmos faz pouco sentido medir os recursos gastos em computadores especficos, porque devido a diferentes conjuntos
de instruc
oes, arquiteturas e desempenho dos processadores, as medidas sao
difceis de comparar. Portanto, usamos um modelo de uma maquina que reflita as caractersticas de computadores comuns, mas e independente de uma
implementac
ao concreta. Um modelo comum e a m
aquina de RAM com as
seguintes caractersticas:
um processador com um ou mais registros, e com apontador de instruc
oes,
um mem
oria e
um conjunto de instruc
oes fundamentais que podem ser executadas em
tempo O(1) (por exemplo func
oes b
asicas sobre n
umeros inteiros e de
ponto flutuante, acesso `
a mem
oria e transferencia de dados); essas operacoes
refletem operac
oes tpicas de m
aquinas concretas.
Observe que a escolha de um modelo abstrato n
ao e totalmente trivial. Conhecemos v
arios modelos de computadores, cuja poder computacional nao e equivalente em termos de complexidade (que n
ao viola a tese de Church-Turing).
Mas todos os modelos encontrados (fora da computacao quantica) sao polinomialmente equivalentes, e portanto, a noc
ao de eficiencia fica a mesma. A
tese que todos modelos computacionais s
ao polinomialmente equivalentes as
vezes est
a chamado tese de Church-Turing estendida.
O plano
Uma hierarquia de abstrac
oes:
Tempo de
execuc
ao [s]

umero de
/N
operac
oes

oes no
/ Operac
caso pessimista

Complexidade
/ pessimista
assintotica

Custos de execuc
oes
Seja E o conjunto de seq
uencias de operac
oes fundamentais.

31

2. An
alise de complexidade
Para um algoritmo a, com entradas D seja
exec[a] : D E
a func
ao que fornece a seq
uencia de instrucoes executadas exec[a](d)
para cada entrada d D.
Se atribumos custos para cada operac
ao basica, podemos calcular tambem
o custo de uma execuc
ao
custo : E R+
e o custo da execuc
ao do algoritmo a depende da entrada d
desemp[a] : D R+ = custo exec[a]
Defini
c
ao 2.1
O smbolo denota a composic
ao de func
oes tal que
(f g)(n) = f (g(n))
(leia: f depois g).
Em geral, n
ao interessam os custos especficos para cada entrada, mas o comportamento do algoritmo. Uma medida natural e como os custos crescem com
o tamanho da entrada.
Condensac
ao de custos
Queremos condensar os custos para uma u
nica medida.
Essa medida depende somente do tamanho da entrada
tam : D N
O objetivo e definir uma func
ao
aval[a](n) : N R+
que define o desempenho do algoritmo em relacao ao tamanho.
Como, em geral, tem v
arias entradas d tal que tam(d) = n temos que
definir como condensar a informac
ao de desemp[a](d) delas.
Observe que as vezes R+ e denotado R+ .

32

2.1. Introducao
Condensac
ao
Entrada

?>=<
89:;
@ABC
D desemp/ GFED
R+
O
tam

Tamanho


?>=<
89:;
N

aval


@ABC
/ GFED
R+

Custo da instancia

Custo com tamanho n

Condensac
ao
Na pr
atica, duas medidas condensadas s
ao de interesse particular
A complexidade pessimista
Cp= [a](n) = max{desemp[a](d) | d D, tam(d) = n}
A complexidade media
Cm [a](n) =

P (d) desemp[a](d)

tam(d)=n

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


entradas com tamanho n.
Ela e baseada na distribuic
ao das entradas.
A complexidade media e menos usada na pr
atica, por varias razoes. Primeiramente, uma complexidade pessimista significa um desempenho garantido,
independente da entrada. Em comparac
ao, uma complexidade media de, por
exemplo, O(n2 ), n
ao exclui que em certos casos uma entrada com tamanho
n precisa muito mais tempo. Por isso, se e importante saber quando uma
execucao de um algoritmo termina, preferimos a complexidade pessimista.
Mesmo assim, para v
arios algoritmos com desempenho ruim no pior caso, estamos interessados como eles se comportam na media (complexidade media).
Infelizmente, ela e difcil de determinar. Alem disso, ela depende da distribuic
ao das entradas, que freq
uentemente n
ao e conhecida ou difcil de determinar, ou e diferente em aplicac
oes diferentes.
Definic
ao alternativa
A complexidade pessimista e definida como
Cp= [a](n) = max{desemp[a](d) | d D, tam(d) = n}

33

2. An
alise de complexidade
Uma definic
ao alternativa e
Cp [a](n) = max{desemp[a](d) | d D, tam(d) n}
Cp e monot
onica e temos
Cp= [a](n) Cp [a](n)
Caso Cp= seja monot
onica as definic
oes sao equivalentes
Cp= [a](n) = Cp [a](n)
Cp= [a](n) Cp [a](n) e uma conseq
uencia da observacao que
{desemp[a](d) | d D, tam(d) = n} {desemp[a](d) | d D, tam(d) n}
Analogamente, se A B tem-se que max A max B.
Exemplo 2.1
Vamos aplicar essas noc
oes num exemplo de um algoritmo simples. O objetivo
e decidir se uma seq
uencia de n
umeros naturais contem o n
umero 1.
Busca1
Entrada Uma seq
uencia a1 , . . . , an de n
umeros em N.
Sada True, caso existe um i tal que ai = 1, false, caso contrario.
1 f o r i :=1 t o n do
2
i f ( ai = 1 ) then
3
return t r u e
4
end i f
5 end f o r
6 return f a l s e

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


O = {f or, if, return} e atribuir um custo constante de 1 para cada um delas. (Observe que como operac
ao b
asica for sao consideradas as operacoes
de atribuic
ao, incremento e teste da expressao booleana i n.) Logo as
execuc
oes possveis s
ao E = O (o fecho de Kleene de O) e temos a funcao de
custos

34

2.2. Complexidade pessimista

custo : E R+ : e 7 |e|.
Por exemplo custo((f or, f or, if, return)) = 4. As entradas desse algoritmo sao
seq
uencias de n
umeros naturais, logo, D = N e como tamanho da entrada
escolhemos
tam : D N : (a1 , . . . , an ) 7 n.
A funcao de execuc
ao atribui a seq
uencia de operacoes executadas a qualquer
entrada. Temos
exec[Busca1](d) : D E :
(
(f or, if )i return
(a1 , . . . , an ) 7
(f or, if )n return

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


caso contrario

Com essas definic


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

2.2. Complexidade pessimista


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

35

2. An
alise de complexidade
1. Atribuic
ao: v:=e
2. Seq
uencia: c1;c2
3. Condicional: se b ent
ao c1 sen
ao c2
4. Iterac
ao definida: para i de j ate m faca c
5. Iterac
ao indefinida: enquanto b faca c
A forma se b ent
ao c1 vamos tratar como abreviacao de se b entao c1 else skip
com comando skip de custo 0.
Observe que a metodologia n
ao implica que tem um algoritmo que, dado um
algoritmo como entrada, computa a complexidade dele. Este problema nao e
comput
avel (por que?).
Conven
c
ao 2.1
A seguir vamos entender implicitamente todas operacoes sobre funcoes pontualmente, i.e. para alguma operac
ao , e funcoes f, g com dom(f ) = dom(g)
temos
d dom(f ) (f g) = f (d) g(d).
Componentes
A complexidade de um algoritmo pode ser analisada em termos de suas
componentes (princpio de composicionalidade).
Pode-se diferenciar dois tipos de componentes: componentes conjuntivas
e componentes disjuntivas.
Objetivo: Analisar as componentes independentemente (como sub-algoritmos)
a depois compor as complexidades delas.

Composic
ao de componentes
Cautela: Na composic
ao de componentes o tamanho da entrada pode
mudar.
Exemplo: Suponha que um algoritmo A produz, a partir de uma lista de
tamanho n, uma lista de tamanho n2 em tempo (n2 ).
A seq
uencia A; A, mesmo sendo composta pelos dois algoritmos com
(n2 ) individualmente, tem complexidade (n4 ).
Portanto, vamos diferencar entre

36

2.2. Complexidade pessimista


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

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


d

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




Exemplo 2.2
Considere a seq
uencia S v := ordena(u); w := soma(u) com complexidades
cp [v := ordena(u)](n) = n2 e cp [w := soma(u)](n) = n. Entao cp [S] =
(n2 + n) = (n2 ).

37

2. An
alise de complexidade
Exemplo 2.3
Considere uma partic
ao das entradas do tamanho n tal que {d D|tam(d) =
.
n} = D1 (n) D2 (n) e dois algoritmos A1 e A2 , A1 precisa n passos para
inst
ancias em D1 , e n2 para inst
ancias em D2 . A2 , contrariamente, precisa n2
para inst
ancias em D1 , e n passos para inst
ancias em D2 . Com isso obtemos
cp [A1 ] = n2 ;

cp [A2 ] = n2 ;

cp [A1 ; A2 ] = n2 + n

e portanto
max(cp [A1 ], cp [A2 ]) = n2 < cp [A1 ; A2 ] = n2 + n < cp [A1 ] + cp [A2 ] = 2n2

A atribuic
ao: Exemplos
Considere os seguintes exemplos.
Inicializacao ou transferencia da vari
aveis inteiras tem complexidade
O(1)
i := 0;
j := i
Determinar o m
aximo de uma lista de elementos v tem complexidade
O(n)
m := max(v)
Invers
ao de uma lista u e atribuic
ao para w tem complexidade 2n O(n)
w := reversa(u)
A atribuic
ao
Logo, a atribuic
ao depende dos custos para a avaliacao do lado direito
e da atribuic
ao, i.e.
desemp[v := e] = desemp[e] + desemp[e ]
Ela se comporta como uma seq
uencia dessas duas componentes, portanto
cp [v := e] = (cp [e] + cp [e ])
Freq
uentemente cp [e ] e absorvida pelo cp [e] e temos
cp [v := e] = (cp [e])

38

2.2. Complexidade pessimista


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

Iterac
ao definida
Seja C =para i de j ate m faca c
O n
umero de iterac
oes e fixo, mas j e m dependem da entrada d.
Seja N (n) = max{m(d) j(d) + 1|tam(d) n} e N (n) = {N (n), 0}.
N (n) e o m
aximo de iterac
oes para entradas de tamanho ate n.
Tendo N , podemos tratar a iterac
ao definida como uma seq
uencia
c; c; ; c
| {z }
N (n)vezes

que resulta em
cp [C] N cp [c]
Iterac
ao indefinida
Seja C =enquanto b faca c
Para determinar a complexidade temos que saber o n
umero de iteracoes.
Seja H(d) o n
umero da iterac
ao (a partir de 1) em que a condicao e falsa
pela primeira vez
e h(n) = max{H(d)|tam(d) n} o n
umero maximo de iteracoes com
entradas ate tamanho n.
Em analogia com a iterac
ao definida temos uma seq
uencia
b; c; b; c; ; b; c; b
|
{z
}
h(n)1vezes

e portanto
cp [C] (h 1)cp [c] + hcp [b]
Caso o teste b e absorvido pelo escopo c temos
cp [C] (h 1)cp [c]
Observe que pode ser difcil de determinar o n
umero de iteracoes H(d); em
geral a quest
ao n
ao e decidvel.

39

2. An
alise de complexidade
Componentes disjuntivas
Componentes disjuntivas
Suponha um algoritmo c que consiste em duas componentes disjuntivas
c1 e c2 . Logo,
desemp[c] max(desemp[c1 ], desemp[c2 ])
e temos
cp [a] max(cp [c1 ], cp [c2 ])
Caso a express
ao para o m
aximo de duas funcoes for difcil, podemos simplificar
cp [a] max(cp [c1 ], cp [c2 ]) = O(max(cp [c1 ], cp [c2 ])).
O condicional
Seja C =se b ent
ao c1 sen
ao c2
O condicional consiste em
uma avaliac
ao da condic
ao b
uma avaliac
ao do comando c1 ou c2 (componentes disjuntivas).
Aplicando as regras para componentes conjuntivas e disjuntivas obtemos
cp [C] cp [b] + max(cp [c1 ], cp [c2 ])
Para se b ent
ao c1 obtemos com cp [skip] = 0
cp [C] cp [b] + cp [c1 ]
Exemplo 2.5
Considere um algoritmo a que, dependendo do primeiro elemento de uma lista
u, ordena a lista ou determina seu somat
orio:

40

2.2. Complexidade pessimista


Exemplo
1
2
3
4

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

2.2.2. Exemplos
Exemplo 2.6 (Bubblesort)
Nesse exemplo vamos estudar o algoritmo Bubblesort de ordenacao.
Bubblesort
Bubblesort
Entrada Uma seq
uencia a1 , . . . , an de n
umeros inteiros.
Sada Uma seq
uencia a(1) , . . . , a(n) de n
umeros inteiros tal que e uma
permutac
ao de [1, n] e para i < j temos a(i) a(j) .
1 f o r i :=1 t o n
2
f o r j :=1 t o n i
3
i f aj > aj+1 then
4
swap aj , aj+1
5
end i f
6
end f o r
7 end f o r

41

2. An
alise de complexidade
Bubblesort: Complexidade
A medida comum para algoritmos de ordenacao: o n
umero de comparac
oes (de chaves).
Qual a complexidade pessimista?
X
X

1 = n/2(n 1).

1in 1jni

Qual a diferenca se contamos as transposicoes tambem?

Exemplo 2.7 (Ordena


c
ao por inser
c
ao direta)

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

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


elemento auxiliar a0 = .)

42

2.2. Complexidade pessimista


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

2in

Exemplo 2.8 (M
aximo)
(Veja [27, cap. 3.3]).
M
aximo
ximo
Ma
Entrada Uma seq
uencia de n
umeros a1 , . . . , an com n > 0.
Sada O m
aximo m = maxi ai .
1 m := a1
2 f o r i := 2, . . . , n do
3
i f ai > m then
4
m := ai
5
end i f
6 end f o r
7 return m

Para a an
alise supomos que toda operac
ao b
asica (atribuicao, comparacao,
aritmetica) tem um custo constante. Podemos obter uma cota superior simples
de O(n) observando que o laco sempre executa um n
umero fixo de operacoes
(ao m
aximo dois no corpo). Para uma an
alise mais detalhada vamos denotar
o custo em n
umeros de operac
oes de cada linha como li e supomos que toda
operac
ao b
asico custa 1 e a linha 2 do laco custa dois (l2 = 2, para fazer um
teste e um incremento), ent
ao temos
l1 + (n 1)(l2 + l3 ) + kl4 + l7 = 3n + k 1
com um n
umero de execuc
oes da linha 4 ainda n
ao conhecido k. No melhor
caso temos k = 0 e custos de 3n 1. No pior caso m = n 1 e custos de
f
4n 2. E
acil ver que assintoticamente todos os casos, inclusive o caso medio,
tem custo (n).

Exemplo 2.9 (Busca seq


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

43

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

Busca seq
uencial
Fora do laco nas linhas 15 temos uma contribuicao constante.
Caso a seq
uencia n
ao contem a chave c, temos que fazer n iteracoes.
Logo temos complexidade pessimista (n).

Counting-Sort
Counting-Sort
Entrada Um inteiro k, uma seq
uencia de n
umeros a1 , . . . , an e uma seq
uencia
de contadores c1 , . . . , cn .
Sada Uma seq
uencia ordenada de n
umeros b1 , . . . , bn .
1
2
3
4
5
6

44

f o r i := 1, . . . , k do
ci := 0
end f o r
f o r i := 1, . . . , n do
cai := cai + 1
end f o r

2.2. Complexidade pessimista

7
8
9
10
11
12
13
14

f o r i := 2, . . . , k do
ci := ci + ci1
end f o r
f o r i := n, . . . , 1 do
bcai := ai
cai := cai 1
end f o r
return b1 , . . . , bn

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

Exemplo 2.10 (Busca Bin


aria)

Busca Bin
aria

45

2. An
alise de complexidade

ria
Busca Bina
Entrada Um inteiro x e uma seq
uencia S = a1 , a2 , . . . an de n
umeros
ordenados.
Sada Posic
ao i em que x se encontra na seq
uencia S ou 1 caso x
/ S.
1
2
3
4
5
6
7
8

i := 1
f := n
k
j
+i
m := f i
2
while i f do
i f am = x then return m
i f am < x then f := m 1
e l s e ji := m + 1
k
m := f i
+i
2

9 end while
10 return 1

A busca bin
aria e usada para encontrar um dado elemento numa seq
uencia
ordenada de n
umeros com gaps. Ex: 3,4,7,12,14,18,27,31,32...n. Se os n
umeros
n
ao estiverem ordenados um algoritmo linear resolveria o problema, e no caso
de n
umeros ordenados e sem gaps (nenhum n
umero faltante na seq
uencia, um
algoritmo constante pode resolver o problema. No caso da busca binaria, o
pior caso acontece quando o u
ltimo elemento que for analisado e o procurado.
Neste caso a seq
uencia de dados e dividida pela metade ate o termino da
busca, ou seja, no m
aximo log2 n = x vezes, ou seja 2x = n. Neste caso
log2 n

Cp [a] = =

i=1

= O(log2 n)

Exemplo 2.11 (Busca em Largura)

46

2.2. Complexidade pessimista


Busca em Largura
Busca em Largura
Entrada Um n
o origem s e um grafo direcionado estruturado como uma seq
u
encia das listas
de adjac
encias de seus n
os.
Sada Posi
c
ao i vetor de dist
ancias (n
umero de arcos) de cada n
o ao origem.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

f o r cada v
e r t i c e u V {s} do
cu :=BRANCO
du =
end f o r
cs :=CINZA
ds := 0
Q :=
Enqueue (Q, s )
while Q 6=
u := Dequeue (Q)
f o r cada v Adj(u)
i f cv =BRANCO
then cv =CINZA
dv = du + 1
Enqueue (Q, v )
end i f
end f o r
cu =PRETO
end while

Este algoritmo, bem como sua an


alise, est
ao disponveis no livro do Cormen [7]. O laco while (linhas 9-19) ser
a executado no maximo |V | vezes, ou
seja, para cada n
o do grafo. J
a o laco for (linhas 11-17) executara du vezes,
o u. Desta forma, os dois lacos executarao |E|
sendo du o grau de sada do n
vezes (este tipo de analise se chama de an
alise agregada). Como o primeiro
laco for do algoritmo tem complexidade O(|V |), entao a complexidade total
do algoritmo ser
a O(|V | + |M |.

Exerccios sobre Ordens assint


oticas
(Exerccio Adicional 2.9) Suponha que f e g sao funcoes polinomiais e
N em N: f (n) (nr ) e g(n) (ns ). O que se pode afirmar sobre a
func
ao composta g(f (n))?
(Exerccio adicional 2.3.e) Classifique as funcoes f (n) = 5 2n + 3 e
g(n) = 3 n2 + 5 n como f O(g), f (g) ou f (g).
Verifique se 2n n (2n ) e se 2n+1 (2n ).

47

2. An
alise de complexidade
Exemplo 2.12 (Multiplica
c
ao de matrizes)
O algoritmo padr
ao da computar o produto C = AB de matrizes (de tamanho
m n, n o) segue diretamente a definic
ao
cik =

aij bjk

1 i m; 1 k o

1jn

e resulta na implementac
ao

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

No total, precisamos mno(M +A) operac


oes, com M denotando multiplicacoes
costume estudar a complexidade no caso n = m = o e somente
e A adic
oes. E
considerar as multiplicac
oes, tal que temos uma entrada de tamanho (n2 ) e
(n3 ) operac
oes1 .
Esse algoritmo n
ao e o melhor possvel: Temos o algoritmo de Strassen que
precisa somente nlog2 7 n2.807 multiplicac
oes (o algoritmo esta detalhado
no captulo 6.3) e o algoritmo de Coppersmith-Winograd com n2.376 multiplicac
oes [6]. Ambas s
ao pouco usadas na pr
atica porque o desempenho real
e melhor somente para n grande (no caso de Strassen n 700; no caso de
Coppersmith-Winograd o algoritmo n
ao e praticavel). A conjetura atual e
que existe um algoritmo (
otimo) de O(n2 ).

1 Tamb
em

e de costume contar as operac


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

48

2.3. Complexidade media

2.3. Complexidade m
edia
Nesse captulo, vamos estudar algumas tecnicas de analise da complexidade
media.
Motivac
ao
A complexidade pessimista e pessimista demais?
Imagin
avel: poucos (ou irrelevantes) inst
ancias aumentam ela artificialmente.
Isso motiva a estudar a complexidade media.
Para tamanho n, vamos considerar

O espaco amostral Dn = {d D| tam(d) = n}


Uma distribuic
ao de probabilidade Pr sobre Dn
A vari
avel aleat
oria desemp[a]
O custo medio
X
Cm [a](n) = E[desemp[a]] =
P (d) desemp[a](d)
dDn

Tratabilidade?
Esperanca: Problemas intrat
aveis viram trat
avel?
Exemplos de tempo esperado:
Caminho Hamiltoniano: linear!
o-determinstico em k passos: fica NP-completo.
Parada na
(Resultados citados: [11, 9] (Caminho Hamiltanio), [31] (Parada em k passos).)
Criptografia
Criptografia somente e possvel se existem funcoes u
nica (ingles: oneway functions).
Uma func
ao sem sada f : {0, 1} {0, 1} e tal que
dado x, computar f (x) e f
acil (eficiente)
0
dada f (x) achar um x tal que f (x0 ) = f (x) e difcil

49

2. An
alise de complexidade
M
etodo

(Vitter, Flajolet, [30])

Exemplo 2.13 (Busca seq


uencial)
(Continuando exemplo 2.9.)
Busca seq
uencial
Caso a chave fica na i-esima posic
ao, temos que fazer i iteracoes.
Supondo uma distribuic
ao uniforme da posicao da chave na seq
uencia,
temos

X
1
n+
i
n+1
1in

iterac
oes e uma complexidade media de (n).

Exemplo 2.14
(Continuando o exemplo 2.1.)
Seja n um tamanho fixo. Para Busca1 temos o espaco amostral Dn =
{(a1 , . . . , an )|a1 1, . . . , an 1}. Para a analise da complexidade media,
qual seria uma distribuic
ao adequada das entradas? Observe que isso nao

50

2.3. Complexidade media


e totalmente trivial, porque temos um conjunto infinito de n
umeros naturais. Qual seria uma distribuic
ao realstica? Parece natural que na pratica
n
umeros maiores s
ao menos prov
aveis. Logo escolhemos um processo tal que
cada elemento da seq
uencia e gerado independentemente
com a probabilidade
P
Pr[ai = n] = 2n (que e possvel porque 1i 2i = 1).
Com isso temos
Y
Pr[(a1 , . . . , an )] =
2ai
1in

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


desemp[a] e
(
se o primeira 1 e na posicao
p=
n caso contr
ario
Temos desemp[a] = 2p + 1 (veja os resultados do exemplo 2.1). Para i ser a
primeira posic
ao com elemento 1 as posic
oes 1, . . . , i 1 devem ser diferente
de 1, e ai deve ser 1. Logo para 1 i < n
Pr[p = i] = Pr[a1 6= 1] Pr[ai1 6= 1] Pr[ai = 1] = 2i .
O caso p = n tem duas causas: ou a posic
ao do primeiro 1 e n ou a seq
uencia
n
ao contem 1. Ambas tem probabilidade 2n e logo Pr[p = n] = 21n .
A complexidade media calcula-se como
cp [a](n) = E[desemp[a]] = E[2p + 1] = 2E[p] + 1
X
X
E[p] =
Pr[p = i]i = 2n n +
2n n
i0
n

=2

1in
n

n+22
2n

cp [a](n) = 5 2

(n + 2) = 2 21n

(A.34)

= O(1)

A seguinte tabela mostra os custos medios para 1 n 9


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

Exemplo 2.15 (Ordena


c
ao por inser
c
ao direta)
(Continuando exemplo 2.7.)
Ordenac
ao por inserc
ao direta
Qual o n
umero medio de comparac
oes?

51

2. An
alise de complexidade
Observac
ao: Com as entradas distribudas uniformemente, a posicao da
chave i na seq
uencia j
a ordenada tambem e.
Logo chave i precisa
X

j/i =

1ji

i+1
2

comparac
oes em media.
Logo o n
umero esperado de comparac
oes e


X i+1
1 X
1 (n + 1)(n + 2)
=
i=
3 = (n2 )
2
2
2
2
2in

3in+1

Exemplo 2.16 (Bubblesort)


(Continuando exemplo 2.6.)
O n
umero de comparac
oes de Bubblesort e independente da entrada. Logo,
com essa operac
ao b
asica temos uma complexidade pessimista e media de
(n).
Bubblesort: Transposic
oes
Qual o n
umero de transposic
oes em media?

Complexidade de Bubblesort
30000

25000

# de entradas

20000

15000

10000

5000

52

10

15

20
Compara es

25

30

35

40

2.3. Complexidade media


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

Exemplos

tal que

Permutac
ao
123
132
213
231
312
321

ai > aj .

#Invers
oes
0
1
1
2
2
3

Freq
uentemente o n
umero de invers
oes facilite a analise de algoritmos
de ordenac
ao.
Em particular para algoritmos com transposicoes de elementos adjacentes:
#Transposic
oes = # Inversoes

N
umero m
edio de transposic
oes
Considere o conjunto de todas permutac
oes Sn sobre [1, n].
Denota com inv() o n
umero de invers
oes de uma permutacao.
Para cada permutac
ao existe uma permutac
ao correspondente com
ordem inversa:
35124;
42153
Cada invers
ao em n
ao e invers
ao em e vice versa:
inv() + inv( ) = n(n 1)/2.

53

2. An
alise de complexidade
N
umero m
edio de transposic
oes
O n
umero medio de invers
oes e
!
1/n!

inv() = 1/(2n!)

Sn

inv() +

Sn

Sn

inv()
!

= 1/(2n!)

inv() +

Sn

inv( )

Sn

!
= 1/(2n!)

inv() + inv( )

Sn

!
= 1/(2n!)

n(n 1)/2

Sn

= n(n 1)/4
Logo, a complexidade media (de transposicoes) e (n2 ).

Exemplo 2.17 (M
aximo)
(Continuando exemplo 2.8.)
Queremos analisar o n
umero medio de atribuicoes na determinacao do maximo,
i.e. o n
umero de atualizac
oes do m
aximo.
M
aximo
ximo?
Qual o n
umero esperado de atualizac
oes no algoritmo Ma
Para uma permutac
ao considere a tabela de invers
oes b1 , . . . , bn .
bi e o n
umero de elementos na esquerda de i que sao maiores que i.
Exemplo: Para 53142

b1
2

b2
3

Os bi obedecem 0 bi n i.

54

b3
1

b4
1

b5
1

2.3. Complexidade media


Tabelas de invers
oes
Observac
ao: Cada tabela de invers
oes corresponde com uma permutacao
e vice versa.
Exemplo: A permutac
ao correspondente com

b1
3

b2
1

b3
2

b4
1

b5
0

Vantagem para a an
alise: Podemos escolher os bi independentemente.
Observac
ao, na busca do m
aximo i e m
aximo local se todos n
umeros no
seu esquerdo s
ao menores, i.e. se todos n
umeros que sao maiores sao no
seu direito, i.e. se bi = 0.

N
umero esperado de atualizac
oes
Seja Xi a vari
avel aleat
oria Xi = [i e m
aximo local].
Temos Pr[Xi = 1] = Pr[bi = 0] = 1/(n i + 1).
O n
umero de m
aximos locais e X =

1in

Xi .

Portanto, o n
umero esperado de m
aximos locais e

E[X] = E

Xi =

1in

X
1in

Pr[Xi ] =

E[Xi ]

1in

X
1in

X 1
1
=
= Hn
ni+1
i
1in

Contando atualizac
oes: tem uma a menos que os maximos locais Hn 1.

Exemplo 2.18 (Quicksort)


Nessa sec
ao vamos analisar e Quicksort, um algoritmo de ordenacao que foi
inventado pelo C.A.R. Hoare em 1960 [14].

55

2. An
alise de complexidade
Quicksort
Exemplo: o metodo Quicksort de ordenacao por comparacao.
Quicksort usa divis
ao e conquista.
Ideia:
Escolhe um elemento (chamado pivo).
Divide: Particione o vetor em elementos menores que o pivo e
maiores que o piv
o.
Conquiste: Ordene as duas partic
oes recursivamente.

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

e s c o l h e um p i v
o ap
t r o c a ap e ar
i := l 1 { u
ltimo ndice menor que piv
o }
f o r j := l t o r 1 do
i f aj ar then
i := i +1
t r o c a ai e aj
end i f
end f o r
t r o c a ai+1 e ar
return i + 1

Escolher o piv
o
Partition combina os primeiros dois passos do Quicksort..
Operac
oes relevantes: N
umero de comparac
oes entre chaves!

56

2.3. Complexidade media


O desempenho de Partition depende da escolha do pivo.
Dois exemplos
Escolhe o primeiro elemento.
Escolhe o maior dos primeiros dois elementos.
Vamos usar a segunda opc
ao.
Complexidade de particionar

O tamanho da entrada e n = r l + 1
Dependendo da escolha do piv
o: precisa nenhuma ou uma comparacao.
O laco nas linhas 49 tem n 1 iterac
oes.
O trabalho no corpo do laco e 1 = (1) (uma comparacao)
Portanto temos a complexidade pessimista
cp [Partition] = n 1 = n = (n)
cp [Partition] = n 1 + 1 = n = (n).
Quicksort
Quicksort
Entrada Indices l, r e um vetor a com elementos al , . . . , ar .
Sada a com os elementos em ordem n
ao-decrescente, i.e. para i < j temos
ai aj .
1 i f l < r then
2
m := P a r t i t i o n ( l , r , a ) ;
3
Quicksort (l ,m 1 ,a ) ;
4
Quicksort (m + 1 ,r ,a ) ;
5 end i f

57

2. An
alise de complexidade

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


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

se l r

Complexidade pessimista
Qual a complexidade pessimista?
Para entrada d = (a1 , . . . , an ), sejam dl = (al , . . . , am1 ) e dr = (am+1 , . . . , ar )
cp [QS](n) = max desemp[P ](d) + desemp[QS](dl ) + desemp[QS](dr )
dDn

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


dDn

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


1in

cp [QS](0) = cp [QS](1) = 0
Esse an
alise e v
alido para escolha do maior entre os dois primeiros elementos
como piv
o. Tambem vamos
ltimo passo na analise acima com
S justificar o u
mais detalhes. Seja Dn = i Dni uma partic
ao das entradas com tamanho n
tal que para d Dni temos |dl |= i 1 (e conseq
uentemente |dr |= n i).
Ent
ao
max desemp[QS](dl ) + desemp[QS](dr )

dDn

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


1in dDn

separando Dn

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


1in dDn

eou
ltimo passo e justificado, porque a particao de uma permutacao aleatoria
gera duas partic
oes aleat
orias, e existe uma entrada d em que as duas subpartic
oes assumem o m
aximo. Para determinar o maximo da u
ltima expressao,
podemos observar que ele deve ocorrer no ndice i = 1 ou i = bn/2c (porque
f (i) = cp [QS](i 1) + cp [QS](n i) e simetrico com eixo de simetria i = n/2).

58

2.3. Complexidade media


Complexidade pessimista
O m
aximo ocorre para i = 1 ou i = n/2
Caso i = 1
cp [QS](n) = n + cp [QS](0) + cp [QS](n 1) = n + cp [QS](n 1)
X
= =
(i 1) = (n2 )
1in

Caso i = n/2
cp [QS](n) = n + 2cp [QS](n/2) = n 1 + 2((n 1)/2 + cp (n/4))
= = (n log2 n)
Logo, no caso pior, Quicksort precisa (n2 ) comparacoes.
No caso bem balanceado: (n log2 n) comparacoes.
Complexidade m
edia
Seja X a vari
avel aleat
oria que denota a posicao (ingles: rank) do pivo
am na seq
uencia.
Vamos supor que todos elementos ai s
ao diferentes (e, sem perda da
generalidade, uma permutac
ao de [1, n]).

cm [QS] =

Pr[d] desemp[QS](d)

dDn

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

dDn

=n+

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

dDn

=n+

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

1in

59

2. An
alise de complexidade
Novamente, o u
ltimo passo e o mais difcil de justificar. A mesma particao
que aplicamos acima leva a
X

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

dDn

X X

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

i
1in dDn

X
1in

1 X
(desemp[QS](dl ) + desemp[QS](dr ))
|D|
i
dDn

X |Di |
n
(cm [QS](i 1) + cm [QS](n i))
=
|D|
1in
X
=
Pr[X = i](cm [QS](i 1) + cm [QS](n i))
1in

e o pen
ultimo passo e correto, porque a media do desempenho as permutacoes
oes com i 1 e n i, respectivamente:
dl e dr e a mesma que sobre as permutac
toda permutac
ao ocorre com a mesma probabilidade e o mesmo n
umero de
vezes (para mais detalhes veja [18, p. 119]).
Se denotamos o desempenho com Tn = cp [QS](n), obtemos a recorrencia
Tn = n +

Pr[X = i] (Ti1 + Tni )

1in

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


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

Ti

0i<n

(com uma comparac


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

para an
alise que todos elementos s
ao diferentes. Um algoritmo pr
atico tem que
considerar o caso que um ou mais elementos s
ao iguais (veja [27, p. 72])

60

2.3. Complexidade media

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

(i 1) (Ti1 + Tni )

1in

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

i (Ti + Tni1 )

0i<n

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

iTi +

0i<n

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

X
0i<n

= n + 2/n

iTni1

0i<n

iTi +

(n i 1)Ti

0i<n

Ti

0i<n

Recorr
encia
A soluc
ao final depende da escolha do piv
o.
Dois exemplos
Escolhe o primeiro elemento: Pr[X = i] = 1/n.
Escolhe o maior dos primeiros dois elementos diferentes: Pr[X =
i] = 2(i 1)/(n(n 1)).
Denota Tn = cm [QS](n)
Ambas soluc
oes chegam (quase) na mesma equacao recorrente
X
Tn = n + 2/n
Ti
0i<n

Exemplo 2.19
Vamos determinar a probabilidade de escolher o pivo Pr[X = i] no caso n = 3
explicitamente:
Permutac
ao Piv
o
123
2
132
3
213
2
231
3
312
3
321
3

61

2. An
alise de complexidade
Logo temos as probabilidades
Piv
oi
1
2
3
Pr[X = i] 0 1/3 2/3

Resolver a equac
ao
A soluc
ao da recorrencia
X

Tn = n + 1 + 2/n

Ti

0i<n

e
Tn = (n ln n)
Logo, em ambos casos temos a complexidade media de (n ln n).

Tn = n + 1 + 2/n

Ti

para n > 0

0i<n

multiplicando por n obtemos


X

nTn = n2 + n + 2

Ti

0i<n

a mesmo equac
ao para n 1 e
(n 1)Tn1 = (n 1)2 + n 1 + 2

Ti

para n > 1

0i<n1

subtraindo a segunda da primeira obtemos


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

para n > 0, verificando n = 1

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

62

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

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

e portanto
X

Tn = 2(n + 1)

1in

= 2(n + 1)(Hn

1
i+1
n
)
n+1

= (n ln n)

2.4. Exerccios
(Solucoes a partir da p
agina 223.)
Exerccio 2.1
Qual a complexidade pessimista dos seguintes algoritmos?
Alg1
Entrada Um tamanho de problema n.
1 f o r i := 1 . . . n do
2
f o r j := 1 . . . 2i
3
o p e r a c
oes constantes
4
j := j + 1
5
end f o r
6 end f o r

Alg2
Entrada Um tamanho de problema n.

63

2. An
alise de complexidade

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

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

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

Alg5
Entrada Um tamanho de problema n.
1

64

f o r i := 1 . . . n do

2.4. Exerccios

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

Exerccio 2.2
Tentando resolver a recorrencia
Tn = n 1 + 2/n

Ti

0i<n

que ocorre na an
alise do Quicksort (veja exemplo 2.18), o aluno J. Rapidez
chegou no seguinte resultado: Supomos que Tn = O(n) obtemos
X
Tn = n 1 + 2/n
O(i)
0i<n

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


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



X
X


ai
ai


iC
i6C
e mnimo. Qual a complexidade pessimista dele?
Exerccio 2.5
Qual o n
umero medio de atualizac
oes no algoritmo

65

2. An
alise de complexidade
1 s := 0
2 fo r i = 1, . . . , n do
3
i f i > bn/2c then
4
s := s+i
5
end i f
6 end f o r

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

Qual o n
umero medio de atualizac
oes k := k + 1, supondo que todo valor em
cada posic
ao da seq
uencia tem a mesma probabilidade? Qual o n
umero medio
com a distribuicao P [1] = 1/2, P [2] = P [3] = P [4] = P [5] = P [6] = 1/10?
Exerccio 2.7
Suponha um conjunto de chaves numa
arvore binaria completa de k nveis e
suponha uma busca bin
aria tal que cada chave da arvore esta buscada com
a mesma probabilidade (em particular n
ao vamos considerar o caso que uma
chave buscada nao pertence `
a
arvore.). Tanto nos quanto folhas contem chaves.
Qual o n
umero medio de comparac
oes numa busca?
Exerccio 2.8
Usando a tecnica para resolver a recorrencia (veja p. 62)
Tn = n + 1 + 2/n

X
0i<n

66

Ti

2.4. Exerccios
resolve as recorrencias
Tn = n + 2/n

Ti

0i<n

Tn = n 1 + 2/n

Ti

0i<n

explicitamente.

67

Parte II.
Projeto de algoritmos

69

3. Introduc
ao
Resolver problemas
Modelar o problema
Simplificar e abstrair
Comparar com problemas conhecidos
Inventar um novo algoritmo
Ganhar experiencia com exemplos
Aplicar ou variar tecnicas conhecidas (mais comum)
Resolver problemas
Provar a corretude do algoritmo
Testar s
o nao vale
Pode ser informal
Analisar a complexidade
Aplicar e validar
Implementar, testar e verificar
Adaptar ao problema real
Avaliar o desempenho

71

4. Algoritmos gulosos
Radix omnium malorum est cupiditas.
(Seneca)

4.1. Introduc
ao
(Veja [27, cap. 5.1.3].)
Algoritmos gulosos
Algoritmos gulosos se aplicam a problemas de otimizacao.
Ideia principal: Decide localmente.
Um algoritmo guloso constr
oi uma soluc
ao de um problema
Comeca com uma soluc
ao inicial.
Melhora essa soluc
ao com uma decis
ao local (gulosamente!).
Nunca revisa uma decis
ao.
Por causa da localidade: Algoritmos gulosos freq
uentemente sao apropriados para processamento online.
Trocar moedas

Troca mnima
Inst
ancia Valores (de moedas ou notas) v1 > v2 > > vn = 1, uma
soma s.
P
Soluc
ao N
umeros c1 , . . . , cn tal que s = 1in ci vi
P
Objetivo Minimizar o n
umero de unidades 1in ci .

73

4. Algoritmos gulosos
A abordagem gulosa
1 fo r
2
ci
3
s
4 end

i:=1, . . . , n do
:= bs/vi c
:= s ci vi
for

Exemplo
Exemplo 4.1
Com v1 = 500, v2 = 100, v3 = 25, v4 = 10, v5 = 1 e s = 3.14, obtemos
c1 = 0, c2 = 3, c3 = 0, c4 = 1, c5 = 4.
Com v1 = 300, v2 = 157, v3 = 1, obtemos v1 = 1, v2 = 0, v3 = 14.
No segundo exemplo, existe uma soluc
ao melhor: v1 = 0, v2 = 2, v3 = 0.
No primeiro exemplo, parece que a abordagem gulosa acha a melhor solucao.
Qual a diferenca?

Uma condic
ao simples e que todos valores maiores sao m
ultiplos inteiros dos
menores; essa condic
ao n
ao e necess
aria, porque o algoritmo guloso tambem
acha soluc
oes para outros sistemas de moedas, por exemplo no primeiro sistema do exemplo acima.
Lema 4.1
A soluc
ao do algoritmo guloso e a u
nica que satisfaz
X

ci vi < vm1

i[m,n]

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


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

74

4.1. Introducao
que pode causar um aumento de unidades em total). Logo ci fi1 1 e
temos
X
X
ci vi
(fi1 1)vi
i[m,n]

i[m,n]

fi1 vi

i[m,n]

X
i[m,n]

vi

i[m,n]

vi1

vi

i[m,n]

= vm1 vn = vm1 1 < vm1


Agora aplique lema 4.1.

Otimalidade da abordagem gulosa


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

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

75

4. Algoritmos gulosos
Do outro lado, o caminho mais longo entre dois vertices v1 . . . vn nao tem
subestrutura
otima: o subcaminho v2 . . . vn , por exemplo, nao precisa ser o
caminho mais longo. Por exemplo no grafo
1
j
i//
//


//

//


/
 1
1 //
//
 
// 

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

Para aplicar a definic


ao 4.1 temos que conhecer (i) o conjunto de subproblemas de um problema e (ii) provar, que uma solucao otima contem uma
(sub-)soluc
ao que e
otima para um subproblema. Se sabemos como estender uma soluc
ao de um subproblema para uma solucao de todo problema, a
subestrutura
otima fornece um algoritmo generico da forma
o gene
rica de problemas com subestrutura o
tima
Soluc
a
Entrada Uma inst
ancia I de um problema.
Sada Uma soluc
ao
otima S de I.
1
2
3
4
5
6
7
8
9

r e s o l v e ( I ):=
S := n i l
{ melhor solu
c
ao }
f o r t o d o s subproblemas I 0 de I do
S 0 := r e s o l v e ( I 0 )
e s t e n d e S 0 para uma s o l u c a o S de I
i f S 0 e a melhor s o l u c
a o then
S := S
end i f
end f o r

Informalmente, um algoritmo guloso e caracterizado por uma subestrutura


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

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

76

4.2. Algoritmos em grafos


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

4.2. Algoritmos em grafos

4.2.1. Arvores
espalhadas mnimas
Motivac
ao
Pontes para Polin
esia Francesa!

Arvores
espalhadas mnimas (AEM)

Arvore
espalhada mnima (AEM)
Inst
ancia Grafo conexo n
ao-direcionado G = (V, E), pesos c : E R+ .
Soluc
ao Um subgrafo H = (VH , EH ) conexo.
P
Objetivo Minimiza os custos eEH c(e).

Um subgrafo conexo com custo mnimo deve ser uma arvore (por que?).
Grafo n
ao conexo: Busca uma
arvore em todo componente (floresta
mnima).

77

4. Algoritmos gulosos
Aplicac
oes
Redes eletricas
Sistemas de estradas
Pipelines
Caixeiro viajante
Linhas telef
onicas alugadas
Resolver AEM
O n
umero de
arvores espalhadas pode ser exponencial.
Como achar uma soluc
ao
otima?
Observac
ao importante
Lema 4.2 (Corte)
Considere um corte V = S V \ S (com S 6= , V \ S 6= ). O arco
mnimo entre S e V \ S faz parte de qualquer AEM.
Prova. Na prova vamos supor, que todos pesos sao diferentes.
Suponha um corte S tal que o arco mnimo e = {u, v} entre S e V \ S nao faz
parte de um AEM T . Em T existe um caminho de u para v que contem ao
menos um arco e0 que cruza o corte. Nossa afirmacao: Podemos substituir e0
com e, em contradic
ao com a minimalidade do T .
Prova da afirmac
ao: Se substituirmos e0 por e obtemos um grafo T 0 . Como e
e mnimo, ele custa menos. O novo grafo e conexo, porque para cada par de
n
os ou temos um caminho j
a em T que n
ao faz uso de e0 ou podemos obter, a
0
partir de um caminho em T que usa e um novo caminho que usa um desvio
sobre e. Isso sempre e possvel, porque h
a um caminho entre u e v sem e, com
dois sub-caminhos de u para u0 e de v 0 para v, ambos sem usar e0 . O novo
grafo tambem e uma
arvore, porque ele n
ao contem um ciclo. O u
nico ciclo
possvel e o caminho entre u e v em T com o arco e, porque T e uma arvore.


78

4.2. Algoritmos em grafos


Prova

Resolver AEM
A caracterstica do corte possibilita dois algoritmos simples:
1. Comeca com algum n
o e repetidamente adicione o no ainda nao
alcanc
avel com o arco de custo mnimo de algum no ja alcancavel:
algoritmo de Prim.
2. Comeca sem arcos, e repetidamente adicione o arco com custo
mnimo que n
ao produz um ciclo: algoritmo de Kruskal.

AEM: Algoritmo de Prim


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

79

4. Algoritmos gulosos

1 V 0 := {v} para um v V
2 ET :=
3 while V 0 6= V do
4
e s c o l h e e = {u, v} com c u s t o mnimo
5
e n t r e V 0 e V \ V 0 ( com u V 0 )
0
6
V := V 0 {v}
7
ET := ET {e}
8 end while

AEM: Algoritmo de Kruskal


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

ET :=
while (V, ET ) n
a o e conexo do
e s c o l h a e com c u s t o mnimo que n
a o produz c c l o
ET := ET {e}
end while

Exemplo 4.3
Resultado dos algoritmos de Prim e Kruskal para Polinesia Francesa:

O mesmo!

80

4.2. Algoritmos em grafos


Implementac
ao do algoritmo de Prim
Problema: Como manter a informac
ao sobre a distancia mnima de
forma eficiente?
Mantenha uma dist
ancia do conjunto V 0 para cada no em V \ V 0 .
N
os que n
ao s
ao acessveis em um passo tem distancia .
Caso um novo n
o seja selecionado: atualiza as distancias.
Implementac
ao do algoritmo de Prim
Estrutura de dados adequada:
Fila de prioridade Q de pares (e, v) (chave e elemento).
Operac
ao Q. min() remove e retorna (e, c) com c mnimo.
Operac
ao Q.atualiza(e, c0 ) modifica a chave de e para v 0 caso v 0 e
menor que a chave atual.
Ambas operac
oes podem ser implementadas com custo O(log n).
AEM: Algoritmo de Prim
AEM-Prim
Entrada Um grafo conexo n
ao-orientado G = (V, EG ) com pesos c : VG
R+
P
Sada Uma
arvore T = (V, ET ) com custo eET c(e) mnimo.
1
2
3
4
5
6
7
8
9
10

ET :=
Q := {((v, u), c(v, u))|u N (v)} { n
o s alcanc
a veis }
Q := Q {((u, u), )|u V \ N (v) \ {v}} { n
o s restantes }
while Q 6= do
((u, v), c) := Q. min() { (u, v)
e arco mnimo }
f o r w N (v) do
Q.atualiza((v, w), c(v, w))
end f o r
ET := ET {{u, v}}
end while

81

4. Algoritmos gulosos
Algoritmo de Prim
Complexidade do algoritmo com o refinamento acima:
O laco 49 precisa n 1 iterac
oes.
O laco 68 precisa no total menos que m iteracoes.
cp [AEM-Prim] = O(n log n + m log n) = O(m log n)
Uma implementac
ao do algoritmo de Kruskal em tempo O(m log n) tambem
e possvel. Para esta implementac
ao e necessario de manter conjuntos que
representam n
os conectados de maneira eficiente. Isso leva a uma estrutura
de dados conhecida como Union-Find que tem as operacoes
C := cria(e): cria um conjunto com u
nico elemento e.
uni
ao(C1 , C2 ): junta os conjuntos C1 e C2 .
C := busca(e): retorna o conjunto do elemento e.
Essas operac
oes podem ser implementados em tempo O(1), O(1) e O(log n)
(para n elementos) respectivamente.
4.2.2. Caminhos mais curtos
Caminhos mais curtos
Problema freq
uente: Encontra caminhos mais curtos em um grafo.
Variac
oes: Caminho mais curto
entre dois n
os.
entre um n
o e todos outros (ingles: single-source shortest paths,
SSSP).
entre todas pares (ingles: all pairs shortest paths, APSP).

Caminhos mais curtos


Caminhos mais curtos
Inst
ancia Um grafo direcionado G = ({v1 , . . . , vn }, E) com funcao de
custos c : E R+ e um n
o inicial s V .

82

4.3. Algoritmos de seq


uenciamento

Soluc
ao Uma atribuic
ao d : V R+ da dist
ancia do caminho mais curto
d(t) de s para t.

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

4.3. Algoritmos de seq


uenciamento
Seq
uenciamento de intervalos
Considere o seguinte problema
enciamento de intervalos
Sequ
Inst
ancia Um conjunto de intervalos S = {[ci , fi ], 1 i n}, cada com
comeco ci e fim fi tal que ci < fi .
Soluc
ao Um conjunto compatvel C S de intervalos, i.e. cada par
i1 , i2 C temos i1 i2 = .
Objetivo Maximiza a cardinalidade |C|.

(ingles: interval scheduling)

Como resolver?
Qual seria uma boa estrategia gulosa para resolver o problema?
Sempre selecionada o intervalo que
que comeca mais cedo?

83

4. Algoritmos gulosos

que termina mais cedo?


que comeca mais tarde?
que termina mais tarde?
mais curto?
tem menos conflitos?

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

enciamento
Seja C = ([c1 , f1 ], . . . , [cn , fn ]) o resultado do algoritmo Sequ
0
de intervalos e O = ([c01 , f10 ], . . . , [c0m , fm
]) seq
uenciamento maximo, ambos
em ordem crescente.
Proposi
c
ao 4.2
Para todo 1 i n temos fi fi0 .
Prova. Como O e
otimo, temos n m. Prova por inducao. Base: Como o
algoritmo guloso escolhe o intervalo cujo terminacao e mnima, temos f1 f10 .
Passo: Seja fi fi0 com i < n. O algoritmo guloso vai escolher entre os intervalos que comecam depois fi o com terminacao mnima. O proximo intervalo
[c0i+1 , m0i+1 ] do seq
uenciamento
otimo est
a entre eles, porque ele comeca depois
fi0 e fi0 fi . Portanto, o pr
oximo intervalo escolhido pelo algoritmo guloso
0
0
termina antes de fi+1
, i.e. fi+1 fi+1
.

Proposi
c
ao 4.3
O seq
uenciamento do algoritmo guloso e
otimo.

84

4.3. Algoritmos de seq


uenciamento
Prova. Suponha que o algoritmo guloso retorna menos intervalos C que um
seq
uenciamento
otimo O. Pela proposic
ao 4.2, o u
ltimo (n-esimo) intervalo do
C termina antes do u
ltimo intervalo de O. Como O tem mais intervalos, existe
mais um intervalo que poderia ser adicionado ao conjunto C pelo algoritmo
guloso, uma contradicao com o fato, que o algoritmo somente termina se nao
sobram intervalos compatveis.

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

(ingles: maximum independent set, MIS)

Grafos de intervalo
Uma inst
ancia S de seq
uenciamento de intervalos define um grafo naodirecionado G = (V, E) com
V = S;

E = {{i1 , i2 } | i1 , i2 S, i1 i2 6= }

Grafos que podem ser obtidos pelo intervalos sao grafos de intervalo.

85

4. Algoritmos gulosos
Um conjunto compatvel de intervalos corresponde com um conjunto
independente nesse grafo.
Portanto, resolvemos CIM para grafos de intervalo!
Sem restric
oes, CIM e NP-completo.

Variac
ao do problema
enciamento de intervalos:
Considere uma variac
ao de Sequ
Particionamento de intervalos
Inst
ancia Um conjunto de intervalos S = {[ci , fi ], 1 i n}, cada com
comeco ci e fim fi tal que ci < fi .
Soluc
ao Uma atribuic
ao de r
otulos para intervalos tal que cada conjunto
de intervalos com a mesma r
otula e compatvel.
Objetivo Minimiza o n
umero de r
otulos diferentes.

Observac
ao
Uma superposic
ao de k intervalos implica uma cota inferior de k rotulos.
Seja d o maior n
umero de intervalos super-posicionados (a profundidade
do problema).
possvel atingir o mnimo d?
E
Algoritmo
Particionamento de intervalos
Inst
ancia Um conjunto de intervalos S = {[ci , fi ], 1 i n}, cada com
comeco ci e fim fi tal que ci < fi .
Soluc
ao Uma atribuic
ao de r
otulos para os intervalos tal que cada conjunto de intervalos com a mesma r
otula e compatvel.

86

4.3. Algoritmos de seq


uenciamento

Objetivo Minimiza o n
umero de r
otulos diferentes.
1
2
3
4
5
6

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


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

Corretude
Com profundidade d o algoritmo precisa ao menos d rotulos.
De fato ele precisa exatamente d r
otulos. Por q
ue?
Qual a complexidade dele?
Observac
oes: (i) Suponha que o algoritmo precise mais que d rotulos. Entao
existe um intervalo tal que todos n
umeros em [1, d] estao em uso pelo intervalos
conflitantes, uma contradic
ao com o fato que a profundidade e d. (ii) Depois
da ordenac
ao em O(n log n) a varredura pode ser implementada de forma que
precisa O(n) passos. Portanto a complexidade e O(n log n).
Colorac
ao de grafos
Considere o problema
o mnima
Colorac
a
Inst
ancia Um grafo n
ao-direcionado G = (V, E).
Soluc
ao Uma colorac
ao de G, i.e. uma atribuic
ao de cores c : V C tal
que c(v1 ) 6= c(v2 ) para {v1 , v2 } E.
Objetivo Minimiza o n
umero de cores |C|.

o
Particionamento de intervalos resolve o problema Colorac
a
mnima para grafos de intervalo.
o mnima para grafos sem restric
Colorac
a
oes e NP-completo.

87

4. Algoritmos gulosos

4.4. T
opicos
Compress
ao de dados
Seq
uencia genetica (NM 005273.2, Homo sapiens guanine nucleotide binding protein)
GAT CCCT CCGCT CT GGGGAGGCAGCGCT GGCGGCGG . . .
com 1666bp.
Como comprimir?
Com c
odigo fixo:
A = 00;
T = 10;

G = 01;
C = 11.

Resultado: 2b/bp e 3332b total.


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

G
.30

T
.16

C
.36

C
odigos: Exemplos
Tentativa 1
T = 0;
G = 01;

A = 1;
C = 10

Desvantagem: Ambguo! 01 = T C ou 01 = G?
Tentativa 2
C = 0;
A = 110;

G = 10;
T = 111

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

88

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

0 || BBB1
B
~||

C
0 ~~ >>>1
~
>
~~
>
G
>>1
0
>

A
T
Cada c
odigo livre de prefixo pode ser representado usando uma arvore binaria:
Comecando com a raiz, o sub-
arvore da esquerda representa os codigos que
comecam com 0 e a sub-
arvore da direita representa os codigos que comecam
com 1. Esse processo continua em cada sub-
arvore considerando os demais
bits. Caso todos bits de um c
odigo foram considerados, a arvore termina nessa
posic
ao com uma folha para esse c
odigo.
Essas considerac
oes levam diretamente a um algoritmo. Na seguinte implementac
ao, vamos representar
arvores bin
arias como estrutura da dados abstrata que satisfaz
BinTree ::= Nil Node(BinTree,Bintree)
uma folha sendo um no sem filhos. Vamos usar a abreviacao
Leaf ::= Node(Nil,Nil).
PrefixTree
Entrada Um conjunto de c
odigos C livre de prefixos.
Sada Uma
arvore bin
aria, representando os c
odigos.
1 i f |C |= 0 then
2
return N i l
3 end i f
4 i f |C |= {} then
5
return L e a f

{ n
ao tem
a rvore }

{ u
nico c
o digo vazio }

89

4. Algoritmos gulosos

6 end i f
7 E s c r e v e C = 0C1 1C2
8 return Node ( P r e f i x T r e e ( C1 ) , P r e f i x T r e e ( C2 ) )

Contrariamente, temos tambem


Proposi
c
ao 4.4
O conjunto das folhas de cada
arvore bin
aria corresponde com um codigo livre
de prefixo.
Prova. Dado uma
arvore bin
aria com as folhas representando codigos, nenhum c
odigo pode ser prefixo de outro: sen
ao ocorreria como no interno. 
Qual o melhor c
odigo?
A teoria de informac
ao (Shannon) fornece um limite.
A quantidade de informac
ao que um smbolo que ocorre com freq
uencia
f transmite e
log2 f
e o n
umero medio de bits (para um n
umero grande de smbolos)
X
H=
fi log2 fi .
H e um limite inferior para qualquer c
odigo.
Nem sempre e possvel atingir esse limite. Com
A = 1/3, B = 2/3;

H 0.92b

mas o c
odigo
otimo precisa 1b por smbolo.
Nosso exemplo: H 1.92.
Como achar o melhor c
odigo?
Observac
ao 1: Uma soluc
ao
otima e uma arvore completa.

90

4.4. Topicos
Observac
ao 2: Em uma soluc
ao
otima, os dois smbolos com menor
freq
uencia ocorrem como irm
aos no nvel mais alto. Logo: Podemos
substituir eles com um n
o cujo freq
uencia e a soma dos dois.

II
B1
BBB
II1
$
!
?
fi + fj
??1
0


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

Exemplo 4.4

Saccharomyces cerevisiae
Considere a seq
uencia genetica do Saccharomyces cerevisiae (ingles: bakers
yeast)
M SIT N GT SRSV SAM GHP AV ERY T P GHIV CV GT HKV EV V . . .
com 2900352bp. O alfabeto nessa caso s
ao os 20 aminoacidos
S = {A, C, D, E, F, G, H, I, K, L, M, N, P, Q, R, S, T, V, W, Y }.
que ocorrem com as freq
uencias

91

4. Algoritmos gulosos
A
0.055
M
0.021

C
0.013
N
0.061

D
0.058
P
0.043

E
0.065
Q
0.039

F
0.045
R
0.045

G
0.050
S
0.090

H
0.022
T
0.059

I
0.066
V
0.056

K
0.073
W
0.010

L
0.096
Y
0.034

Resultados
O algoritmo Huffman resulta em
A
0010
M
000111

C
100110
N
1011

D
1110
P
11011

E
0101
Q
01011

F
0000
R
10111

G
1000
S
1111

H
100111
T
0001

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

I
1101
V
1010

K
0011
W
000110

L
100
Y
10110

4.5. Notas
Magazine, Nemhauser e Trotter [22] d
ao criterios necessarios e suficientes para
uma soluc
ao gulosa do problema de troca ser
otima.

4.6. Exerccios
(Soluc
oes a partir da p
agina 227.)
Exerccio 4.1 (An
alise de series)
Suponha uma serie de eventos, por exemplo, as transacoes feitos na bolsa de
forma
compra Dell, vende HP, compra Google, . . .
Uma certa ac
ao pode acontecer mais que uma vez nessa seq
uencia. O problema: Dado uma outra seq
uencia, decida o mais rapido possvel se ela e uma
subseq
uencia da primeira.
Achar um algoritmo eficiente (de complexidade O(m + n) com seq
uencia de
tamanho n e m), prova a corretude a analise a complexidade dele.
(Fonte: [17]).
Exerccio 4.2 (Comunica
c
ao)
Imagine uma estrada comprida (pensa em uma linha) com casas ao longo
dela. Suponha que todas casas querem acesso ao comunicacao com celular. O
problema: Posiciona o n
umero mnimo de bases de comunicacao ao longo da
estrada, com a restrica
o que cada casa tem quer ser ao maximo 4 quilometros
distante de uma base.
Inventa um algoritmo eficiente, prova a corretude e analise a complexidade
dele.
(Fonte: [17]).

92

5. Programac
ao din
amica
5.1. Introduc
ao
Temos um par de coelhos recem-nascidos. Um par recem-nascido se torne
fertil depois um mes. Depois ele gera um outro par cada mes seguinte. Logo,
os primeiros descendentes nascem em dois meses. Supondo que os coelhos
nunca morrem, quantos pares tem depois de n meses?
n 0 1 2 3 4
# 1 1 2 3 5
Como os pares somente produzem filhos depois de dois meses temos
Fn =

Fn1
| {z }

popula
c
ao antiga

Fn2
| {z }

descendentes

com a recorrencia completa


(
Fn1 + Fn2
Fn =
1

caso n 2
caso n {0, 1}

Os n
umeros definidos por essa recorrencia s
ao conhecidos como so n
umeros
Fibonacci.
Uma implementac
ao recursiva simples para calcular-os e
1 f i b ( n ) :=
2
i f n 1 then
3
return 1
4
else
5
return f i b ( n 1)+ f i b ( n 2 )
6
end i f
7 end
Qual a complexidade dessa implementac
ao? Temos a recorrencia de tempo
(
T (n 1) + T (n 2) + (1) caso n 2
T (n) =
(1)
caso contrario

93

5. Programac
ao din
amica
simples de ver (induc
E
ao!) que T (n) Fn , e sabemos que Fn = (2n ) (outra
induc
ao), portanto a complexidade e exponencial. (A formula exata e
 n  n

 n

1+ 5
1+ 5
1 5

2
2
2
1

Fn =
=
+
2
5
5
e foi publicado por Binet em 1843.)
Qual o problema dessa soluc
ao? De um lado temos um n
umero exponencial
de caminhos das chamadas recursivas
Fn


Fn1

%
Fn2
B


Fn3
9

%
Fn4
B


:
!

mas s
o um n
umero polinomial de valores diferentes! Nossa ideia: usa um
cache!
1
2
3
4
5
6
7
8
9
10

f0 := 1
f1 := 1
fi := para i 2
f i b ( n ) :=
i f fn = then
fn := f i b ( n 1)+ f i b ( n 2 )
end i f
return fn
end
Exemplo de uma execuc
ao:
4 : f5D
DD
ww
w
DD
ww
DD
w
w
w
D!
{w
3 : f4G
f3
GG
w
w
w
GG
ww
GG
ww
GG
w
{w
#
2 : f3G
f2
GG
ww
w
G
GG
ww
GG
ww
G#
{ww
f1
1 : f2G
GG
zz
G
z
GG
z
GG
zz
G#
}zz
f1
f0

94

5.1. Introducao
f5 f4 f3 f2 f1 f0
Inicial 1
1
1
2
1
1
2
3
2
1
1
3
5
3
2
1
1
4
8
5
3
2
1
1
O trabalho agora e O(n), i.e. linear! Essa abordagem se chama memoizac
ao:
usamos um cache para evitar recalcular resultados intermediarios freq
uentes.
Esse implementac
ao e top-down e corresponde exatamente com a recorrencia
acima. Uma implementac
ao (ligeiramente) mais eficiente que preenche o cache da forma bottom-up e
1 f i b ( n ) :=
2
f0 := 1
3
f1 := 1
4
for i [2, n] do
5
fi := fi1 + fi2
6
end f o r
7
return fn
8 end
Finalmente, podemos otimizar a computac
ao no caso dos n
umeros Fibonacci
ainda mais, evitando o cache totalmente
1
2
3
4
5
6
7
8
9

f i b ( n ) :=
f := 1
g := 1
for i [2, n] do
{ invariante : f = Fi2 g = Fi1 }
g:= f+g
f :=g f
{ invariante : f = Fi1 g = Fi }
end f o r
A ideia de armazenar valores intermedi
arias usados freq
uentemente numa computacao recursiva e uma das ideias principais da programac
ao din
amica. A
seq
uencia de implementac
oes nosso exemplo dos n
umeros Fibonacci e tpico
para algoritmos de programac
ao din
amica, inclusive o u
ltimo para reduzir a
complexidade de espaco. Na pr
atica, as implementacoes ascendentes (ingl.
bottom-up) s
ao preferidas.
Programac
ao Din
amica

95

5. Programac
ao din
amica
1. Para aplicar PD o problema deve apresentar substrutura otima (uma
soluc
ao
otima para um problema contem solucoes otimas de seus subproblemas) e superposic
ao de subproblemas (reutiliza solucoes de subproblemas).
2. Pode ser aplicada a problemas NP-completos e polinomiais.
3. Em alguns casos o algoritmo direto tem complexidade exponencial, enquanto que o algoritmo desenvolvido por PD e polinomial.
` vezes a complexidade continua exponencial, mas de ordem mais
4. As
baixa.
u
5. E
til quando n
ao n
ao e f
acil chegar a uma seq
uencia otima de decisoes
sem testar todas as seq
uencias possveis para entao escolher a melhor.
6. Reduz o n
umero total de seq
uencias vi
aveis, descartando aquelas que
sabidamente n
ao podem resultar em seq
uencias otimas.

Id
eias b
asicas da PD
1. Objetiva construir uma resposta
otima atraves da combinacao das respostas obtidas para subproblemas
2. Inicialmente a entrada e decomposta em partes mnimas e resolvidas de
forma ascendente (bottom-up)
3. A cada passo os resultados parciais s
ao combinados resultando respostas para subproblemas maiores, ate obter a resposta para o problema
original
4. A decomposic
ao e feita uma u
nica vez, e os casos menores sao tratados
antes dos maiores
5. Este metodo e chamado ascendente, ao contrario dos metodos recursivos
que s
ao metodos descendentes.

96

5.2. Comparacao de seq


uencias
Passos do desenvolvimento de um algoritmo de PD
1. Caracterizar a estrutura de uma soluc
ao
otima
2. Definir recursivamente o valor de uma soluc
ao otima
3. Calcular o valor de uma soluc
ao
otima em um processo ascendente
4. Construir uma soluc
ao
otima a partir de informacoes calculadas

5.2. Comparac
ao de seq
u
encias
5.2.1. Subseq
u
encia Comum Mais Longa
Subseq
u
encia Comum Mais Longa
Dada uma seq
uencia X = hx1 , x2 , . . . , xm i e Z = hz1 , z2 , . . . , zk i, X e
uma subseq
uencia de Z se existe uma seq
uencia estritamente crescente
hi1 , i2 , . . . , ik i de ndices de X tais que, para todo j = 1, 2, . . . , k, temos
xij = zj .
Exemplo: Z = hB, C, D, Bi e uma subseq
uencia de X = hA, B, C, D, A, Bi

Dadas duas seq


uencias X e Y , dizemos que uma seq
uencia Z e uma
subseq
uencia comum de X e Y se Z e uma subseq
uencia de X e Y ao
mesmo tempo.

Subseq
u
encia Comum Mais Longa
Z = hB, C, A, Bi e uma subseq
uencia comum mais longa de X = hA, B, C, B, D, A, Bi
e Y = hB, D, C, A, B, Ai
Definic
ao do Problema da SCML
SCML
Inst
ancia Duas seq
uencias X = hx1 , x2 , . . . , xm i e Y = hy1 , y2 , . . . , yn i.
Soluc
ao Uma subseq
uencia comum Z de X, Y .
Objetivo Maximiza o comprimento de Z.

97

5. Programac
ao din
amica
Exemplo de Aplicac
ao: comparar dois DNAs:
X = ACCGGT CGAGT G
Y = GT CGT T CGGAAT GCCGT T GCT CT GT AAA
Os caracteres devem aparecer na mesma ordem, mas nao necessariamente ser consecutivos.

Teorema: Subestrutura Otima


de uma SCML
Sejam as seq
uencias X = hx1 , x2 , . . . , xm i e Y = hy1 , y2 , . . . , yn i, e seja Z =
hz1 , z2 , . . . , zk i qualquer SCML de X e Y
Se xm = yn , ent
ao Zk = xm = yn e Zk1 e um SCML de Xm1 e Yn1
Se xm 6= yn , ent
ao zk 6= xm implica que Z e uma SCML de Xm1 e Y
Se xm 6= yn , ent
ao zk 6= ym implica que Z e uma SCML de X e Yn1
Isso leva ao definic
ao recursiva
8
0
0
>
<SCM L(X , Y ) + 1
SCM L(X, Y ) = max{SCM L(X, Y 0 ), SCM L(X 0 , Y )}
>
:
0

se X = X 0 c, Y = Y 0 c
se X = X 0 c1 , Y = Y 0 c2 e c1 6= c2
se X =  ou Y = 

Qual a complexidade de implementac


ao recursiva (naiva)? No pior caso executamos
T (n, m) = T (n 1, m) + T (n, m 1) + (1)
operac
oes. Isso com certeza e mais que o n
umero de caminhos de (n, m) ate
(0, 0), que e maior que m+n
,
i.e.
exponential
no pior caso.
n
Com memoizac
ao ou armazenamento de valores intermediarios, podemos reduzir o tempo e espaco para O(nm):
SCML
SCML
Entrada Dois strings X e Y e seus respectivos tamanhos m e n medidos
em n
umero de caracteres.
Sada O tamanho da maior subseq
uencia comum entre X e Y .

98

5.2. Comparacao de seq


uencias

1 m := comprimento (X)
2 n := comprimento (Y)
3 f o r i := 1 t o m do c [ i , 0 ] := 0 ;
4 f o r i := 1 t o m do c [ 0 , j ] := 0 ;
5 f o r i := 1 t o m do
6
f o r j := 1 t o n do
7
i f xi = yi then
8
c[i, j] := c[i 1, j 1] + 1
9
else
10
c[i, j] := max(c[i, j 1], c[i 1, j]
11
end i f
12
end f o r
13 return c[m, n]

Caso s
o o comprimento da maior subseq
uencia em comum importa, podemos
reduzir o espaco usado. Os valores de cada linha ou coluna dependem so dos
valores da linha ou coluna anterior. Supondo, que o comprimento de uma linha e menor que o comprimento de uma coluna, podemos manter duas linhas
e calcular os valores linha por linha. Caso as colunas sao menores, procedemos das mesmo forma coluna por coluna. Com isso, podemos determinar o
comprimento da maior subseq
uencia em comum em tempo O(nm) e espaco
O(min{n, m}).
Caso queremos recuperar a pr
opria subseq
uencia, temos que manter essa informac
ao adicionalmente:
SCML
SCML
Entrada Dois strings X e Y e seus respectivos tamanhos m e n medidos
em n
umero de caracteres.
Sada O tamanho da maior subseq
uencia comum entre X e Y e o vetor
b para recuperar a maior SCML.
1 m := comprimento [X]
2 n := comprimento [Y]
3 f o r i := 1 t o m do c [ i , 0 ] := 0 ;

99

5. Programac
ao din
amica

4
5
6
7
8
9
10
11
12
13
14
15
16

f o r i := 1 t o m do c [ 0 , j ] := 0 ;
f o r i := 1 t o m do
f o r j := 1 t o n do
i f xi = yi then
c[i, j] := c[i 1, j 1] + 1
b[i, j] := e l s e i f c[i 1, j] c[i, j 1] then
c[i, j] := c[i 1, j]
b[i, j] :=
else
c[i, j] := c[i, j 1]
b[i, j] :=
return c e b

Nesse caso, n
ao tem metodo simples para reduzir o espaco de O(nm) (veja
os coment
arios sobre o algoritmo de Hirschberg abaixo). Mantendo duas linhas ou colunas de c, gasta menos recursos, mas para recupar a subseq
uencia
comum, temos que manter O(nm) elementos em b.
ao e Conquista, resolve o problema
O algoritmo de Hirschberg [13]), via Divis
da subseq
uencia comum mais longa em tempo O(mn), mas com complexidade
de espaco linear O(m + n). O algoritmo recursivamente divide a tabela em
quatro quadrantes e ignora os quadrantes superior-direito e inferior-esquerdo,
visto que a soluc
ao n
ao passa por eles. Ap
os, o algoritmo e chamado recursivamente nos quadrantes superior-esquerdo e inferior-direito. Em cada chamada
recursiva e criada uma lista com as operac
oes executadas, e tal lista e concatenada ao final das duas chamadas recursivas. A recuperacao da seq
uencias
de operac
oes pode ser feita percorrendo-se linearmente esta lista.
Print-SCML
Print-SCML
Entrada Matriz b {, -, }mn .
Sada A maior subseq
uencia Z comum entre X e Y obtida a partir de b.
1
2

100

i f i = 0 o r j = 0 then return
i f b[i, j] =- then

5.2. Comparacao de seq


uencias

3
4
5
6
7
8

P r i n t SCML( b ,
p r i n t xi
e l s e i f b[i, j] =
P r i n t SCML( b ,
else
P r i n t SCML( b ,

X, i 1 , j 1)
then
X, i 1 , j)
X, i , j 1)

5.2.2. Similaridade entre strings


Considere o problema de determinar o n
umero mnimo de operacoes que transformam um string s em um string t, se as operac
oes permitidas sao a insercao
de um caracter, a delec
ao de um caracter ou a substituicao de um caracter
para um outro. O problema pode ser visto como um alinhamento de dois
strings da forma
sonhar
vo--ar
em que cada coluna com um caracter diferente (inclusive a falta de um caracter -) tem custo 1 (uma coluna (a, ) corresponde `
a uma delecao no primeiro
ou uma inserc
ao no segundo string, etc.). Esse problema tem subestrutura
otima: Uma soluc
ao
otima contem uma soluc
ao
otima do subproblema sem
au
ltima coluna, sen
ao podemos obter uma soluc
ao de menor custo. Existem
quatro casos possveis para a u
ltima coluna:


   h i h i
a

a
a
;
;
;

a
a
b

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


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

101

5. Programac
ao din
amica
Dist
ancia entre textos
ncia
dista
Entrada Dois strings s, t e seus respectivos tamanhos n e m medidos em
n
umero de caracteres.
Sada A dist
ancia mnima entre s e t.
1
2
3
4
5
6
7
8
9
10
11

dist
a n c i a ( s , t , n ,m):=
i f ( n=0) return m
i f ( m=0) return n
i f ( sn = tm ) then
sol0 = d i s t
a n c i a (s ,t ,n 1 , m 1 )
else
sol0 = d i s t
a n c i a (s ,t ,n 1 , m 1)+1
end i f
a n c i a (s ,t ,n ,m 1 ) + 1
sol1 = d i s t
sol2 = d i s t
a n c i a (s ,t ,n 1 , m) + 1
return min(sol0 , sol1 , sol2 )

Essa implementac
ao tem complexidade exponencial. Com programacao dinamica,
armazenando os valores intermedi
arios de d em uma matriz m, obtemos
Dist
ancia entre textos
ncia
PD-dista
Entrada Dois strings s e t, e n e m, seus respectivos tamanhos medidos
em n
umero de caracteres.
Sada A dist
ancia mnima entre s e t.
Coment
ario O algritmo usa uma matriz M = (mi,j ) N(n+1)(m+1) que
armazena as dist
ancias mnimas mi,j entre os prefixos s[1 . . . i] e
t[1 . . . j].
1 PD d i s t
a n c i a ( s , t , n ,m):=
2
f o r i := 1, . . . , n do mi,0 := i
3
f o r i := 1, . . . , m do m0,i := i

102

5.2. Comparacao de seq


uencias

4
5
6
7
8
9
10
11
12
13
14
15

f o r i := 1, . . . , n do
f o r j := 1, . . . , m do
i f ( si = tj ) then
sol0 := mi1,j1
else
sol0 := mi1,j1 + 1
end i f
sol1 := mi,j1 + 1
sol2 := mi1,j + 1
mi,j := min(sol0 , sol1 , sol2 ) ;
end f o r
return mi,j

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

A
L
T
O

0
1
2
3
4

L
1
1
1
2
3

O
2
2
2
2
3

I
3
3
3
3
3

R
4
4
4
4
4

O
5
5
5
5
4

S
6
6
6
6
5

-ALTOLOIROS
Dist
ancia entre textos
ncia
PD-dista
Entrada Dois strings s e t, e n e m, seus respectivos tamanhos medidos
em n
umero de caracteres.
Sada A dist
ancia mnima entre s e t e uma matriz P = (pi,j ) que armazena a seq
uencia de operac
oes.

103

5. Programac
ao din
amica

Coment
ario O algoritmo usa uma matriz M = (mi,j ) N(n+1)(m+1)
que armazena as dist
ancias mnimas mi,j entre os prefixos s[1 . . . i]
e t[1 . . . j].
1 PD d i s t
a n c i a ( s , t , n ,m):=
2
f o r i := 1, . . . , n do mi,0 = i; pi,0 := 1
3
f o r i := 1, . . . , m do m0,i = i; p0,i := 1
4
f o r i := 1, . . . , n do
5
f o r j := 1, . . . , m do
6
i f ( si = tj ) then
7
sol0 = mi1,j1
8
else
9
sol0 = mi1,j1 + 1
10
end i f
11
sol1 := mi,j1 + 1
12
sol2 := mi1,j + 1
13
mi,j := min(sol0 , sol1 , sol2 ) ;
pi,j := min{i|soli = mij }
14
15
end f o r
16
return mi,j

Reconstruc
ao da Seq
u
encia de Operac
oes
es
PD-operac
o
Entrada Uma matriz P = (pij ) de tamanho n m com marcacao de
operac
oes, strings s, t, posic
oes i e j.
Sada Uma seq
uencia a1 , a2 , ax de operac
oes executadas.
1 PD o p e r a c
o e s (P , s , t , i , j ):=
2
case
3
pi,j = 1 :
4
return
5
pi,j = 0 :
6
PD o p e r a c
oes (s ,t ,i 1 ,j 1)
7
p r i n t ( M )
8
pi,j = 1 :

104

5.3. Mochila maxima

9
10
11
12
13
14

PD o p e r a c
oes (s ,t ,i ,j 1)
print ( I )
pi,j = 2 :
PD o p e r a c
oes (s ,t ,i 1 ,j )
p r i n t ( D )
end case

O algoritmo possui complexidade de tempo e espaco O(mn), sendo que o


espaco s
ao duas matrizes P e M . O espaco pode ser reduzido para O(min{n, m})
usando uma adaptac
ao do algoritmo de Hirschberg.

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

Ideia: Ou item i faz parte da soluc


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

se i > n ou w = 0
0
M (i, w) = M (i + 1, w)
se wi > w nao cabe

max{M (i + 1, w), M (i + 1, w wi ) + vi } se wi w

105

5. Programac
ao din
amica
A soluc
ao desejada e M (n, W ). Para determinar a selecao de itens:
Mochila m
axima (Knapsack)
Seja S (k, v) a soluc
ao de tamanho menor entre todas solucoes que
usam somente itens S [1, k] e
tem valor exatamente v.
Temos
S (k, 0) =
S (1, v1 ) = {1}
S (1, v) = undef

para v 6= v1

Mochila m
axima (Knapsack)
S obedece a recorrencia
(
S (k 1, v vk ) {k}
S (k, v) = min
tamanho S (k 1, v)

Menor tamanho entre os dois


X
iS (k1,vvk )

ti + tk

se vk v e S (k 1, v vk ) definido

ti .

iS (k1,v)

Melhor valor: Escolhe S (n, v) com o valor maximo de v definido.


Tempo e espaco: O(n

vi ).

5.4. Multiplicac
ao de Cadeias de Matrizes
Qual e a melhor ordem para multiplicar n matrizes M = M1 Mn ? Como
o produto de matrizes e associativo, temos v
arias possibilidades de chegar em
M . Por exemplo, com quatro matrizes temos as cinco possibilidades

106

5.4. Multiplicac
ao de Cadeias de Matrizes
Possveis multiplicac
oes
Dadas (M1 , M2 , M3 , M4 ) pode-se obter M1 M2 M3 M4 de 5 modos
distintos, mas resultando no mesmo produto
M1 (M2 (M3 M4 ))
M1 ((M2 M3 )M4 )
(M1 M2 )(M3 M4 )
(M1 (M2 M3 ))M4
((M1 M2 )M3 )M4
Podemos multiplicar duas matrizes somente se N col(A) = N lin(B)
Sejam duas matrizes com dimens
oes p q e q r respectivamente. O
n
umero de multiplicac
oes resultantes e p q r.
Dependendo do tamanho dos matrizes, um desses produtos tem o menor
n
umero de adic
oes e multiplicac
oes. O produto de duas matrizes p q e
q r precisa prq multiplicac
oes e pr(q 1) adic
oes. No exemplo acima, caso
temos matrizes do tamanho 3 1, 1 4, 4 1 e 1 5 as ordens diferentes
resultam em
N
umero de multiplicac
oes para cada seq
u
encia
20 + 20 + 15 = 55
4 + 5 + 15 = 24
12 + 20 + 60 = 92
4 + 5 + 15 = 24
12 + 12 + 15 = 39
operac
oes, respectivamente. Logo, antes de multiplicar as matrizes vale a pena
determinar a ordem
otima (caso o tempo para determinar ela nao e proibitivo).
Dada uma ordem, podemos computar o n
umero de adicoes e multiplicacoes
em tempo linear. Mas quantas ordens tem? O produto final consiste em duas
matrizes que s
ao os resultados dos produtos de i e n i matrizes; o ponto de
separac
ao i pode ser depois qualquer matriz 1 i < n. Por isso o n
umero de
possibilidades Cn satisfaz a recorrencia
X
Cn =
Ci Cni
1i<n

107

5. Programac
ao din
amica
para n 1 e as condic
oes C1 = 1 e C2 = 1. A solucao dessa recorrencia e
1
n
Cn = 2n
=
O(4
/n3/2 ) e temos Cn 2n2 , logo tem um n
umero
n 2(2n1)
exponencial de ordens de multiplicac
ao possveis1 .
Soluc
ao por Recorr
encia
O n
umero de possibilidades Tn satisfaz a recorrencia
T (n) =

T (i) T (n i)

1i<n1

para n 1 e as condic
oes T (1) = 1.
 1
n
3/2
A soluc
ao dessa recorrencia e T (n) = 2n
) e temos
n 2(2n1) = O(4 /n
n2
Cn 2
Ent
ao n
ao vale a pena avaliar o melhor ordem de multiplicacao, enfrentando
um n
umero exponencial de possibilidades? Nao, existe uma solucao com
programac
ao din
amica, baseada na mesma observacao que levou `a nossa recorrencia.

mik

(
minij<k mij + m(j+1)k + bi1 bj bk
=
0

caso i < k
caso i = kx

Multiplicac
ao de Cadeias de Matrizes
Dada uma cadeia (A1 , A2 , . . . , An ) de n matrizes, coloque o produto
A1 A2 . . . An entre parenteses de forma a minimizar o n
umero de multiplicac
oes.
Algoritmo Multi-Mat-1
Retorna o n
umero mnimo de multiplica
c
oes necess
arias para multiplicar a cadeia de matrizes
passada como par
ametro.

Multi-Mat-1
Entrada Cadeia de matrizes (A1 , A2 , . . . , An ) e suas respectivas dimens
oes bi , 0 i n. A
matrix Ai tem dimens
ao bi1 bi .
Sada N
umero mnimo de multiplica
c
oes.

1 Podemos

obter uma soluc


ao usando func
oes geratrizes. (Cn1 )n1 s
ao os n
umeros Catalan, que t
em um n
umero enorme de aplicac
oes na combinat
orica.

108

5.4. Multiplicac
ao de Cadeias de Matrizes

1
2
3
4
5
6
7
8
9
10
11
12

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

Considerac
oes para a An
alise
O tamanho da entrada se refere ao n
umero de matrizes a serem multiplicadas
As operac
oes aritmeticas sobre os naturais s
ao consideradas operacoes
fundamentais
An
alise de Complexidade do Algoritmo

Cp =

n1
X nu
X
u=1 i=1

n1
X
u=1

(1 +

j1
X
ki

4) =

n1
X nu
X

(1 + 4u)

u=1 i=1

+ 4u) =
(n u)(1

n1
X

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

u=1

An
alise de Complexidade do Algoritmo

Cp [Inicializac
ao] = O(n)
Cp [Iterac
ao] = O(n3 )
Cp [Finalizac
ao] = O(1)
Cp [Algoritmo] = O(n) + O(n3 ) + O(1) = O(n3 )

109

5. Programac
ao din
amica
Algoritmo Multi-Mat-2
Retorna o n
umero mnimo de multiplica
c
oes e a parentiza
c
ao respectiva para multiplicar a cadeia
de matrizes passada como par
ametro.

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

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


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

Algoritmo Print-Parentizac
ao

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

110

5.5. Topicos

5.5. T
opicos
5.5.1. Algoritmo de Floyd-Warshall
O algoritmo de Floyd-Warshall calcula o caminho mnimo entre todos os pares
de vertices de um grafo.
Algoritmo de Floyd-Warshall
Conte
udo disponvel na sec
ao 25.2 do Cormen, e Exemplo 5.2.4 (Laira&Veloso,
2a edic
ao).
Calcula o caminho mnimo entre cada par de vertices de um grafo.
Considera que o grafo n
ao tenha ciclos negativos, embora possa conter
arcos de custo negativo.

Subestrutura
otima
Subcaminhos de caminhos mais curtos s
ao caminhos mais curtos.
Lema 24.1 (Cormen): Dado um grafo orientado ponderado G = (V, E),
com func
ao peso w : E R, seja p = (v1 , v2 , . . . , vk ) um caminho mais
curto do vertice v1 ate o vertice vk e, para quaisquer i e j tais que
1 i j k, seja pij = (vi , vi+1 , . . . , vj ) o subcaminho p desde o
vertice vi ate o vertice vj . Ent
ao, pij e um caminho mais curto de vi ate
vj .
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-Warshall
Entrada Um grafo G = (V, E) e uma matriz quadrada com cada celula
contendo o peso do arco (i,j), ou caso o arco nao existir
Sada Uma matriz quadrada com cada celula contendo a distancia
mnima entre i e j.
1
2
3

n := l i n h a s ( W )
f o r k := 1 t o n
f o r i := 1 t o n

111

5. Programac
ao din
amica

4
5
6

f o r j := 1 t o n
k1
k1
dkij := min(dk1
ij , dik + dkj )
return ( Dn )

Exemplo

5.5.2. Caixeiro viajante


O problema de caixeiro viajante e um exemplo em que a programacao dinamica
ajuda reduzir um trabalho exponencial. Esperadamente, o algoritmo final
ainda e exponencial (o problema e NP-completo), mas significadamente menor.

Problema do Caixeiro Viajante


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

O algoritmo e baseado na seguinte ideia (proposta por Bellman em 1962 [4]).


Seja v1 , v2 , . . . uma soluc
ao
otima. Sem perda de generalidade, podemos supor
que v1 = 1. Essa soluc
ao tem como sub-solucao otima o caminho v2 , v3 , . . .
que passa por todos vertices exceto v1 e volta. Da mesmo forma a u
ltima subsoluc
ao tem o caminho v3 , v4 , . . . que passa por todos vertices exceto v1 , v2
e volta, como sub-soluc
ao. Essa soluc
oes tem sub-estrutura otima, porque
qualquer outro caminho menor pode ser substitudo para o caminho atual.
Logo, podemos definir T (i, V ) como menor rota comecando no vertice i e
passando por todos vertices em V exatamente uma vez e volta para vertice
1. A soluc
ao desejada ent
ao e T (1, [2, n]). Para determinar o valor de T (i, V )
temos que minizar sobre todas continuac
oes possveis. Isso leva `a recorrencia

112

5.5. Topicos

(
minvV div + T (v, V \ {v}) V 6=
T (i, V ) =
di1
caso V =
Se ordenamos todos os sub-conjuntos dos vertices [1, n] em ordem de , obtemos uma matrix de dependencias
V1 V2 V2n
1
2
..
.
n
em que qualquer elemento depende somente de elementos em colunas mais
para esquerda. Uma implementac
ao pode representar uma subconjunto de
[1, n] como n
umero entre 0 e 2n 1. Nessa caso, a ordem natural ja respeita
a ordem entre os conjuntos, e podemos substituir um teste v Vj com
2v &j = 2v e a operac
ao Vj \ {v} com j 2v .
1
2
3
4
5
6

for i [1, n] do Ti,0 := di1 { base }


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

5.5.3. Arvore
de busca bin
aria
otima
Motivac
ao para o Problema
Suponha que temos um conjunto de chaves com probabilidades de busca
conhecidas.
Caso a busca e repetida muitas vezes, vela a pena construir uma estrutura de dados que minimiza o tempo medio para encontrar uma chave.
Uma estrutura de busca eficiente e um
arvore binaria.

113

5. Programac
ao din
amica
Portanto, vamos investigar como construir o arvore binaria otimo. Para um
conjunto de chaves com distribuic
ao de busca conhecida, queremos minimizar
o n
umero medio de comparac
oes (nossa medida de custos).
Exemplo 5.1
Considere a seq
uencia ordenada a < b < c < d e as probabilidades
Exemplo
Elemento a
b
c
Pr
0.2 0.1 0.6
qual seria uma arvore
otima? Alguns exemplos

d
0.1

Arvore
correspondente
'&%$
!"#
'&%$
!"#
()*+
/.-,
a ==
 b <<
d


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

'&%$
!"#
()*+
/.-,
'&%$
!"#
'&%$
!"#
c ==
d
a
c
/.-,
()*+
d
com um n
umero medio de comparac
oes 0.21+0.12+0.63+0.14 = 2.6,
0.22+0.11+0.62+0.13 = 2.0, 0.23+0.12+0.63+0.11 = 2.7,
respectivamente.

Arvore
de Busca Bin
aria Otima
Em geral, temos que considerar n
ao somente as probabilidades que procure-se
um dado chave, mas tambem as probabilidades que um chave procurada nao
pertence `
a
arvore. Logo supomos que temos
1. uma seq
uencia ordenada a1 < a2 < < an de n chaves e
2. probabilidades
Pr[c < a1 ], Pr[c = a1 ], Pr[a1 < c < a2 ], . . .
. . . , Pr[an1 < c < an ], Pr[c = an ], Pr[an < c]
que a chave procurado c e uma das chaves da seq
uencia ou cai num
intervalo entre elas.
A partir dessas informac
oes queremos minimizar a complexidade media da
busca. Em uma dada
arvore, podemos observar que o n
umero de comparac
oes para achar uma chave existente e igual a profundidade dela na arvore
(comecando com profundidade 1 na raiz). Caso a chave nao pertence `a arvore,

114

5.5. Topicos
podemos imaginar chaves artificiais que representam os intervalos entre as chaves, e o n
umero de comparac
oes necess
arias e um menos que a profundidade
de uma chave artificial. Um exemplo de um
arvore com chaves artificiais
(representado pelos intervalos correspondentes) e
x2 VVVV
VVVVV
hhhhh
h
h
h
V+ x
h
sh
x
1
3 L
L
o
L
LL%
o
L
r
o
wo
%
yr r
] , x1 [
]x1 , x2 [
]x2 , x3 [
]x3 , [
Para facilitar o tratamento, vamos introduzir chaves adicionais a0 = e
an+1 = . Com isso, obtemos a complexidade media de busca
X
X
cM =
Pr[c = ai ]prof(ai ) +
Pr[ai < c < ai+1 ](prof(]ai , ai+1 [) 1);
1in

0in

ela depende da
arvore concreta.
Como achar a
arvore otima? A observac
ao crucial e a seguinte: Uma das
chaves deve ser a raiz e a duas sub-
arvores da esquerda e da direita devem ser
arvores

otimas pelas sub-seq


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

Pr[c = ai ]prof(ai )+

eid

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

e1id

Arvore
de Busca Bin
aria Otima
Supondo que ar e a raiz desse sub-
arvore, essa complexidade pode ser escrito
como
cM (e, d) = Pr[c = ar ]
X
+
Pr[c = ai ]prof(ai ) +
ei<r

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

e1i<r

Pr[c = ai ]prof(ai ) +

r<id

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

rid

Pr[ai < c < ai+1 ] +

e1id

Pr[c = ai ]

eid

+ cM (e, r 1) + cM (r + 1, d)
= Pr[ae1 < c < ad+1 ] + cM (e, r 1) + cM (r + 1, d)

115

5. Programac
ao din
amica

Arvore
de Busca Bin
aria Otima
(O pen
ultimo passo e justificado porque, passando para uma sub-arvore a
profundidade e um a menos.) Com essa equacao podemos construir uma
recorrencia para a complexidade media
otima: Escolhe sempre a raiz que
minimiza essa soma. Como base temos complexidade 0 se d > e:
cM (e, d) =
(
minerd Pr[ae1 < c < ad+1 ] + cM (e, r 1) + cM (r + 1, d) caso e d
0
caso e > d
(5.1)

Arvore
de Busca Bin
aria Otima
Ao inves de calcular o valor cM recursivamente, vamos usar a programacao
(tabelac
ao) din
amica com tres tabelas:
cij : complexidade media da
arvore
otima para as chaves ai ate aj
rij : raiz da
arvore
otima para as chaves ai ate aj
pij : Pr[ai1 < c < aj+1 ]

Arvore
de Busca Bin
aria Otima

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

116

f o r i:=1 t o n+1 do
pi(i1) :=qi1
ci(i1) :=0
end f o r
f o r d:=0 t o n 1 do { para todas diagonais }
f o r i:=1 t o n d do { da chave i }
j :=d + i
{ at
e chave j }
pij :=pi(j1) + pj + qj
cij :=
f o r r:=i t o j do
c:= pij + ci(r1) + c(r+1)j
i f c < cij then

5.5. Topicos

14
15
16
17
18

cij :=c
rij := r
end f o r
end f o r
end f o r

i/j
1
2

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


cada com n
ao mais que n iterac
oes e com trabalho constante no corpo. Logo
a complexidade pessimista e O(n3 ).

117

6. Divis
ao e conquista
6.1. Introduc
ao
M
etodo de Divis
ao e Conquista
Dividir o problema original em um determinado n
umero de subproblemas independentes
Conquistar os subproblemas, resolvendo-os recursivamente ate obter o
caso base.
Combinar as soluc
oes dadas aos subproblemas, a fim de formar a solucao
do problema original.
Recorr
encias
O tempo de execuc
ao dos algoritmos recursivos pode ser descrito por
uma recorrencia.
Uma recorrencia e uma equac
ao ou desigualdade que descreve uma
func
ao em termos de seu valor em entradas menores.
Divis
ao e conquista
DC
Entrada Uma inst
ancia I de tamanho n.
1 i f n = 1 then
2
return S o l u c
ao d i r e t a
3 else
4
D i v i d e I em sub i n s t
a n c i a s I1 , . . . , Ik , k > 0
5
com tamanhos ni < n .
6
R e s o l v e r e c u r s i v a m e n t e : I1 , . . . , Ik .
7
R e s o l v e I usando sub s o l u c
o e s DC(I1 ), . . . , DC(Ik ) .
8 end i f

119

6. Divis
ao e conquista
Recurs
ao natural
Seja d(n) o tempo para a divis
ao.
Seja s(n) o tempo para computar a solucao final.
Podemos somar: f (n) = d(n) + s(n) e obtemos
(
(1)
T (n) = P

1ik T (ni ) + f (n)

para n < n0
caso contrario.

Recurs
ao natural: caso balanceado
(
(1)
T (n) =
kT (dn/me) + f (n)

para n < n0
caso contrario.

Mergesort
Mergesort
Entrada Indices p, r e um vetor A com elementos Ap , . . . , Ar
Sada A com elementos em ordem n
ao-decrescente, i.e. para i < j temos
Ai Aj .
1 i f n = 1 then
2
return S o l u c
ao d i r e t a
3 else
4
D i v i d e I em sub i n s t
a n c i a s I1 , . . . , Ik , k > 0
5
com tamanhos ni < n .
6
R e s o l v e r e c u r s i v a m e n t e : I1 , . . . , Ik .
7
R e s o l v e I usando sub s o l u c o e s DC(I1 ), . . . , DC(Ik ) .
8 end i f

Recorr
encias simplificadas

120

6.2. Resolver recorrencias


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

6.2. Resolver recorr


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

121

6. Divis
ao e conquista
6.2.1. M
etodo da substituic
ao
M
etodo da substituic
ao
O metodo da substituic
ao envolve duas etapas:
1. pressup
oe-se um limite hipotetico.
2. usa-se induc
ao matem
atica para provar que a suposicao esta correta.
Aplica-se este metodo em casos que e f
acil pressupor a forma de resposta.
Pode ser usado para estabelecer limites superiores ou inferiores.

Mergesort usando o m
etodo da substituic
ao
Sup
oe-se que a recorrencia
jnk
T (n) = 2T (
)+n
2
tem limite superior igual a n log n, ou seja, T (n) = O(n log n). Devemos
provar que T (n) c n log n para uma escolha apropriada da constante c > 0.
jnk
log(
) + n)
2
2
n
cn log + n = cn log n cn + n
2
cn log n

T (n) 2(c

jnk

para c 1.
A express
ao na equac
ao
c n log n c n + n
| {z }
residuo

se chama resduo. O objetivo na prova e mostrar, que o resduo e negativo.


Como fazer um bom palpite
Usar o resultado de recorrencias semelhantes.
Por exemplo, conside
rando a recorrencia T (n) = 2T ( n2 + 17) + n, tem-se que T (n)
O(n log n).

122

6.2. Resolver recorrencias


Provar limites superiores (ou inferiores) e reduzir o intervalo de incerteza.
Por exemplo, para equac
ao do Mergesort podemos provar que T (n) =
(n) e T (n) = O(n2 ). Podemos gradualmente diminuir o limite superior
e elevar o inferior, ate obter T (n) = (n log n).
Usa-se o resultado do metodo de
arvore de recursao como limite hipotetico para o metodo da substituic
ao.
Exemplo 6.1
Vamos procurar o m
aximo de uma seq
uencia por divisao e conquista:
ximo
Ma
Entrada Uma seq
uencia a e dois ndices l, r tal que al , . . . , ar1 e definido.
Sada maxli<r ai
1
2

m1 := M (a, l, b(l + r)/2c


m2 := M (a, b(l + r)/2, rc

Isso leva a recorrencia


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

Algumas sutilezas nas resoluc


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

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


O(log n log log n)
Proposta de exerccios: 4.1-1, 4.1-2, 4.1-5 e 4.1-6 do Cormen (pag. 54 da edicao
traduzida).

123

6. Divis
ao e conquista
Substituic
ao direta
Supomos que a recorrencia tem a forma
(
f (1)
caso n = 1
T (n) =
T (n 1) + f (n) caso contrario
Para resolver ele podemos substituir
T (n) = f (n) + T (n 1) = f (n) + f (n 1) + T (n 1) + f (n 2)
X
= =
f (i)
1in

(Os substituem uma prova por inducao.)


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

Exemplo 6.2
Na aula sobre a complexidade media do algoritmo Quicksort (veja pagina 59),
encontramos uma recorrencia da forma
T (n) = n + T (n 1)
cuja soluc
ao e

1in

i = n(n 1)/2.

Substituic
ao direta
Da mesma forma podemos resolver recorrencias como
(
f (1)
caso n = 1
T (n) =
T (n/2) + f (n) caso contrario
substituindo
T (n) = f (n) + T (n/2) = f (n) + f (n/2) + T (n/4)
X
= =
f (n/2i )
0ilog2 n

124

6.2. Resolver recorrencias


Exemplo 6.3
Ainda na aula sobre a complexidade media do algoritmo Quicksort (veja
p
agina 59), encontramos outra recorrencia da forma
T (n) = n + 2T (n/2).
Para colocar ela na forma acima, vamos dividir primeiro por n para obter
T (n)/n = 1 + T (n/2)/(n/2)
e depois substituir A(n) = T (n)/n, que leva `
a recorrencia
A(n) = 1 + A(n/2)
P
cuja soluc
ao e
cao T (n) =
0ilog2 n 1 = log2 n. Portanto temos a solu
n log2 n.
Observe que a an
alise n
ao considera constantes: qualquer funcao cn log2 n
tambem satisfaz a recorrencia. A soluc
ao exata e determinada pela base; uma
alternativa e concluir que T (n) = (n log2 n).

Tambem podemos generalizar isso. Para


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

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

= nlogc2 c1

O caso mais complicado e o caso combinado


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

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


T (n)
log n
c1 c2

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

obtemos

f (n)
log n
c1 c2

125

6. Divis
ao e conquista
logc2 n

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

temos

A(n) = A(n/c2 ) +

f (n)
log n
c1 c2

uma forma que sabemos resolver:


A(n) =

f (n/ci2 )

X
0ilogc2 n

logc2 n/ci2

c1

log n
c1 c2 0ilogc2 n

f (n/ci2 )ci1

Ap
os de resolver essa recorrencia, podemos re-substituir para obter a solucao
de T (n).
Exemplo 6.4
Multiplicac
ao de n
umeros inteiros A multiplicacao de n
umeros binarios (veja
exerccio 6.3) gera a recorrencia
T (n) = 3T (n/2) + cn
Dividindo por 3log2 n obtemos
cn
T (n)
T (n/2)
= log n/2 + log n
3log2 n
3 2
3 2
e substituindo A(n) = T (n)/3log2 n temos
A(n) = A(n/2) +
=c

cn
3log2 n
n/2i

3log2 n/2i
X  3 i
2

0ilog2 n

cn
3log2 n

0ilog2 n

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

cn

e portanto
T (n) = A(n)3log2 n = 3cnlog2 3 = (n1.58 )

126

6.2. Resolver recorrencias


6.2.2. M
etodo da
arvore de recurs
ao
O m
etodo da
arvore de recurs
ao
Uma
arvore de recurs
ao apresenta uma forma bem intuitiva para a analise de
complexidade de algoritmos recursivos.
Numa
arvore de recurs
ao cada n
o representa o custo de um u
nico subproblema da respectiva chamada recursiva
Somam-se os custos de todos os n
os de um mesmo nvel, para obter o
custo daquele nvel
Somam-se os custos de todos os nveis para obter o custo da arvore

Exemplo
Dada a recorrencia T (n) = 3T (bn/4c) + (n2 )
Em que nvel da
arvore o tamanho do problema e 1? No nvel i =
log4 n = log22 n .
Quantos nveis tem a
arvore? A
arvore tem log4 n + 1 nveis (0, 1, 2, 3,
..., log4 n).
Quantos n
os tem cada nvel? 3i .
n
4i .

Qual o tamanho do problema em cada nvel?

Qual o custo de cada nvel i da


arvore? 3i c( 4ni )2 .
Quantos n
os tem o u
ltimo nvel? (nlog4 3 ).
Plog4 (n) 2
Qual o custo da arvore?
n (3/16)i = O(n2 ).
i=0
Exemplo
nvel
0
1
2

nos
2

k (n ) SSSSS
ukkkk

)
((n/4)2 )
((n/4)2 ) ((n/4)2 )
SSS
ukkk

)
2 2
2 2
((n/4 ) ) ((n/4 ) ) ((n/42 )2 )

30
31
32

h = dlog4 ne

((n/4h )2 )

3h

127

6. Divis
ao e conquista
Prova por substituic
ao usando o resultado da
arvore de recorr
encia
O limite de O(n2 ) deve ser um limite restrito, pois a primeira chamada
recursiva e (n2 ).
Prove por induc
ao que T (n) = (n2 )
T (n) 3T (bn/4c) + cn2
2

3d bn/4c + cn2
3d(n/4)2 + cn2
3 2
=
dn + cn2
16
d n2

para ( 3d
16 + c) d, ou seja, para valores de d tais que d

16
13 c

Exemplo 6.5
Outro exemplo e a recorrencia T (n) = 3T (n/2) + cn da multiplicacao de
n
umeros bin
arios. Temos log2 n nveis na
arvore, o nvel i com 3i nos, tamanho
i
i
do problema n/2 , trabalho cn/2 por n
o e portanto (3/2)i n trabalho total por
log2 n
nvel. O n
umero de folhas e 3
e portanto temos
X
(3/2)i n + (3log2 n )
T (n) =
0i<log2 n


=n

(3/2)log2 n 1
3/2 1

+ (3log2 n )

= 2(nlog2 3 1) + (nlog2 3 )
= (nlog2 3 )
Observe que a recorrencia T (n) = 3T (n/2) + c tem a mesma solucao.
Resumindo o m
etodo
1. Desenha a
arvore de recurs
ao
2. Determina
o n
umero de nveis
o n
umero de n
os e o custo por nvel

128

6.2. Resolver recorrencias


o n
umero de folhas
3. Soma os custos dos nveis e o custo das folhas
4. (Eventualmente) Verifica por substituic
ao

Arvore
de recorr
encia: ramos desiguais
Calcule a complexidade de um algoritmo com a seguinte equacao de recorrencia
T (n) = T (n/3) + T (2n/3) + O(n)
Proposta de exerccios: 4.2-1, 4.2-2 e 4.2-3 do Cormen [7].
6.2.3. M
etodo Mestre
M
etodo Mestre
Para aplicar o metodo mestre deve ter a recorrencia na seguinte forma:
n
T (n) = aT
+ f (n)
b
onde:
a1
b>1
f (n) e uma func
ao assintoticamente positiva.
Se a recorrencia estiver no formato acima, ent
ao T (n) e limitada assintoticamente como:
1. Se f (n) = O(nlogb a ) para algum  > 0, ent
ao T (n) = (nlogb a )
2. Se f (n) = (nlogb a ), ent
ao T (n) = (nlogb a log n)
3. Se f (n) = (nlogb a+ ) para algum  > 0, e se af (n/b) cf (n) para
c < 1 e para todo n suficientemente grande, entao T (n) = (f (n))
Considerac
oes
Nos casos 1 e 3 f (n) deve ser polinomialmente menor, resp. maior que
nlogb a , ou seja, f (n) difere assintoticamente por um fator n para um
 > 0.
Os tres casos n
ao abrangem todas as possibilidades
Proposta de exerccios: 6.1 e 6.2.

129

6. Divis
ao e conquista
Algoritmo Potenciac
ao
o-Trivial (PT)
Potenciac
a
Entrada Uma base a R e um exponente n N.
Sada A potencia an .
1 if n = 0
2
return 1
3 else
4
return PT(a, n 1) a
5 end i f

Complexidade da potenciac
ao
(
(1)
T (n) =
T (n 1) + 1

se n = 0
se n > 0

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


Algoritmo Potenciac
ao para n = 2i

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

130

6.2. Resolver recorrencias


Complexidade da potenciac
ao-Npot
encia2
(
(1)
se n = 0
 
T (n) =
T ( n2 ) + c se n > 0
A complexidade dessa recorrencia e logartmica, ou seja, T (n) O(log n)
Busca Bin
aria
ria(i,f,x,S)
Busca-Bina
Entrada Um inteiro x, ndices i e f e uma seq
uencia S = a1 , a2 , . . . an de
n
umeros ordenados.
Sada Posic
ao i em que x se encontra na seq
uencia S ou caso x
/ S.
1 i f i = f then
2
i f ai = x return i
3
e l s e return
4 end ji f
k
5 m := f i
+i
2
6 i f x < am then
7
return Busca B i n
aria (i , m 1)
8 else
9
return Busca B i n
aria (m + 1 , f )
10 end i f

Complexidade da Busca-Bin
aria
(
(1)
se n = 1
n
T (n) =
T ( 2 ) + c se n > 1
A complexidade dessa recorrencia e logartmica, ou seja, T (n) O(log n)
Quicksort
Quicksort

131

6. Divis
ao e conquista

Entrada Indices l, r e um vetor a com elementos al , . . . , ar .


Sada a com os elementos em ordem n
ao-decrescente, i.e. para i < j temos
ai aj .
1 i f l < r then
2
m := P a r t i t i o n ( l , r , a ) ;
3
Quicksort (l ,m 1 ,a ) ;
4
Quicksort (m + 1 ,r ,a ) ;
5 end i f

Complexidade do Quicksort no pior caso


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

se n = 1
se n > 1

A complexidade dessa recorrencia e quadr


atica, ou seja, T (n) O(n2 )
Complexidade do Quicksort no melhor caso
(
(1)
se n = 1
T (n) =
2T ( n2 ) + (n) se n > 1
A complexidade dessa recorrencia e T (n) O(n log n)
Complexidade do Quicksort com Particionamento Balanceado
(
(1)
se n = 1
T (n) =
9n
n
T ( 10 ) + T ( 10 ) + (n) se n > 1
A complexidade dessa recorrencia e T (n) O(n log n)
Prova do Teorema Master
Consideremos o caso simplificado em que n = 1, b, b2 , ..., ou seja, n e
uma potencia exata de dois e assim n
ao precisamos nos preocupar com
tetos e pisos.

132

6.2. Resolver recorrencias


Prova do Teorema Master
Lema 4.2: Sejam a 1 e b > 1 constantes, e seja f (n) uma funcao nao
negativa definida sobre potencias exatas de b. Defina T (n) sobre potencias
exatas de b pela recorrencia:
(
T (n) = (1)
T (n) = aT ( nb ) + f (n)

se n = 1
se n = bi

Onde i e um inteiro positivo. Ent


ao
logb (n1)

T (n) = (nlogb a ) +

aj f (n/bj )

j=0

Prova do Teorema Master


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

g(n) =

aj f (n/bj )

j=0

1. Se f (n) = O(nlogb a ) para algum  > 0 R+ , entao T (n) = (nlogb a )


2. Se f (n) = (nlogb a ), ent
ao T (n) = (nlogb a lgn)
3. Se af (n/b) cf (n) para c < 1 e para todo n b, entao g(n) = (f (n))
Prova do Teorema Master
Lema 4.4: Sejam a 1 e b > 1 constantes, e seja f (n) uma funcao nao
negativa definida sobre potencias exatas de b. Defina T (n) sobre potencias
exatas de b pela recorrencia
(
T (n) = (1)
T (n) = aT ( nb ) + f (n)

se n = 1
se n = bi

onde i e um inteiro positivo. Ent


ao T (n) pode ser limitado assintoticamente
para potencias exatas de b como a seguir:

133

6. Divis
ao e conquista
Prova do M
etodo Mestre
1. Se f (n) = O(nlogb a ) para algum  > 0 R+ , entao T (n) = (nlogb a )
2. Se f (n) = (nlogb a ), ent
ao T (n) = (nlogb a lgn)
3. Se f (n) = (nlogb a+ ) para algum  > 0 R+ , e se a f (n/b) c f (n)
para c < 1 e para todo n suficientemente grande, entao T (n) = (f (n))

6.3. T
opicos
O algoritmo de Strassen
No captulo 2.2.2 analisamos um algoritmo para multiplicar matrizes quadradas com complexidade de O(n3 ) multiplicac
oes, sendo n o tamanho (n
umero
de linhas e colunas) das matrizes. Tambem mencionamos que existem algoritmos mais eficientes. A ideia do algoritmo de Strassen e: subdivide os
matrizes num produto A B = C em quatro sub-matrizes com o metade do
comprimento (e, portanto, um quarto de elementos):


A11
A21

A12
A22

B11
B21

B12
B22


=

C11
C21


C12
.
C22

Com essa subdivis


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

134

6.4. Exerccios
simples. Strassen inventou as equac
oes
M1 = (A11 + A22 )(B11 + B22 )
M2 = (A21 + A22 )B11
M3 = A11 (B12 B22 )
M4 = A22 (B21 B11 )
M5 = (A11 + A12 )B22
M6 = (A21 A11 )(B11 + B12 )
M7 = (A12 A22 (B21 + B22 )
C11 = M1 + M4 M5 + M7
C12 = M3 + M5
C21 = M2 + M4
C22 = M1 M2 + M3 + M6
(cuja verificac
ao e simples). Essas equac
oes contem somente sete multiplicacoes de matrizes de tamanho n/2, que leva `
a recorrencia
T (n) = 7T (n/2) + O(1)
para o n
umero de multiplicac
oes, cuja soluc
ao e T (n) = O(nlog2 7 ) = O(n2.81 ).

6.4. Exerccios
(Solucoes a partir da p
agina 228.)
Exerccio 6.1
Resolva os seguintes recorrencias
1. T (n) = 9T (n/3) + n
2. T (n) = T (2n/3) + 1
3. T (n) = 3T (n/4) + n log n
4. T (n) = 2T (n/2) + n log n
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

135

6. Divis
ao e conquista
8. T (n) = 3T (n/2) + n log n
Exerccio 6.2
Aplique o teorema mestre nas seguintes recorrencias:
1. T (n) = 9T (n/3) + n
2. T (n) = T (2n/3) + 1
3. T (n) = 3T (n/4) + n log n
4. T (n) = 2T (n/2) + n log n
Exerccio 6.3
Descreva o funcionamento dos problemas abaixo, extraia as recorrencias dos
algoritmos, analise a complexidade pelos tres metodos vistos em aula.
1. Produto de n
umero bin
arios (Exemplo 5.3.8 da Toscani&Veloso).
2. Algoritmo de Strassen para multiplicacao de matrizes (Cormen 28.2 e
captulo 6.3).
3. Encontrar o k-esimo elemento de uma lista nao ordenada (Cormen 9.3).

136

7. Backtracking
Algoritmos
Supondo um computador de 4.8GHz (4.8 bilh
oes de instrucoes por s) e
uma inst
ancia de tamanho n = 50 de um problema qualquer.
Suponha que o problema pode ser resolvido por tres algoritmos com as
complexidades n2 , 2n e 3n .
1. Para complexidade Alg1 = O(n2 ) 0, 0000025 segundos
2. Para complexidade Alg2 = O(2n ) 13 dias
3. Para complexidade Alg2 = O(3n ) 23080600 seculos!
Backtracking
Algoritmo de forca bruta refinado.
Explora sistematicamente todas possveis configuracoes do espaco de
busca.
Assume que uma soluc
ao e representada por vetores (v1 , v2 , v3 , ..., vn )
de elementos.
Percorre na forma de busca em profundidade o domnio dos vetores, ate
que as soluc
oes
otimas sejam encontradas.
Backtracking
A explorac
ao do espaco de soluc
oes pode ser representada por uma
arvore de busca em profundidade.

A arvore raramente e armazenada em mem


oria, mas apenas um caminho
com comprimento igual `
a altura da
arvore.

137

7. Backtracking

O problema das n-rainhas

Problema das n-rainhas


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

O problema das n-rainhas (simplificado: sem restric


ao da diagonal)

138

O que representam as folhas da


arvore de busca para este problema?

O problema das n-rainhas


A melhor soluc
ao conhecida para este problema e via Backtracking.
Existem nn formas de posicionar n rainhas no tablado
Restringindo uma rainha por coluna problema passa de nn para n!
Pode-se facilmente verificar que n! nn
Pela aproximac
ao de Stirling
n!

2n

 n n
e

(1 + O(1/n))

(7.1)

O problema das n-rainhas

139

7. Backtracking
Se considerarmos tambem a restric
ao de diagonal podemos reduzir ainda mais

o espaco de busca (neste caso, nenhuma soluc


ao e factvel)

Backtracking
Testa soluc
oes sistematicamente ate que a solucao esperada seja encontrada
Durante a busca, se a inserc
ao de um novo elemento nao funciona,
o algoritmo retorna para a alternativa anterior (backtracks) e tenta um
novo ramo
Quando n
ao h
a mais elementos para testar, a busca termina
apresentado como um algoritmo recursivo
E
O algoritmo mantem somente uma solucao por vez
Backtracking
Durante o processo de busca, alguns ramos podem ser evitados de ser
explorados
1. O ramo pode ser infactvel de acordo com restricoes do problema
2. Se garantidamente o ramo n
ao vai gerar uma solucao otima
O problema do caixeiro viajante
Encontrar uma rota de menor dist
ancia tal que, partindo de uma cidade inicial,
visita todas as outras cidades uma u
nica vez, retornando `a cidade de partida
ao final.

140

Problema do Caixeiro Viajante


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

O problema do caixeiro viajante

O problema do caixeiro viajante


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

141

7. Backtracking

O problema do caixeiro viajante


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

Vantagens x Desvantagens e Caractersticas Marcantes


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

142

Problema de Enumerac
ao de conjuntos
o de conjuntos
Enumerac
a
Inst
ancia Um conjunto de n itens S=a1 , a2 , a3 , ...an .
Soluc
ao Enumerac
ao de todos os subconjuntos de S.

A enumerac
ao de todos os conjuntos gera uma solucao de custo exponencial 2n .
Problema da Mochila
Problema da Mochila
Inst
ancia Um conjunto de n itens a1 , a2 , ...an e valores de importancia
vi e peso wi referentes a cada elemento i do conjunto; um valor K
referente ao limite de peso da mochila.
Soluc
ao Quais elementos selecionar de forma a maximizar o valor total
de import
ancia dos objetos da mochila e satisfazendo o limite de
peso da mochila?

O problema da Mochila fracion


ario e polinomial
O problema da Mochila 0/1 e NP-Completo
A enumeracao de todos os conjuntos gera uma solucao de custo
exponencial 2n
Soluc
ao via PD possui complexidade de tempo O(Kn) (pseudopolinomial) e de espaco O(K)
Problema de colorac
ao em grafos
o em Grafos
Problema de Colorac
a
Inst
ancia Um grafo G=(V,E) e um conjunto infinito de cores.

143

7. Backtracking

Soluc
ao Uma colorac
ao do grafo, i.e. uma atribuicao c : V C de cores
tal que vertices vizinhos n
ao tem a mesma cor: c(u) 6= c(v) para
(u, v) E.
Objetivo Minimizar o n
umero de cores |C|.

Colorac
ao de grafos de intervalo e um problema polinomial.
Para um grafo qualquer este problema e NP-completo.
Dois n
umeros s
ao interessantes nesse contexto:
O n
umero de clique (G): O tamanho maximo de uma clique que
se encontra como sub-grafo de G.
O n
umero crom
atico (G): O n
umero mnimo de cores necessarias
para colorir G.
Obviamente: (V ) (G)
Um grafo G e perfeito, se (H) = (H) para todos sub-grafos H.
Verificar se o grafo permite uma 2-coloracao e polinomial (grafo bipartido).
Um grafo k-partido e um grafo cujos vertices podem ser particionados
em k conjuntos disjuntos, nos quais n
ao ha arestas entre vertices de um
mesmo conjunto. Um grafo 2-partido e o mesmo que grafo bipartido.

Colorac
ao de Grafos
A colorac
ao de mapas e uma abstrac
ao do problema de colorir vertices.
Projete um algoritmo de backtracking para colorir um grafo planar
(mapa).
Um grafo planar e aquele que pode ser representado em um plano sem
qualquer intersecc
ao entre arestas.
Algoritmo O(nn ), supondo o caso em que cada area necessite uma cor
diferente

144

Teorema de Kuratowski: um grafo e planar se e somente se nao possuir


minor K5 ou K3,3 .
Teorema das Quatro Cores: Todo grafo planar pode ser colorido com
ate quatro cores (1976, Kenneth Appel e Wolfgang Haken, University of
Illinois)
Qual o tamanho m
aximo de um clique de um grafo planar?
Algoritmo O(4n ), supondo todas combinac
oes de area com quatro cores.
Existem 3n1 soluc
oes possveis (algoritmo O(3n )) supondo que duas
areas vizinhas nunca tenham a mesma cor.

De quantas cores precisamos?

f
a

e
d

De quantas cores precisamos?

f
a

f
a

e
d

Precisamos
de 4 cores!
Backtracking
bt-coloring

145

7. Backtracking

Entrada Grafo n
ao direcionado G=(V,E)
Sada Designac
ao de cores para cada vertice, sem que haja vertices vizinhos com a mesma cor e minimizando o n
umero de cores utilizadas
1
2
3
4
5
6
7
8
9
10

b o o l e a n bt c o l o r i n g ( i n t
a reaID , i n t c o r ) {
i f (
areaID > n) return true
i f (corOK(
areaID , cor ) ) {
mapCor[
areaID ] = cor
f o r ( int cor = 1 ; cor <= 4 ; cor++) {
i f ( bt coloring (
areaID + 1 , cor ) )
return true ;
end f o r
} return f a l s e ;
}

Backtracking
reaID, cor)
corOK (a
Entrada Grafo G=(V,E) e duas cores.
Sada true se a um n
o vizinho de
areaID foi designada cor e false caso
contr
ario.
1
2
3
4
5
6
7
8
9

b o o l e a n corOK ( i n t
a reaID , i n t c o r ) {
f o r ( int i =0; i<i |map[
areaID ] | ; i++) {
ithAdj = map[
areaID ] [ i ] ;
i f (mapCor[ ithAdj ] = cor )
return f a l s e ;
}
}
return ( t r u e )
}

De quantas cores precisamos?

146

c
d
e

De quantas cores precisamos?

d
e

c
d
e

Precisamos
de 3 cores!
Colorac
ao de Grafos
Existe um algoritmo O(n2 ) para colorir um grafo com 4 cores (1997,
Neil Robertson, Daniel P. Sanders, Paul Seymour).
Mas talvez sejam necess
arias menos que 4 cores para colorir um grafo!
Decidir se para colorir um grafo planar s
ao necessarias 3 ou 4 cores e
um problema NP-completo.

147

7. Backtracking
De quantas cores precisamos?

b
c

Roteamento de Veculos
Roteamento de Veculos
Inst
ancia Um grafo G=(V,A), um dep
osito v0 , frota de veculos com capacidade Q (finita ou infinita), demanda qi > 0 de cada no (q0 = 0,
dist
ancia di > 0 associada a cada aresta
Soluc
ao Rotas dos veculos.
Objetivo Minimizar a dist
ancia total.

Cada rota comeca e termina no dep


osito.
Cada cidade V \ v0 e visitada uma u
nica vez e por somente um veculo
(que atende sua demanda total).
A demanda total de qualquer rota n
ao deve superar a capacidade do
caminh
ao.
Roteamento de Veculos
Mais de um dep
osito
veculos com capacidades diferentes
Entrega com janela de tempo (perodo em que a entrega pode ser realizada
Periodicidade de entrega (entrega com restricoes de data)

148

Entrega em partes (uma entrega pode ser realizada por partes)


Entrega com recebimento: o veculo entrega e recebe carga na mesma
viagem
Entrega com recebimento posterior: o veculo recebe carga apos todas
entregas
...
Backtracking versus Branch & Bound
Backtracking: enumera todas as possveis solucoes com exploracao de
busca em profundidade.
Exemplo do Problema da Mochila: enumerar os 2n subconjuntos e
retornar aquele com melhor resultado.
Branch&Bound: usa a estrategia de backtracking
usa limitantes inferior (relaxac
oes) e superior (heursticas e propriedades) para efetuar cortes
explora a
arvore da forma que convier
aplicado apenas a problemas de otimizacao.
M
etodos Exatos
Problemas de Otimizac
ao Combinat
oria: visam minimizar ou maximizar
um objetivo num conjunto finito de soluc
oes.
Enumerac
ao: Backtracking e Branch&Bound.
Uso de cortes do espaco de busca: Planos de Corte e Branch&Cut.
Gerac
ao de Colunas e Branch&Price.
M
etodos n
ao exatos
Algoritmos de aproximac
ao: algoritmos com garantia de aproximacao
S = S .
Heursticas: algoritmos aproximados sem garantia de qualidade de solucao.
Ex: algoritmos gulosos n
ao
otimos, busca locais, etc.

149

7. Backtracking
Metaheursticas: heursticas guiadas por heursticas (meta=alem + heuriskein = encontrar).
Ex: algoritmos geneticos, busca tabu, GRASP (greedy randomized
adaptive search procedure), simulating de annealing, etc.

150

8. Algoritmos de aproximac
ao

8.1. Introduc
ao

Vertex cover
Considere

rtices (ingl. vertex cover)


Cobertura por ve
Inst
ancia Grafo n
ao-direcionado G = (V, E).
Soluc
ao Uma cobertura C V , i.e. e E : e C 6= .
Objetivo Minimiza |C|.

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

O que fazer?

151

8. Algoritmos de aproximac
ao

2
1
6

5
23

20

7
10

21

22

25

19

14
24

18

15
12

17
16

13

Simplificando o problema
Vertice de grau 1: Usa o vizinho.
Vertice de grau 2 num tri
angulo: Usa os dois vizinhos.

o de cobertura por ve
rtices
Reduc
a
Entrada Grafo n
ao-direcionado G = (V, E).

152

11

8.1. Introducao

Sada Um conjunto C V e um grafo G0 , tal que cada cobertura de


vertices contem C, e a uni
ao de C com a cobertura mnima de G0 e
uma cobertura mnima de G.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

Reduz ( G ) :=
while ( alguma r e g r a em b a i x o s e a p l i c a ) do
Regra 1 :
i f u V : deg(u) = 1 then
s e j a {u, v} E
C := C {v}
G := G {u, v}
end i f
Regra 2 :
i f u V : deg(u) = 2 then
s e j a {u, v}, {u, w} E
i f {v, w} E then
C := C {v, w}
G := G {u, v, w}
end i f
end while
return (C, G)

Arvore
de busca

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

minVertexCover (G):=
i f E = return
e s c o l h e {u, v} E
C1 := minVertexCover(G u) {u}
C2 := minVertexCover(G v) {v}
i f ( |C1 | < |C2 | ) then
return C1
else

153

8. Algoritmos de aproximac
ao

9
10

return C2
end i f

Soluc
ao
otima?
2
1
6

5
23

20

7
10

21

22

25

19

14
24

18

15
12

17
16

Problemas de otimizac
ao

154

13

11

8.1. Introducao
Defini
c
ao 8.1
Um problema de otimizac
ao e uma relac
ao bin
aria P I S com instancias
x I e soluc
oes y S, tal que (x, y) P e com
uma func
ao de otimizac
ao : P N (ou Q).
um objetivo: Encontrar mnimo ou m
aximo OPT(x) = opt{(x, y)|(x, y)
P}.
Tipo de problemas
Construc
ao: Dado x, encontra soluc
ao
otima y e o valor (x).
Avaliac
ao: Dado x, encontra valor
otimo OPT(x).
Decis
ao: Dado x, k N, decide se OPT(x) k (maximizacao) ou
OPT(x) k (minimizac
ao).

Convenc
ao
Escrevemos um problema de otimizac
ao na forma
Nome
Inst
ancia x
Soluc
ao y
Objetivo Minimiza ou maximiza (x, y).

Classes de complexidade
PO: Problemas de otimizac
ao com algoritmo polinomial.
NPO: Problemas de otimizac
ao tal que
1. Inst
ancias reconhecveis em tempo polinomial.
2. A relac
ao P e polinomialmente limita.
3. Para y arbitr
ario, polinomialmente limitado: (x, y) P decidvel
em tempo polinomial.
4. e comput
avel em tempo polinomial.

155

8. Algoritmos de aproximac
ao
NPO contem todos problemas de otimizacao, que satisfazem criterios
mnimos de tratabilidade.
Lembranca (veja definic
ao 11.1): P e polinomialmente limitada, se para solucoes
(x, y) P temos |y| p(|x|), para um polin
omio p.
Motivac
ao
Para v
arios problemas n
ao conhecemos um algoritmo eficiente.
No caso dos problemas NP-completos: solucao eficiente e pouco provavel.
O quer fazer?
Ideia: Para problemas da otimizac
ao, n
ao busca o otimo.
Uma solucao quase
otimo tambem ajuda.
O que
e quase? Aproximac
ao absoluta
A soluc
ao encontrada difere da soluc
ao
otima ao maximo um valor constante.
Erro absoluto:
D(x, y) = |OPT(x) (x, y)|
Aproximac
ao absoluta: Algoritmo garante um y tal que D(x, y) k.
Exemplo: Colorac
ao de grafos.
Contra-exemplo: Knapsack.
O que
e quase? Aproximac
ao relativa
A soluc
ao encontrada difere da soluc
ao
otima ao maximo um fator constante.
Erro relativo:
E(x, y) = D(x, y)/ max{OPT(x), (x, y)}.
Algoritmo -aproximativo ( [0, 1]): Fornece solucao y tal que E(x, y)
 para todo x.
Soluc
oes com  0 s
ao
otimas.
Soluc
oes com  1 s
ao pessimas.

156

8.1. Introducao
Aproximac
ao relativa: Taxa de aproximac
ao
Definic
ao alternativa
Taxa de aproximac
ao R(x, y) = 1/(1 E(x, y)) 1.
Com taxa r, o algoritmo e r-aproximativo.
(N
ao tem perigo de confus
ao com o erro relativo, porque r [1, ].)
Aproximac
ao relativa: Exemplos
Exemplo: Knapsack, Caixeiro viajante metrico.
Contra-exemplo: Caixeiro viajante.
Classe correspondente APX: r-aproximativo em tempo polinomial.
Aproximac
ao relativa

Exemplo: Cobertura por v


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

VC GV( G ) :=
(C, G) := Reduz ( G )
i f V = then
return C
else
e s c o l h e v V : deg(v) = (G) { grau m
aximo }
return C {v} VC-GV(G v)
end i f

157

8. Algoritmos de aproximac
ao

Proposi
c
ao 8.1
O algoritmo VC-GV e uma O(log |V |)-aproximacao.
Prova. Seja Gi o grafo depois da iterac
ao i e C uma cobertura otima (|C | =
OPT(G)).
A cobertura
otima C e uma cobertura para Gi tambem. Logo, a soma dos
graus dos vertices em C (contando somente arestas em Gi !) ultrapassa o
n
umero de arestas em Gi
X
(v) ||Gi ||
vC

e o grau medio satisfaz


i ) ||Gi || = ||Gi || .
(G
|C |
OPT(G)
Como o grau m
aximo e maior que o grau medio temos tambem
(Gi )

||Gi ||
.
OPT(G)

Com isso podemos estimar


X
0i<OPT

X
||Gi ||
||GOPT ||

|OPT(G)|
|OPT(G)|
0i<OPT
0i<OPT
X
= ||GOPT || = ||G||
(Gi )

(Gi )

0i<OPT

ou
X

(Gi ) ||G||/2

0i<OPT

i.e. a metade das arestas foi removido em OPT iteracoes. Essa estimativa
continua a ser v
alido, logo depois
OP T dlg ||G||e OP T d2 lg |G|e = O(OP T lg|G|)
iterac
oes n
ao tem mais arestas. Como em cada iteracao foi escolhido um
vertice, a taxa de aproximac
ao e lg |G|.

Exemplo: Buscar uma Cobertura por v
ertices

158

8.1. Introducao

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

VC B( G ) :=
(C, G) := Reduz ( G )
i f V = then
return C
else
e s c o l h e v V : deg(v) = (G) { grau m
aximo }
C1 := C {v} VC-B(G v)
C2 := C N (v) VC-B(G v N (v))
i f |C1 | < |C2 | then
return C1
else
return C2
end i f
end i f

Aproximac
ao: Motivac
ao
Queremos uma aproximac
ao
Quais soluc
oes s
ao aproximac
oes boas?
Problemas:
Tempo polinomial desejada
Aproximac
ao desejada (heurstica com garantia)
Freq
uentemente: a an
alise e o problema. Intuicao:
Simples verificar se um conjunto e uma cobertura.
Difcil verificar a minimalidade.
Exemplo: Outra abordagem
rtices
Cobertura por ve

159

8. Algoritmos de aproximac
ao

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

VC GE( G ) :=
(C, G) := Reduz ( G )
i f E = then
return C
else
e s c o l h e e = {u, v} E
return C {u, v} VC-GE(G {u, v})
end i f

Proposi
c
ao 8.2
Algoritmo VC-GE e uma 2-aproximac
ao para VC.
Prova. Cada cobertura contem ao menos um dos dois vertices escolhidos, i.e.
|C| VC-GE (G)/2 2OPT(G) VC-GE (G)

T
ecnicas de aproximac
ao
Aproximac
oes gulosas
Randomizac
ao
Busca local
Programac
ao linear
Programac
ao din
amica
Algoritmos seq
uenciais (online), p.ex. para particionamento.

8.2. Aproximac
oes com randomizac
ao
Randomizac
ao
Ideia: Permite escolhas rand
omicas (joga uma moeda)
Objetivo: Algoritmos que decidem correta com probabilidade alta.

160

8.2. Aproximacoes com randomizacao


Objetivo: Aproximac
oes com valor esperado garantido.
Minimizac
ao: E[A (x)] 2OPT(x)
Maximizac
ao: 2E[A (x)] OPT(x)
Randomizac
ao: Exemplo
xima, Maximum SAT
Satisfatibilidade ma
Inst
ancia F
ormula L(V ), = C1 C2 Cn em FNC.
Soluc
ao Uma atribuic
ao de valores de verdade a : V B.
Objetivo Maximiza o n
umero de cl
ausulas satisfeitas
|{Ci | [[Ci ]]a = v}| .

Nossa soluc
ao
1 SATR( ) :=
2
s e j a = (v1 , . . . , vk )
3
for a l l i [1, k] do
4
e s c o l h e vi = v com p r o b a b i l i d a d e 1/2
5
end f o r

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

X
1ik

E[[[Ci ]] = v] =

P [[[Ci ]] = v] = (1 2l )n.

1ik

161

8. Algoritmos de aproximac
ao
Outro exemplo
Cobertura por vertices guloso e randomizado.
1 VCRG( G ) :=P
2
seja w
:= vV deg(v)
3
C :=
4
while E =
6 do
5
e s c o l h e v V com p r o b a b i l i d a d e deg(v)/w

6
C := C {v}
7
G := G v
8
end while
9
return C V
Resultado: E[VC-RG (x)] 2OPT(x).

8.3. Aproximac
oes gulosas
Problema de mochila (Knapsack)
Knapsack
Inst
ancia Itens X = [1, n] com valores vi N e tamanhos ti N , para
i X, um limite M , tal que ti M (todo item cabe na mochila).
P
Soluc
ao Uma selec
ao S X tal que iS ti M .
P
Objetivo Maximizar o valor total iS vi .

Observac
ao: Knapsack e NP-completo.
Como aproximar?
Ideia: Ordene por vi /ti (valor medio) em ordem decrescente e enche
o mochila o mais possvel nessa ordem.
Abordagem
1 KG( vi , ti ) :=
2
o r d e n e o s i t e n s t a l que vi /ti vj /tj , i < j .
3
f o r i X do
4
i f ti < M then

162

8.3. Aproximacoes gulosas


5
6
7
8
9

S := S {i}
M := M ti
end i f
end f o r
return S
Aproximac
ao boa?
Considere
v1 = 1, . . . , vn1 = 1, vn = M 1
t1 = 1, . . . , tn1 = 1, tn = M = kn

k N arbitrario

Ent
ao:
v1 /t1 = 1, . . . , vn1 /tn1 = 1, vn /tn = (M 1)/M < 1
K-G acha uma soluc
ao com valor (x) = n1, mas o otimo e OPT(x) =
M 1.
Taxa de aproximac
ao:
OPT(x)/(x) =

M 1
kn 1
kn k
=

=k
n1
n1
n1

K-G n
ao possui taxa de aproximac
ao fixa!
Problema: N
ao escolhemos o item com o maior valor.
Tentativa 2: Modificac
ao
1 KG ( vi , ti ) :=
2
S1 := P
KG( vi , ti )
3
v1 :=
iS1 vi
4
S2 := P
{argmaxi vi }
5
v2 :=
iS2 vi
6
i f v1 > v2 then
7
return S1
8
else
9
return S2
10
end i f

163

8. Algoritmos de aproximac
ao
Aproximac
ao boa?
O algoritmo melhorou?
Surpresa
Proposi
c
ao 8.3
K-G e uma 2-aproximac
ao, i.e. OPT(x) < 2K-G0 (x).
Prova. Seja j o primeiro item que K-G n
ao coloca na mochila. Nesse ponto
temos valor e tamanho
X
vj =
vi K-G (x)
1i<j

aj =

ai M

1i<j

Afirmac
ao: OPT(x) < vj + vj . Nesse caso
1. Seja vj vj .
OPT(x) < 2vj 2K-G (x) 2K-G0
2. Seja vj > vj
OPT(x) 2vj 2vmax 2K-G0
Prova da afirmac
ao:
OPT(x) vj +

vj
(M aj )
aj
|
{z
}

< vj + vj

densidade mais alto no resto

porque aj + aj > M M aj < aj

aj nao cabe mais




Problemas de particionamento
Bin packing (BP): Particionamento em baldes (PB).
Bin packing
Inst
ancia Seq
uencia de itens v1 , . . . , vn , vi ]0, 1], vi Q+

164

8.3. Aproximacoes gulosas

Soluc
ao Partic
ao
i [1, n].

1ik

Pi = [1, n] tal que

jP i

vj 1 para todos

Objetivo Minimiza o n
umero de partic
oes (baldes) k.

Abordagem?
Ideia simples: Proximo que cabe (PrC).
Por exemplo: Itens 6, 7, 6, 2, 5, 10 com limite 12.

Aproximac
ao?
Interessante: PrC e 2-aproximac
ao.
Observac
ao: PrC e um algoritmo on-line.

165

8. Algoritmos de aproximac
ao
P
Prova. Seja B o n
umero de baldes usadas, V =
1in vi . B 2 dV e
porque duas baldes consecutivas contem uma soma > 1. Mas precismaos ao
menos B dV e baldes, logo OPT(x) dV e. Portanto, PrC (x) 2 dV e
2OPT(x).


Aproximac
ao melhor?

Isso e o melhor possvel!

Considere os 4n itens

1/2, 1/(2n), 1/2, 1/(2n), . . . , 1/2, 1/(2n)


{z
}
|
2n vezes

O que faz PrC? PrC (x) = 2n: baldes com

Otimo:
n baldes com dois elementos de 1/2 + um com 2n elementos de
1/(2n). OPT(x) = n = 1.

166

8.3. Aproximacoes gulosas

Portanto: Assintoticamente a taxa de aproximacao 2 e estrito.


Melhores estrat
egias
Primeiro que cabe (PiC), on-line, com estoque na memoria
Primeiro que cabe em ordem decrescente: PiCD, off-line.
Taxa de aproximac
ao?
PiC (x) d1.7OPT(x)e
PiCD (x) 1.5OPT(x) + 1
Prova. Da segunda taxa de aproximac
ao: Considere a particao ABCD =
{v1 , . . . , vn } com
A = {vi | vi > 2/3}
B = {vi | 2/3 vi > 1/2}
C = {vi | 1/2 vi > 1/3}
D = {vi | 1/3 vi }
PiCD primeiro vai abrir |A| baldes com os itens em A e depois |B| baldes com
os itens em B. Temos que analisar o que acontece com os itens em C e D.

167

8. Algoritmos de aproximac
ao
Hip
otese: Um balde contem somente itens do tipo D. Logo: Os outros baldes
tem espaco livre menos que 1/3. Portanto:


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

Aproximac
ao melhor?
Tese doutorado D. S. Johnson, 1973, 70 pag
PiCD (x)

11
OPT(x) + 4
9

PiCD (x)

11
OPT(x) + 3
9

Baker, 1985

8.4. Esquemas de aproximac


ao
Novas considerac
oes
Freq
uentemente uma r-aproximac
ao n
ao e suficiente. r = 2: 100% de
erro!
Existem aproximac
oes melhores? p.ex. para SAT? problema do mochila?

168

8.5. Exerccios
Desej
avel: Esquema de aproximac
ao em tempo polinomial (EATP);
polynomial time approximation scheme (PTAS)
Para cada entrada e taxa de aproximac
ao r:
Retorne r-aproximac
ao em tempo polinomial.
Um exemplo: Mochila m
axima (Knapsack)
Problema de mochila (veja p
agina 106):
n itens com valor vi , peso wi .
Mochila de tamanho W .
Escolher subconjunto de itens que cabe em W de maior peso total.
P
Algoritmo MM-PD com programac
ao din
amica: tempo O(n i vi ).
Desvantagem: Pseudo-polinomial.

8.5. Exerccios
Exerccio 8.1
Um aluno prop
oe a seguinte heurstica para Binpacking: Ordene os itens em
ordem crescente, coloca o item com peso m
aximo junto com quantas itens de
peso mnimo que e possvel, e depois continua com o segundo maior item, ate
todos itens foram colocados em bins. Temos o algoritmo
1 o r d e ne i t e n s em ordem c r e s c e n t e
2 m: = 1 ; M:=n
3 while (m<M) do
4
a b r e novo balde , c o l o c a vM , M := M 1
5
while ( vm cabe e m < M ) do
6
c o l o c a vm no b a l d e a t u a l
7
m := m + 1
8
end while
9 end while
um algoritmo de aproximacao? Caso
Qual a qualidade desse algoritmo? E
sim, qual a taxa de aproximac
ao dele? Caso n
ao porque?
Exerccio 8.2
Um aluno prop
oe o seguinte pre-processamento para o algoritmo SAT-R de
aproximac
ao para MAX-SAT (p
agina 161): Caso a instancia contem cla
usulas

169

8. Algoritmos de aproximac
ao
com um u
nico literal, vamos escolher uma delas, definir uma atribuicao parcial
que satisfaz-la, e eliminar a vari
avel correspondente. Repetindo esse procedimento, obtemos uma inst
ancia cujas cla
usulas tem 2 ou mais literais. Assim,
obtemos l 2 na an
alise do algoritmo, o podemos garantir que E[X] 3n/4,
i.e. obtemos uma 4/3-aproximac
ao.
Este an
alise e correto ou n
ao?

170

Parte III.
Teoria de complexidade

171

9. Do algoritmo ao problema
9.1. Introduc
ao
Motivac
ao
An
alise e projeto: Foca em algoritmos.
Teoria de complexidade: Foca em problemas.
Qual a complexidade intrnsica de problemas?
Classes de complexidade agrupam problemas.
Interesse particular: Relac
ao entre as classes.
Abstrac
oes: Alfabetos, linguagens
Seja um alfabeto finito de smbolos.
Codificac
ao: Entradas e sadas de um algoritmo sao palavras sobre o
alfabeto .
Tipos de problemas:
Problema construtivo: Func
ao Alternativa: relacao R

.
Problema de decis
ao: Func
ao {S, N } Equivalente: conjunto

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

Defini
c
ao 9.1
Uma linguagem e um conjunto de palavras sobre um alfabeto: L .

173

9. Do algoritmo ao problema
Modelo de computac
ao: M
aquina de Turing

Foco: Estudar as limitac


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

Alan Mathison
Turing (*1912,
+1954)

Computing is normally done by writing certain symbols on paper.


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

M
aquina de Turing

174

9.1. Introducao

M
aquina de Turing (MT)
M = (Q, , , )
Alfabeto de entrada (sem branco )
Conjunto de estados Q entre eles tres estados diferentes:
Um estado inicial q0 Q, um que aceita qa Q e um que rejeita
qr Q.
Alfabeto de fita (inclusive

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


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

M
aquina de Turing: Operac
ao
Incio da computac
ao:
No estado inicial q0 com cabeca na posicao mais esquerda,
com entrada w escrita na esquerda da fita, resto da fita em
branco.
Computac
ao: No estado q lendo um smbolo a aplica uma regra qa
q 0 a0 D (um L na primeira posic
ao n
ao tem efeito) ate

175

9. Do algoritmo ao problema
n
ao encontrar uma regra: a computacao termina, ou
entrar no estado qa : a computac
ao termina e aceita, ou
entrar no estado qr : a computac
ao termina e rejeita.
Outra possibilidade: a computac
ao nao termina.
Exemplo 9.1 (Decidir wwR )

Tabela da transic
ao
Seja = {0, 1}. Uma m
aquina de Turing que reconhece a linguagem {wwR |w

} e

Notac
ao gr
afica

176

9.1. Introducao
(convenc
oes e abreviac
oes do Turing machine simulator; veja pagina da disciplina).

M
aquinas n
ao-determinsticas
Observe: Num estado q lendo smbolo a temos exatamente uma regra
da forma qa q 0 a0 D.
Portanto a m
aquina de Turing se chama determinstica (MTD).
Caso temos mais que uma regra que se aplica em cada estado q e smbolo
a a m
aquina e n
ao-determinstica (MTND).
A func
ao de transic
ao muda para
: Q P(Q {L, R})

Linguagem de uma MTD


O conjunto de palavras que uma MTD M aceita e a linguagem reconhecida de M .
L(M ) = {w | M aceita w}
Uma linguagem tal que existe um MTD M que reconhece ela e Turingreconhecvel por M .
L Turing-reconhecvel M : L = L(M )
Observe que uma MTD nem sempre precisa parar. Se uma MTD M
sempre para, ela decide a sua linguagem.
Uma linguagem Turing-reconhecvel por uma MTD M que sempre para
e Turing-decidvel.
L Turing-decidvel M : L = L(M ) e M sempre para
Linguagem de uma MTND
Conjunto de linguagens Turing-reconhecveis: linguagens recursivamente
enumer
aveis ou computavelmente enumer
aveis.
Conjunto de linguagens Turing-decidveis: linguagens recursivas ou comput
aveis.

177

9. Do algoritmo ao problema
Para uma m
aquina n
ao-determinstica temos que modificar a definicao:
ela precisa somente um estado que aceita e
ela reconhece a linguagem
L(M ) = {w | existe uma computacao tal que M aceita w}
ela decide uma linguagem se todas computacoes sempre param.
M
aquina de Turing n
ao-determinstica
Resposta sim, se existe uma computac
ao que responde sim.

Robustez da definic
ao
A definic
ao de uma MTD e robusto: as seguintes modificacoes tem poder
computacional equivalente:
1. Uma MT com k > 1 fitas,
2. uma MT com fita dupla infinita,
3. uma MT com alfabeto restrito = {0, 1},
4. uma MTND e
5. uma MT com fita de dois ou mais dimensoes.
O poder computacional tambem e equivalente com varios outros modelos
de computac
ao (p.ex. c
alculo lambda, m
aquina RAM, automato celular):
Tese de Church-Turing.
Prova. (Rascunho.)

178

9.1. Introducao
1. Seja aij o smbolo na posic
ao j da fita i e li o ndice do u
ltima smbolo
usado na fita i. A m
aquina com u
nica fita representa os k fitas da forma
#a11 . . . a1l1 # . . . #ak1 . . . aklk .
Para representar as posic
oes da cabecas, usamos smbolos marcados com
um ponto da forma a.
A simulac
ao procede em tres passos: (i) Determinar os smbolos em baixa das cabecas em um passo (ii) executar as
operac
oes da k cabecas. Caso um cabeca ultrapassa a direita da representac
ao, a MTD estende ela, copiando todos smbolos da direita mais
uma para direita.
2. Seja ai o smbolo na posic
ao i da fita, com i Z. A maquina com u
nica
fita meio-infinito representa essa fita como
a0 h< a1 a1 ih< a2 a2 i . . . .
com smbolos novos em 2 . Os estados desse maquina sao Q{T, B}.
Eles representam se a cabeca trabalho em cima ou em baixo, com regras
modificadas adequadamente. Ela tambem tem regras para passar de
cima para baixo e vice versa.
3. Cada smbolo e representado como seq
uencia de 0, 1 do comprimento
w = dlog ||e. Na simulac
ao, a MTD primeiro leia os w smbolos atuais, determina e escreve a representac
ao do novo smbolo e depois se
movimenta w posic
oes para esquerda ou direita.
4. Uma simulac
ao das configurac
oes, listando todas as execucoes possveis
sistematicamente.

Decibilidade versus complexidade
Qual e o poder computacional?
Surpreendentemente (?), v
arios problemas n
ao sao decidveis.
Exemplo: O Entscheidungsproblem de Hilbert, o problema de parada,
etc.
A equivalencia dos modelos significa que o modelo concreto nao importa?
Sim para computabilidade, n
ao para complexidade!

179

9. Do algoritmo ao problema
Exemplo 9.2 (Desvio: M
aquina universal)
Considere a m
aquina M = ({u, d}, {a, b}, {a, b, }, ) com
= {ua ubL, ub uaL, u dbR, da u R, db daR, d uaL}.
Essa m
aquina e universal? Veja http://www.wolframscience.com/prizes/
tm23.
Obs: Aparentemente o problema foi resolvido em 24/10/2007.

180

10. Classes de complexidade


10.1. Definic
oes b
asicas
Complexidade pessimista
Recursos b
asicos: tempo e espaco.
A complexidade de tempo (pessimista) e uma funcao
t:NN
tal que t(n) e o n
umero m
aximo de passos para entradas de tamanho n.
A complexidade de espaco (pessimista) e uma funcao
s:NN
tal que s(n) e o n
umero m
aximo de posic
oes usadas para entradas de
tamanho n.
Uma MTND tem complexidades de tempo t(n) ou espaco s(n), se essas func
oes s
ao limites superiores para todas computacoes possveis de
tamanho n.
Func
oes construtveis
Em que segue, nos vamos considerar somente funcoes t e s que sao
tempo-construtveis e espaco-construtveis.
t(n) e tempo-construtvel: existe uma MTD que tem a complexidade de
tempo t(n) e precisa t(n) passos para uma entrada.
s(n) e espaco-construtvel: existe uma MTD que tem a complexidade de
espaco s(n) e precisa s(n) posic
oes para uma entrada.
Exemplos: nk , log n, 2n , n!, . . ..

181

10. Classes de complexidade


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

Hierarquia b
asica
Observac
ao
DTIME[F (n)] NTIME[F (n)] DSPACE[F (n)] NSPACE[F (n)]
Definic
oes conhecidas:
[
DTIME[nk ];
P=
k0

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

NP =

NTIME[nk ]

k0

NSPACE =

NSPACE[nk ]

k0

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


182

10.2. Hierarquias basicas


Classes de complexidade

Zoologico de complexidade
10.2. Hierarquias b
asicas
Acelerac
ao
Teorema 10.1
Podemos comprimir ou acelerar computac
oes com um fator constante. Para
todos c > 0 no caso de espaco temos
L DSPACE[s(n)] L DSPACE[cs(n)]
L NSPACE[s(n)] L NSPACE[cs(n)]
e no caso do tempo, para m
aquinas de Turing com k > 1 fitas e t(n) = (n)
L DTIME[s(n)] L DTIME[cs(n)]
L NTIME[s(n)] L NTIME[cs(n)]
Prova. (Rascunho.) A ideia e construir uma MT M 0 que simula uma MT M
executando m passos em um passo. M 0 comeca de copiar a entrada para uma
outra fita, codificando cada m smbolos em um smbolo em tempo n + dn/me.
Depois a simulac
ao comeca. Em cada passo, M 0 leia os smbolos na esquerda
e direta e na posic
ao atual em tempo 4. Depois ela calcula os novos estados
no controle finito, e escreve os tres smbolos novos em tempo 4. Logo, cada m
passos podem ser simulados em 8 passos em tempo
n + dn/me + d8t(n)/me n + n/m + 8t(n)/m + 2 3n + 8t(n)/n
que para cm 16 8/m c/2 e n suficientemente grande nao ultrapassa
ct(n). O n
umero finito de palavras que n
ao satisfazem esse limite superior e
reconhecido diretamente no controle finito.

Hierarquia de tempo (1)
possvel que a decis
E
ao de todos problemas tem um limite superior (em
termos de tempo ou espaco)? N
ao.
Teorema 10.2
Para t(n) e s(n) total recursivo, existe um linguagem L tal que L 6 DTIME[t(n)]
ou L 6 DSPACE[s(n)], respectivamente.

183

10. Classes de complexidade


Prova. (Rascunho). Por diagonalizac
ao. As maquinas de Turing sao enumer
aveis: seja M1 , M2 , . . . uma enumerac
ao deles e seja x1 , x2 , . . . uma enumerac
ao das palavras em . Define
L = {xi | Mi na
o aceita xi em tempo t(|xi |)}.
Essa linguagem e decidvel: Uma MT primeira computa t(n) (que e possvel
porque t(n) e recursivo e total.). Depois com entrade xi , ela determina i e a
m
aquina Mi correspondente e simula Mi para t(n) passos. Se Mi aceita, ela
rejeita, sen
ao ela aceita.
Essa linguagem n
ao pertence a DTIME[t(n)]. Prova por contradicao: Seja
L = L(Mi ). Ent
ao xi L? Caso sim, Mi n
ao aceita em tempo t(n), uma contradic
ao. Caso n
ao, Mi n
ao aceita em tempo t(n), uma contradicao tambem.

Hierarquia de tempo (2)
Alem disso, as hierarquias de tempo s
ao razoavelmente densos:
Teorema 10.3 (Hartmanis,Stearns)
Para f, g com g tempo-construtvel e f log f = o(g) temos
DTIME(f ) ( DTIME(g).
Para func
oes f, g, com g(n) log2 n espaco-construtvel e f = o(g) temos
DSPACE(f ) ( DSPACE(g).
Prova. (Rascunho.) Para provar o segundo parte (que e mais facil) temos
que mostrar que existe uma linguagem L tal que L DSPACE[g] mas
L 6 DSPACE[f ]. Vamos construir uma MT M sobre alfabeto de entrada =
{0, 1} cuja linguagem tem essa caracterstica. A ideia basica e diagonalizacao:
com entrada w simula a m
aquina Mw com entrada w e garante de nunca
reconhecer a mesma linguagem que Mw caso ela e limitada por f .
Considerac
oes:
1. Temos que garantir que M precisa n
ao mais que g(n) espaco. Portanto,
M comeca de marcar g(|w|) espaco no comeco (isso e possvel porque g
e espaco-construtvel). Caso a simulac
ao ultrapassa o espaco marcado,
M rejeita.
2. Nos temos que garantir que M pode simular todas maquinas que tem
limite de espaco f (n). Isso tem duas problemas (a) M tem um alfabeto
de fita fixo, mas a m
aquina simulada pode ter mais smbolos de fita.

184

10.2. Hierarquias basicas


Portanto, a simulac
ao precisa um fator c1 de espaco a mais. (b) Por
definic
ao, para f o(g) e suficiente de ter f cg a partir de um
n > n0 . Logo para entrada |w| n0 o espaco g(n) pode ser insuficiente
para simular qualquer m
aquina que precisa espaco f (n). Esses assuntos
podem ser resolvidos usando uma enumerac
ao de MT (com alfabeto )
tal que cada m
aquina tem codificac
oes de comprimento arbitrario (por
exemplo permitindo hM i10n ).
3. Alem disso, temos que garantir que a simulacao para. Portanto M
usa um contador com O(log n) espaco, e rejeita caso a simulacao ultraf (n)
passa c2
passos; c2 depende das caractersticas da maquina simulada
(n
umero de estados, etc.).
Com essas preparac
oes, com entrada w, M construa Mw , verifica que Mw e
uma codificac
ao de uma MT e depois simula Mw com entrada w. M rejeita
se Mw aceita e aceita se Mw rejeita. N
ao tem m
aquina que, em espaco f (n)
reconhece L(M ). Sen
ao, caso M 0 seria uma m
aquina desses, com entrada
w = hM 0 i01n para n suficientemente grande M consegue de simular M 0 e
portanto, se w M 0 ent
ao w 6 M e se w 6 M 0 ent
ao w M , uma contradicao.
A ideia da prova do primeiro parte e essencialmente a mesma. A fator de
log f surge, porque para simular um MT um dado n
umero de passos por uma
outra, e necess
ario contar o n
umero de passos ate f (n) em log f (n) bits. Com
uma simulac
ao mais eficiente (que n
ao e conhecida) seria possvel de obter um
teorema mais forte.

Espaco polinomial
Teorema 10.4 (Savitch)
Para cada func
ao S(n) log2 n (espaco-construtvel)
2

NSPACE[S(n)] DSPACE[S(n) ]
Corol
ario: DSPACE = NSPACE
N
ao-determinismo ajuda pouco para espaco!
Walter
J. Savitch
(*1943)
Prova. (Rascunho.) Se X NSPACE[T (n)], o tempo e limitado por um
cS(n) . A construc
ao do Savitch procura deterministicamente uma transicao do
estado inicial para um estado final com menos que cS(n) passos. A abordagem

185

10. Classes de complexidade


e divis
ao e conquista: Para ver, se tem uma transicao A B com menos de
2i passos, tenta se tem um caminho A I e I B, cada um com 2i1 passos
para todas configurac
oes I com menos que S(n) lugares. A altura do arvore
de procura e O(S(n)) e o espaco da cada nvel tambem e O(S(n)), resultando
2
em O(S(n) ) para tudo.
A func
ao tem que ter S(n) log2 n, por que para a simulacao precisamos
tambem gravar a posic
ao de cabeca de entrada em cada nvel, que precisa
log2 n bits.

Espaco polinomial (2)

186

11. Teoria da NP-completude


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

Nome
REG

Tipo
3

Livre de contexto

CFL

Sensitiva ao contexto
Recursivamente
enumer
avel

CSL

RE

Aut
omato
Aut
omato finito (determinstico)
Aut
omato de pilha (n
aodeterminstico)
MT linearmente limitada
(n
ao-determinstico)
MT

Gram
atica
Regular
Livre de contexto
Sensitiva
ao
contexto
Sistema semiThue (sem restric
ao)

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


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

187

11. Teoria da NP-completude


Nosso interesse s
ao soluc
oes que podem ser escritas em tempo polinomial:
Defini
c
ao 11.1
Uma relacao bin
ario R e polinomialmente limitada se
p poly : (x, y) R : |y| p(|x|)

P e NP em termos de busca
P e NP tem definic
ao como classes de problemas de decisao.
A linguagem correspondente a uma relacao R e
LR = {x|y : (x, y) R}
A classe P: Linguagens LR tal que existe uma MTD que, com entrada
x LR , em tempo polinomial, busque (x, y) R ou responda, que nao
tem.
Essa definic
ao do P `
as vezes e chamado FP ou PF.
A classe NP: Linguagens LR tal que existe MTD que, com entrada (x, y),
decida se (x, y) R em tempo polinomial. y se chama certificado.

Exemplos de problemas em NP

CLIQUE = {hG, ki|Grafo n


ao-direcionado G com clique de tamanho k}
SAT = {hi| f
ormula satisfatvel da logica propositional em FNC}
TSP = {hM, bi|Matriz simetrica de distancias M que tem TSP-ciclo b}
COMPOSITE = {hni|n = m1 m2 com m1 , m2 > 1}

11.2. Reduco
es
Reduc
oes

188

11.2. Reducoes
Defini
c
ao 11.2 (Redu
c
ao em tempo polinomial)
Uma (many-one) reduc
ao entre duas linguagens L, L0 com alfabetos e 0 e

um func
ao total f : 0 tal que x L f (x) L0 . Se f e comput
avel em tempo polinomial, se chama uma reduc
ao em tempo polinomial ;
escrevemos L P L0 .
Defini
c
ao 11.3 (Problemas difceis e completos)
Dado uma classe de problemas C e um tipo de reducao , um problema L e
C--difcil, se L0 L para todos L0 C. Um problema L que e C--difcil e
completo, se L C.
Motivo: Estudar a complexidade relativa de problemas; achar problemas
difceis para separar classes.
Do interesse particular: A separac
ao de P e NP. Denotamos a classe de
problemas N P -completos NPC.

Caractersticas de P
Proposi
c
ao 11.1 (Fecho para baixo)
Se A P B e B P ent
ao A P.
Proposi
c
ao 11.2 (Transitividade)
P e transitivo, i.e. se A P B e B P C ent
ao A P C.
Prova. (Fecho para baixo.) Uma inst
ancia w A pode ser reduzido em
tempo polinomial para w0 B. Depois podemos simular B com entrada w0
em tempo polinomial. Como a composic
ao de polinomios e um polinomio,
A P.
(Transitividade.) Com o mesmo argumento podemos reduzir w A primeiro
para w0 B e depois para w00 C, tudo em tempo polinomial.

O problema de parada
O problema da parada
HALT = {hM, wi|MT M para com entrada w}
n
ao e decidvel.
Qual o caso com

189

11. Teoria da NP-completude

Parada limitada (ingl. bounded halt)


Inst
ancia MT M , entrada w e um n
umero n (em codificacao unaria).
Quest
ao M para em n passos?
Teorema 11.2
BHALT = {hM, w, 1n i|MT M para com entrada w em n passos}
e NP-completo.
Prova. BHALT NP porque podemos verificar uma execucao em n passos em
tempo polinomial. Observe que a codificac
ao de uma execucao em limitada
polinomialmente em termos da entrada hM, w, 1n i pela codificacao de n em
un
ario. Logo e suficiente de mostrar que qualquer problema em NP pode ser
reduzido para BHALT.
Para alguma linguagem L NP, seja M uma MTND com L = L(M ) que
aceita L em tempo nk . Podemos reduzir uma entrada w L em tempo
k
polinomial para w0 = hM, w, 1n i, temos w L w0 BHALT. Logo

L P BHALT.
Ladrilhar: Exemplo

190

11.2. Reducoes
Ladrilhar: Soluc
ao

Ladrilhar: Exemplo

Ladrilhar: O problema
Para um conjunto finito de cores C, o tipo de um ladrilho e uma funcao
t : {N, W, S, E} C.

191

11. Teoria da NP-completude

Ladrilhamento
Inst
ancia Tipos de ladrilhos t1 , . . . , tk e um grade de tamanho n n com
cores nas bordas. (Cada ladrilho pode ser representado por quatro
smbolos para as cores; a grade consiste de n2 ladrilhos em branco e
4n cores; uma inst
ancia tem tamanho O(k + n2 ).
Quest
ao Existe um ladrilhamento da grade tal que todas cores casam
(sem rotar os ladrilhos)?

Teorema 11.3 (Levin)


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

(q, a)

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

(q, a)
Alem disso, tem ladrilhos

192

11.2. Reducoes
(q, a)

(q, a)

(, a)

(q, L)

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

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


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

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

em

forma

normal

conjuntiva

Quest
ao Tem uma atribuic
ao a1 , . . . , an B que satisfaz ?

193

11. Teoria da NP-completude


Teorema 11.4 (Cook)
SAT e NP-completo.

Prova (1)
Objetivo: Provar Ladrilhamento P SAT.
Seja

Nx,y,c
Li,x,y

vari
avel o norte da posicao x, y tem cor c
S, W, E analogamente
^
Nx,y,c
:= Nx,y,ti (N )
cC
c6=ti (N )

Wx,y,ti (W )

Wx,y,c

cC
c6=ti (W )

Sx,y,ti (S)

Sx,y,c

cC
c6=ti (S)

Ex,y,ti (E)

^
cC
c6=ti (E)

Prova (2)

194

Ex,y,c

11.2. Reducoes
Sejam cx,y as cores na bordas. Seja a conjunc
ao de
^

Lc,x,y

Toda posic
ao tem um ladrilho

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

Cores corretas nas bordas N,S

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

Cores corretas nas bordas W,E

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

^
x[1,n]

^
y[1,n]

Ex,y,c Wx+1,y,c

Correspondencia E-W

Wx,y,c Ex1,y,c

Correspondencia W-E

Nx,y,c Sx,y+1,c

Correspondencia N-S

Sx,y,c Nx,y1,c

Correspondencia S-N

x[1,n[ y[1,n]

x]1,n] y[1,n]

x[1,n[ y[1,n[

x[1,n[ y]1,n]

Prova (3)
O n
umero de vari
aveis e o tamanho de e polinomial em n, k; pode
ser computado em tempo polinomial para uma instancia de Ladrilhamento.
Portanto, SAT e NP-difcil.
SAT NP, porque para f
ormula e atribuicao a, podemos verificar
a |= em tempo polinomial.
O significado do P = NP
Kurt G
odel 1958: Uma carta para John von Neumann
Obviamente, podemos construir uma m
aquina de Turing, que decide, para
cada f
ormula F da l
ogica de predicados de primeira ordem e cada n
umero natural n, se F tem uma prova do tamanho n (tamanho = n
umero de smbolos).
Seja (F, n) o n
umero de passos que a m
aquina precisa para isso, e seja
ao e como (n) cresce para uma maquina
(n) = maxF (F, n). A quest
possvel provar que (n) kn. Se existisse uma maquina com
otima. E
(n) kn (ou pelo menos (n) kn2 ), isso teria conseq
uencias da maior

195

11. Teoria da NP-completude


import
ancia. Assim, seria
obvio, apesar da indecibilidade do Entscheidungsproblem, poderia-se substituir completamente o raciocnio do matematico em
quest
oes de sim-ou-n
ao por m
aquinas. [25]
Em original a carta diz
Man kann offenbar leicht eine Turingmaschine konstruieren, welche von
jeder Formel F des engeren Funktionenkalk
uls u. jeder nat
url. Zahl n
zu entscheiden gestattet, ob F einen Beweis der L
ange n hat [L
ange
= Anzahl der Symbole]. Sei (F, n) die Anzahl der Schritte, die die
Maschine dazu ben
otigt u. sei (n) = maxF (F, n). Die Frage ist,
wie rasch (n) f
ur eine optimale Maschine w
achst. Man kann zeigen
(n) k n. Wenn es wirklich eine Maschine mit (n) k n (oder auch
nur k n2 ) g
abe, h
atte das Folgerungen von der gr
ossten Tragweite.
Es w
urde n
amlich offenbar bedeuten, dass man trotz der Unl
osbarkeit
des Entscheidungsproblems die Denkarbeit des Mathematikers bei jaoder-nein Fragen vollst
andig durch Maschinen ersetzen k
onnte.

A significado do P = NP
Centenas de problemas NP-completos conhecidos seriam tratavel.
Todos os problemas cujas soluc
oes s
ao reconhecidas facilmente (polinomial), teriam uma soluc
ao f
acil.
Por exemplo na inteligencia artificial: planejamento, reconhecimento de
linguagens naturais, vis
ao, talvez tambem composicao da m
usica, escrever ficc
ao.
A criptografia conhecida, baseada em complexidade, seria impossvel.

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


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

196

11.2. Reducoes

Decis
ao A matriz e consistente (tem uma configuracao dos campos escondidos, que podem ser bombas ou livres tal que os n
umeros sao
corretos)?

O mundo agora
O milagre da NP-completude
Qualquer problema em NP tem uma reducao polinomial para SAT!
Por que n
ao usar s
o SAT? (soluc
oes em 1.3n )?
Teorema 11.5 (Ladner [19])
Se P 6= N P , existe uma linguagem L N P que nem
e NP-completo nem em P.

Stephen Arthur
Cook (*1939)

Leonid Levin
(*1948)

197

12. Fora do NP
Classes fora do P-NP

L = DSPACE[log n]
NL = NSPACE[log n]
[
k
EXPTIME =
DTIME[2n ]
k>0

NEXPTIME =

NTIME[2n ]

k>0

EXPSPACE =

DSPACE[2n ]

k>0

NEXPSPACE =

NSPACE[2n ]

k>0

Co-classes
Defini
c
ao 12.1 (Co-classes)
Para uma linguagem L, a linguagem complementar e L = \ L. Para uma
classe de complexidade C, a co-classe co C = {L|L C} e a classe das
linguagens complementares.
Proposi
c
ao 12.1
P = co P.
Qual problema pertence `
a NP?
CLIQUE, SAT, TSP, COMPOSITE.
Prova. Seja L P. Logo existe um MTD M tal que L = L(M ) em tempo
nk . Podemos facilmente construir uma MTD que rejeita se M aceita e aceita
se M rejeita.


199

12. Fora do NP
A classe co-NP
A definic
ao da classe NP e unilateral. Por exemplo, considere
TAUT
Inst
ancia F
ormula proposicional em forma normal disjuntiva .
Decis
ao e uma tautologia (Todas as atribuicoes satisfazem )?

Uma prova sucinta para esse problema nao e conhecido, entao suponhamos que TAUT 6 NP.
Em outras palavras, NP parece de n
ao ser fechado sobre a complementac
ao:
co-NP 6= NP ?
Proposi
c
ao 12.2
Se L NPC ent
ao L co-NP NP = co-NP.
Proposi
c
ao 12.3
TAUT e co-NP-completo.
Prova. (Proposic
ao 12.2.) Seja L NPC. (): Seja L co-NP. Se L0 NP,
0
temos L P L co-NP, logo NP co-NP. Se L0 co-NP, entao L0 NP e
L0 P L co-NP, logo L0 co-NP e L0 NP. (): Como L NPC NP, e
NP = co-NP, tambem L co-NP.

Prova. (Proposic
ao 12.3, rascunho.) TAUT co-NP, porque uma MT com
um estado universal pode testar todas atribuicoes das variaveis proposicionais
e aceita se todas s
ao verdadeiras.
Para provar a completude, temos que provar, que toda linguagem L co-NP P
TAUT. A prova e uma modificac
ao da prova do teorema de Cook: Com entrada w L produzimos uma f
ormula w usando o metodo de Cook. Temos
w L w satisfatvel
w L w insatisfatvel

pela def. de w
negacao da afirmacao

w e tautologia


200

12.1. De P ate PSPACE


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

Ou: Dado um certificado, verific


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

Ou: Dado um falsificado, falsific


avel em tempo polinomial.

O mundo da complexidade ao redor do P

12.1. De P at
e PSPACE
O mundo inteiro (2)

201

12. Fora do NP

Problemas PSPACE-completos
N
ao sabemos, se NP = PSPACE ou ate P = PSPACE
Como resolver isso? Da mesma forma que a questao P = NP: busque
problemas PSPACE-completos (relativo a P ).
Considere
Formulas booleanas quantificadas (ingl. quantified boolean
formulas, QBF)
Inst
ancia Uma sentenca booleana
:= (Q1 x1 )(Q2 x2 ) (Qn xn )[(x1 , x2 , . . . , xn )]
com Qi {, }.
Decis
ao e verdadeira?

Exemplo:
(x1 )(x2 )(x3 )(x1 x3 x2 )
Teorema 12.1
QBF e PSPACE-completo.
f
Prova. (Rascunho.) E
acil de provar que QBF PSPACE: Podemos verificar
recursivamente que a sentenca e verdadeira: Para uma formula Qx1 (x1 , . . .)
com Q {, } vamos aplicar o algoritmos para os casos (0) e (1).

202

12.1. De P ate PSPACE


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

Outro exemplo
Palavra em linguagem sensvel ao contexto
Inst
ancia Gram
atica sensvel ao contexto, palavra w.
Decis
ao w L()

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

203

12. Fora do NP
A hierarquia polinomial
Estendemos relac
oes para aridade i + 1. Uma relacao R ( )i+1 e
limitada polinomial, se
(x, y1 , . . . , yi ) R p poly i |yi | p(|x|)
Defini
c
ao: i e a classe das linguagens L, tal que existe uma relacao
de aridade i + 1 que pode ser reconhecida em tempo polinomial, e
x L y1 y2 Qi : (x, y1 , . . . , yi ) R
Defini
c
ao: i e a classe das linguagens L, tal que existe uma relacao
de aridade i + 1 que pode ser reconhecida em tempo polinomial, e
x L y1 y2 Qi : (x, y1 , . . . , yi ) R
As classes i e i formam a hierarquia polinomial.
Observac
ao: 1 = NP, 1 = co-NP.
Quantificac
oes restritas ou n
ao
Conjunto das classes com quantificac
oes restritas:
[
PH =
k
k0

Classe das linguagens reconhecidas por um maquina de Turing com alternac


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

Corol
ario 12.1
ATIME = PSPACE
Esta caracterizac
ao facilite entender por que QBF e PSPACE-completo

204

12.1. De P ate PSPACE


A hierarquia polinomial

Mais exemplos da classe PSPACE


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

Peru...

205

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

Geografia generalizada (ingl. Generalized geography)


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

Teorema 12.3
Geografia generalizada e PSPACE-completo.
O mundo at
e PSPACE

12.2. De PSPACE at
e ELEMENTAR
Problemas intrat
aveis demonstr
aveis

206

12.2. De PSPACE ate ELEMENTAR


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

O(1)

]=

DTIME[2n ]

k0

NEXP = NTIME[2n

O(1)

]=

NTIME[2n ]

k0

EXPSPACE = DSPACE[2n

O(1)

]=

DSPACE[2n ]

k0

Estas classes s
ao as primeiras demonstravelmente separadas de P.
Conseq
uencia: Uma linguagem completa em EXP nao e tratavel.
Exemplo de um problema EXP-completo:

Xadrez generalizada (ingl. Generalized chess)


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

Problemas ainda mais intrat


aveis
As classes k EXP, k NEXP e k EXPSPACE tem k nveis de exponenciac
ao!
Por exemplo, considere a torre de dois de altura tres: 22

2k

0
4

1
16

2
65536

Problemas desse tipo s


ao bem intrat
aveis
ELEMENTAR =

k EXP

k0

Mas tem ainda problemas decidveis fora desta classe!

207

3
1.16

12. Fora do NP
O mundo at
e ELEMENTAR

Um corte final: Express


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

Decis
ao: Dadas as express
oes regulares e, f , L(e) 6= L(f )?

Expressoes regulare
,
, ,
, ,2
, ,2 ,
, ,

O tempo do u
ltimo problema de decis
ao cresce ao menos como uma torre
de altura lg n.

208

A. Conceitos matem
aticos
Nessa sec
ao vamos repetir algumas definic
oes b
asicas da matematica.

A.1. Func
oes comuns
N, Z, Q e R denotam os conjuntos dos n
umeros naturais sem 0, inteiros,
racionais e reais, respectivamente. Escrevemos tambem N0 = N {0}, 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}.
Para um conjunto finito S, P(S) denota o conjunto de todos subconjuntos de
S.
Defini
c
ao A.1 (Valor absoluto)
O valor absoluta | | e definido por
(
x
se x 0
|x |=
x se x < 0
Proposi
c
ao A.1 (Regras para valores absolutos)

` x| = |x|
x |x|
|x + y| |x| + |y|
|xy| = |x||y|

(A.1)
Desigualdade triangular

(A.2)
(A.3)
(A.4)

Prova. (i) Se x > 0 temos x < 0, logo ` x |= x e |x |= x. O casos


restantes podem ser analisadas analogamente. (ii) Analise da casos. (iii) Para
x + y < 0: |x + y |= (x + y) = (x) + (y) ` x|+ ` y |= |x| + |y|. Para
x + y 0: |x + y |= x + y |x| + |y|. (iv) Para xy 0: Se x = 0 temos
|xy |= 0 = |x||y|, se x > 0 temos y > 0 e |xy |= xy = |x||y|, se x < 0 temos
y < 0 e |xy |= xy = (|x|)(|y|) = |x||y|. Caso xy < 0 similar.


209

A. Conceitos matem
aticos
Corol
ario A.1




X
X


|xi |
xi

1in 1in




Y
Y


=
|xi |
x
i


1in 1in

(A.5)

(A.6)
(A.7)

Prova. Prova com induc


ao sobre n.

Proposi
c
ao A.2 (Regras para o m
aximo)
Para ai , bi R
max ai + bi max ai + max bi
i

(A.8)

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




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


Defini
c
ao A.2 (Pisos e tetos)
Para x R o piso bxc e o maior n
umero inteiro menor que x e o teto dxe e o
menor n
umero inteiro maior que x. Formalmente
bxc = max{y Z|y x}
dxe = min{y Z|y x}

O parte fracion
ario de x e {x} = x bxc.
Observe que o parte fracion
ario sempre e positivo, por exemplo {0.3} = 0.7.
Proposi
c
ao A.3 (Regras para pisos e tetos)
Pisos e tetos satisfazem

210

x dxe < x + 1

(A.9)

x 1 < bxc x

(A.10)

A.1. Funcoes comuns


Defini
c
ao A.3
O fatorial e a func
ao
Y

n! : N N : n 7

i.

1in

Temos a seguinte aproximac


ao do fatorial (f
ormula de Stirling)



n n
(1 + O(1/n))
n! = 2n
e
Uma estimativa menos preciso, pode ser obtido pelas observacoes

(A.11)

n! nn
en =

X ni
i0

i!

>

nn
n!

que combinado ficam


(n/e)n n! nn .
Revis
ao: Logaritmos
loga (1) = 0
loga (n)

(A.12)

=n

por definicao

(A.13)

propriedade do produto

(A.14)

loga (n m) = loga (n) + loga (m)


n
loga ( ) = loga (n) loga (m)
m
loga (nm ) = m loga (n)

propriedade da divisao

(A.15)

propriedade da potencia

(A.16)

loga (n) = logb (n) loga (b)

troca de base

(A.17)

mudanca de base

(A.18)

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

(A.19)

alogc (b) = blogc (a)

expoentes

Os n
umeros harm
onicos
Hn =

(A.20)

X 1
i

1in

ocorrem freq
uentemente na an
alise de algoritmos.

211

A. Conceitos matem
aticos
Proposi
c
ao A.4

ln n < Hn < ln n + 1.

Prova. Resultado da observac


ao que
Z

n+1

1
dx < Hn < 1 +
x

(veja figura A.1) e o fato que

n+1

1
dx
x1

1/x = ln x.

0
0

10

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


umeros harmonicos.

A.2. Somat
orio
Revis
ao: Notac
ao Somat
orio

212

A.2. Somatorio
Para k uma constante arbitr
aria temos
n
X
i=1
n
X

kai = k

n
X

ai

Distributividade

(A.21)

i=1

k = nk

(A.22)

i=1
n X
m
X

n
X

ai bj =

i=1 j=1
n
X
i=1
p
X
i=1
n
X

!
ai

n
X

n
X

ai +

ai =

i=p+1
p
X

api =

i=0

bj

Distributividade generalizada

(A.23)

Associativiade

(A.24)

j=1

i=1

ai +

i=1

(ai + bi ) =

m
X

n
X

bi

i=1
n
X

ai

(A.25)

i=1

ai

(A.26)

i=pn

Au
ltima regra e um caso particular de troca de ndice (ou comutacao) para
somas. Para um conjunto finito C e uma permutac
ao dos n
umeros inteiros
temos
X
X
ai =
a(i) .
iC

(i)C

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


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

0pin

pnip

Parte da an
alise de algoritmos se faz usando somat
orios, pois lacos while e for
em geral podem ser representados por somat
orios. Como exemplo, considere
o seguinte problema. Dadas duas matrizes matA e matB, faca um algoritmo
que copie a matriz triangular inferior de matB para matA.
CopiaMTI
Entrada Matrizes quadr
aticos A e B e dimens
ao n.
Sada Matriz A com a matriz triangular inferior copiada de B.

213

A. Conceitos matem
aticos

1 f o r i := 1 t o n do
2
f o r j := 1 t o i do
3
Aij = Bij
4
end f o r
5 end f o r

Uma an
alise simples deste algoritmo seria:
n X
i
X

1=

i=1 j=1

n
X
i=1

i=

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

S
eries
n
X
i=1
n
X

i=

n(n + 1)
2

xi =

i=0

xn+1 1
x1

serie aritmetica

(A.27)

serie geometrica, para x 6= 1

(A.28)

serie geometrica infinitamente decrescente

(A.29)

se |x| < 1 ent


ao

X
k=0

xk =

1
1x

(A.30)

Serie geometrica com limites arbitr


arios:
X
aib

S
eries

214

xi =

xb+1 xa
x1

para x 6= 1

A.3. Inducao

n
X
i=1
n
X
i=0
n
X

2i = 2n+1 2

(A.31)

n (n + 1) (2n + 1)
6

(A.32)

i 2i = 2 + (n 1) 2n+1

(A.33)

i2 =

i=0

Mais geral para alguma seq


uencia fi temos
X
X X
X
ifi =
fi =
1in

1in 1ji

fi =

1jin

1jn

fi

1jn jin

fi

1in

fi .

1i<j

Uma aplicac
ao:

ixi =

1in

xi

1jn

1
x1

1
=
x1

1in

xi =

1i<j


X  xn+1 x1
xj x1

x1
x1

1jn


xn+1 xj

1jn

n+1

nx

xn+1 x1

x1


=

x
(xn (nx n 1) + 1)
(x 1)2

e com x = 1/2 temos


X

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

1in

(A.34)

A.3. Induc
ao
Revis
ao: Induc
ao matem
atica
Importante para provar resultados envolvendo inteiros.

215

A. Conceitos matem
aticos
Seja P(n) uma propriedade relativa aos inteiros.
Se P(n) e verdadeira para n=1 e
se P(k) verdadeira implica que P(k+1) e verdadeira
ent
ao P(n) e verdadeira para todo inteiro n 1.

Revis
ao: Induc
ao matem
atica
Para aplicarmos induc
ao matem
atica deve-se:
Passo inicial: verificar se P(n) e verdadeira para a base n0 .
Hip
otese: assumir P(n) v
alida.
Prova: provar que P(n) e v
alida para qualquer valor de n n0 .
Se os passos acima forem verificados, conclui-se que P(n) e valida para
qualquer valor de n n0
Induc
ao matem
atica: exerccios
Mostre que n! nn .
Mostre que

1
loga (c)

= logc (a).

Demonstre a propriedade dos expoentes.


Encontre uma f
ormula alternativa para
n
X

2i 1

i=1

e prove seu resultado via induc


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

qi =

i=0

Resolva os exerccios do captulo 1.

216

qn 1
.
q1

A.4. Limites

A.4. Limites
Defini
c
ao A.4 (Limites)
Para f : N R o limite de n para e definido por
lim f (n) = c c  > 0 n0 n > n0 |f (n) c| < .

(A.35)

Caso nao existe um c R a func


ao e divergente. Uma forma especial de
divergencia e quando a func
ao ultrapasse qualquer n
umero real,
lim f (n) = c n0 n > n0 f (n) > c

(A.36)

Tambem temos



inf f (m)
n
n mn


lim sup f (n) = lim sup f (m)
lim inf f (n) = lim

mn

Lema A.1 (Defini


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

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

A.5. Probabilidade discreta


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

Eventos (compostos) E com probabilidade


X
Pr[E] =
Pr[e]
eE

217

A. Conceitos matem
aticos
Exemplo A.1
Para um dado sem bias temos = {1, 2, 3,P
4, 5, 6} e Pr[i] = 1/6. O evento
Par = {2, 4, 6} tem probabilidade Pr[Par] = ePar Pr[e] = 1/2.

Probabilidade: Noc
oes b
asicas
Vari
avel aleat
oria
X:N
Escrevemos Pr[X = i] para Pr[X 1 (i)].
Vari
aveis aleat
orias independentes
P [X = x e Y = y] = P [X = x]P [Y = y]
Valor esperado
E[X] =

Pr[e]X(e) =

i Pr[X = i]

i0

Linearidade do valor esperado: Para variaveis aleatorias X, Y


E[X + Y ] = E[X] + E[Y ]
Prova. (Das formulas equivalentes para o valor esperado.)
X
X
Pr[X = i]i =
Pr[X 1 (i)]i
0i

0i

Pr[e]X(e) =

0i eX 1 (i)

Pr[e]X(e)


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

X
e

P r[e]X(e)

P r[e]Y (e)) = E[X] + E[Y ]

218

A.6. Grafos
Exemplo A.2
(Continuando exemplo A.1.)
Seja X a vari
avel aleat
orio que denota o n
umero sorteado, e Y a variavel
aleat
orio tal que Y = [a
face em cima do dado tem um ponto no meio].
X
X
E[X] =
Pr[X = i]i = 1/6
i = 21/6 = 7/2
E[Y ] =

i0

1i6

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

= E[X] + E[Y ] = 4

i0

A.6. Grafos
Seja [D]k o conjunto de todos subconjuntos de tamanho k de D.
Um grafo (ou grafo n
ao-direcionado) e um par G = (V, E) de vertices (ou
n
os ou pontos) V e arestas (ou arcos ou linhas) E tal que E [V ]2 . Com
|G| e ||G|| denotamos o n
umero de vertices e arestas, respectivamente. Dois
vertices u, v s
ao adjacentes, se {u, v} E, duas arestas e, f sao adjacentes, se
e f 6= . Para um vertice v, a vizinhanca (de vertices) N (v) e o conjunto
de todas vertices adjacentes com ele, e a vizinhanca (de arestas) E(v) e o
conjunto de todas arestas adjacentes com ele. O grau de um vertice v e o
n
umero de vizinhos (v) = |N (v) |= |E(v)|.
Um caminho de comprimento k e um grafo C = ({v0 , . . . , vk }, {{vi , vi+1 } | 0
i < k}) com todo vi diferente. Um ciclo de comprimento k + 1 e um caminho
com a aresta adicional {vn , v0 }. O caminho com comprimento k e denotado
com P k , o ciclo de comprimento k com C k .
Um grafo G e conexo se para todo par de vertices u, v existe um caminho
entre eles em G.
Um subgrafo de G e um grafo G0 = (V 0 , E 0 ) tal que V 0 V e E 0 E,
escrito G0 G. Caso G0 contem todas arestas entre vertices em V 0 (i.e.
E 0 = E [V 0 ]2 ) ela e um subgrafo induzido de V 0 em G, escrito G0 = G[V 0 ].
Um grafo direcionado e um par G = (V, E) de vertices V e arestas E V 2 .
Cada aresta e = (u, v) tem um comeco u e um termino v.

219

B. Soluc
oes dos exerccios
Solu
c
ao do exerccio 1.1.
As caractersticas correspondentes s
ao
f = (f )

(B.1)

c(f ) = (f )

(B.2)

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

(B.3)
(B.4)

(f )(g) = (f g)
(f g) = f (g)

(B.5)
(B.6)

Todas as caractersticas se aplicam para tambem. As provas sao modificacoes simples das provas das caractersticas 1.10 ate 1.15 com substitudo
por .
Prova.
Prova de B.1: Escolhe c = 1, n0 = 0.
Prova de B.2: Se g c(f ), temos g = cg 0 e existem c0 > 0 e n0 tal que
n > n0 g 0 c0 f . Portanto n > n0 g = cg 0 cc0 f e com cc0 e n0 temos
g (f ).
Prova de B.3: Para g (f ) + (f ) temos g = h + h0 com c > 0 e n0 tal
que n > n0 h cf e c0 > 0 e n00 tal que n > n0 h0 c0 f . Logo para
n > max(n0 , n00 ) temos g = h + h0 (c + c0 )f .
Prova de B.4: Para g ((f )) temos g ch com h c0 f a partir de ndices
n0 e n00 , e logo g cc0 h a partir de max(n0 , n00 ).
Prova de B.5: h = f 0 g 0 com f 0 cf f e g 0 cg g tal que h = f 0 g 0 cf cg f g.
Prova de B.6: h cf g. Escrevendo h = f g 0 temos que mostrar g 0 (g).
Mas g 0 = h/f cf g/f = cg.

Solu
c
ao do exerccio 1.2.
:
Seja f + c O(g), logo existem c0 e n0 tal que n > n0 f + c c0 g. Portanto
f f + c c0 g tambem, e temos f O(g).
:
Essa direc
ao no caso geral n
ao e v
alida. Um contra-exemplo simples e 0 O(0)
mas 0 + c 6 O(0). O problema e que a func
ao g pode ser 0 um n
umero infinito

221

B. Soluc
oes dos exerccios
de vezes. Assim f tem que ser 0 nesses pontos tambem, mas f + c nao e. Mas
com a restric
ao que g (1), temos uma prova:
Seja f O(g) logo existem c0 e n00 tal que n > n00 f c0 g. Como g (1)
tambem existem c00 e n000 tal que n > n000 g c00 . Logo para n > max(n00 , n000 )
f + c c0 g + c c0 g +

c
c
g = (c0 + 00 )g.
00
c
c

Solu
c
ao do exerccio 1.3.
1. Para n 2 temos log 1 + n log 2n = log 2 + log n 2 log n.
2. Seja f log O(n2 ), i.e. f = log g com g tal que n0 , c n > n0 g cn2 .
Ent
ao f = log g log cn2 = log c+2 log n 3 log n para n > max(c, n0 ).
3. Temos que mostrar que existem c e n0 tal que n > n0 log log n c log n.
Como log n n para todos n 1 a inequacao acima esta correto com
c = 1.
Solu
c
ao do exerccio 1.4.
Para provar fn = O(n) temos que provar que existe um c tal que fn cn a
importante que a constante c e a mesma para todo n.
partir um ponto n0 . E
Na verificac
ao do professor Veloz a constante c muda implicitamente, e por
isso ela n
ao e v
alida. Ele tem que provar que fn cn para algum c fixo. Uma
tentativa leva a
fn = 2fn1
2cn
6 cn

Perdido!

que mostra que essa prova n


ao funciona.
Solu
c
ao do exerccio 1.5.
E simples ver que f o(g) implica f o(g). Para mostrar a outra direcao
suponha que f o(g). Temos que mostrar que c > 0 : n0 tal que f < cg.
Escolhe um c. Como f o(g) sabemos que existe um n0 tal que f c/2g para
n > n0 . Se g 6= 0 para n > n00 ent
ao c/2g < g tambem. Logo f c/2g < cg
para n > max(n0 , n00 ).
Solu
c
ao do exerccio 1.6.
Primeira verifique-se que satisfaz + 1 = 2 .

222

Prova que fn O(n ) com induc


ao que fn cn . Base: f0 = 0 c e
f1 = 1 c para c 1/ 0.62. Passo:
fn = fn1 + fn2 cn1 + cn2 = (c + c)n2 cn
caso c + c c2 .
Prova que fn (n ) com induc
ao que fn cn . Base: Vamos escolher
n0 = 1. f1 = 1 c e f2 = 1 c2 caso c 2 0.38. Passo:
fn = fn1 + fn2 cn1 + cn2 = (c + c)n2 cn
caso c + c c2 .
Solu
c
ao do exerccio [27, 2.3].
1. 3n + 7 5n + 2 5 2n 2.5 n (equacao linear)

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


quadr
atica)
3. 5 log2 n + 7 5n + 1 75 + 27 2 25n 16933 25n
2.809 . . . n
4. Veja item (b)
5. 52n + 3 3n2 + 5n n 2n (3n2 + 5n 3)/5 2n n2 .
6. n2 3n n3 2n + 1 n2 3n n3 2n+1 2 log2 n + n log2 3 3 log2 n +
(n + 1) log2 2 n log2 3 log2 n + (n + 1) n(log2 3 1)/2 log2 n
Solu
c
ao do exerccio [27, 2.9].
Com f (nr ) e g (ns ) temos
c1 nr f c2 nr ;

d 1 ns g d 2 ns

a partir de um n0

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


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

223

B. Soluc
oes dos exerccios
Solu
c
ao do exerccio 2.1.

i1

Cp [Alg1] =

n 2X
X

c=

i=1 j=1

n
c X i

2 = c 2n c = O(2n )
2 i=1

1in

1j2i
j
mpar

Cp [Alg2] =

8i =

1in

Cp [Alg3] =

n X
n
X

2i =

i=1 j=i

n
X

n
X

j2

(2i )2

1in 1j2i

8n+1 8
8n+1 = O(8n )
7

2i (n i + 1)

i=1

(n2i i2i + 2i ) =

i=1

n
X

n.2i

i=1

n
X
i=1

i.2i +

n
X

2i

i=1

= n (2n+1 2) (2 + (n 1) 2n+1 ) + (2n+1 2)


= n2n+1 2n 2 n2n+1 + 2n+1 + 2n+1 2
= 2n+2 2n 4 = O(2n )

Cp [Alg4] =

n X
i
X
i=1 j=1
n
X
i

2j =

=2

i=1
n

n
X

(2i+1 2)

i=1
n
X

2 = 2 (2n+1 2) 2n

i=1

= 4 2 4 2n = O(2n )

224

Cp [Alg5] =

n X
n
X

2j =

i=1 j=i

n
X

n
X

n
X

i=1

2j

j=1

i1
X

2j

j=1

n

 X
2.2n 2 2i + 2
2n+1 2 (2i1+1 2) =
i=1

i=1

=2

n
X

2n

i=1

n
X

2i = 2.n.2n (2n+1 2)

i=1

= 2.n.2n 2.2n + 2 = O(n2n )

Solu
c
ao do exerccio 2.2.
O problema e o mesmo da prova do exerccio 1.4: Na prova a constante c
muda implicitamente. Para provar Tn = O(n) temos que provar Tn cn para
c fixo. Essa prova vira
X
Tn = n 1 + 2/n
O(i)
0i<n

n 1 + 2c/n

0i<n

= n 1 + c(n 1) = cn + (n 1 c)
6 cn

N
ao funciona para n > c + 1

Solu
c
ao do exerccio 2.3.
Uma soluc
ao simples e manter um m
aximo M e o segundo maior elemento m
no mesmo tempo:
1
2
3
4
5
6
7
8

M :=
m :=
for i = 1, . . . , n do
i f ai > M then
m := M
M := ai
e l s e i f ai > m do
m := ai

225

B. Soluc
oes dos exerccios
9
end i f
10 end f o r
11 return m
O n
umero de comparac
oes e ao m
aximo dois por iteracao, e esse limite ocorre
numa seq
uencia crescendo 1, 2, . . . , n. Portanto, a complexidade pessimista e
2n = (n). Existem outras soluc
oes que encontram o segundo maior elemento
com somente n + log2 n comparac
oes.

1
2
3

Solu
c
ao do exerccio 2.4.
Uma abordagem simples com busca exaustiva e
P
m := 1in ai
fo r C [1, n] do

P
P

m0 := iC ai i6C ai

4
i f m0 < m then
5
m := m0
6
end i f
7 end f o r
Ele tem complexidade cp = O(n) + O(2n nc) = O(n2n ).
Solu
c
ao do exerccio 2.5.
Para um dado n temos sempre n bn/2c atualizacoes. Logo, o n
umero medio
de atualizac
oes e e mesma.
Solu
c
ao do exerccio 2.6.
Seja A, A1 , . . . , An as vari
aveis aleat
orias que denotam o n
umero total de
atualizac
oes, e o n
umero de atualizac
oes devido a posicao i, respectivamente.
Com a distribuic
ao uniforme temos E[Ai ] = 1/6 e pela linearidade

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

Com o mesmo argumento a segunda distribuic


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

X
1ik

226

P [C = i]i =

X 2i1
X
i = 2k
2i i = 2(k 1) + 21k .
k1
2

1ik

1ik

Solu
c
ao do exerccio 4.1.
O seguinte algoritmo resolva o problema:
e
ncia
Subsequ
Entrada Seq
uencia S 0 = s01 . . . s0m e S = s1 . . . sn .
Sada true, se S 0 S (S 0 e uma subseq
uencia de S)
1
2
3
4
5
6
7
8
9
10
11
12
13

i f m > n then
return f a l s e
end i f
i := 1
f o r j := 1, . . . , n do
i f s0i = sj then
i := i + 1
i f i > m then
return t r u e
end i f
end i f
end f o r
return f a l s e

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


subseq
uencia possvel temos outra subseq
uencia que escolhe o elemento mais
esquerda em S. Portanto, podemos sempre escolher gulosamente o primeiro
elemento da seq
uencia maior.
Solu
c
ao do exerccio 4.2.
O seguinte algoritmo resolve o problema:
Bases
Entrada Uma seq
uencia de posic
oes xi de n cidades, 1 i n.
Sada Uma seq
uencia mnima de posic
oes bi de bases.
1
2

Sejam S = x01 . . . x0n a s p o s i c


o e s em ordem c r e s c e n t e
B=

227

B. Soluc
oes dos exerccios

3
4
5
6
7

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

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


oes do algoritmo guloso acima, e b0i as
Prova de corretude: Seja bi as posic
posic
oes de alguma outra soluc
ao. Afirmac
ao: bi b0i . Portanto, a solucao
gulosa n
ao contem mais bases que alguma outra solucao. Prova da afirmacao
com induc
ao: A base b1 b01 e correto porque toda solucao tem que alimentar
a primeira casa e o algoritmo guloso escolhe a u
ltima posicao possvel. Passo:
oes da pr
oximas casas sem base. O algoritmo
Seja bi b0i e sejam h, h0 as posic
guloso escolha h + 4, mas como bi b0i e h h0 temos b0i+1 h0 + 4 porque
h0 precisa uma base. Logo, xi+1 = h + 4 h0 + 4 b0i+1 .
Solu
c
ao do exerccio 6.3.
1. Produto de dois n
umeros bin
arios (exemplo 5.3.8 em [27]).
mult-bin
Entrada Dois n
umeros bin
arios p, q com n bits.
Sada O produto r = pq (que tem 2n bits).
1 i f n = 1 then
2
return pq
{ multiplica dois b i t s em O(1) }
3 else
4
x := p1 + p2
5
y := q1 + q2
6
z := mult-bin(x2 , y2 )
7
t := (x1 y1 )2n + (x1 y2 + x2 y1 )2n/2 + z
8
u := mult-bin(p1 , q1 )
9
v := mult-bin(p2 , q2 )
10
r := u2n + (t u v)2n/2 + v
11
return r
12 end i f

228

importante de observar que x e a soma de dois n


E
umeros com n/2 bits
e logo tem no m
aximo n/2 + 1 bits. A divis
ao de x em x1 e x2 e tal que
x1 represente o bit n/2 + 1 e x2 o resto.

p = | p1 | p2 |
| {z } | {z }
n/2bits

n/2bits

x = | p1 |
| {z }
n/2bits

+ | p2 |
| {z }
n/2bits

= |x1 | x2 |
|{z} | {z }
1bit

n/2bits

(y tem a mesma subdivis


ao.)
Corretude do algoritmo Temos a representacao p = p1 2n/2 + p2 e
q = q1 2n/2 + q2 e logo obtemos o produto
pq = (p1 2n/2 +p2 )(q1 2n/2 +q2 ) = p1 q1 2n +(p1 q2 +p2 q1 )2n/2 +p2 q2 (B.7)
Usando t = (p1 + p2 )(q1 + q2 ) = p1 q1 + p1 q2 + p2 q1 + p2 q2 obtemos
p1 q 2 + p2 q 1 = t p1 q 1 p2 q 2 .

(B.8)

A linha 7 do algoritmo calcula t (usando uma chamada recursiva com


n/2 bits para obter z = x2 y2 ). Com os produtos u = p1 q1 , v = p2 q2
(que foram obtidos com duas chamadas recursivas com n/2 bits) temos
p1 q 2 + p2 q 1 = t u v
pq = u2n + (t u v)2n/2 + v
substituindo u e v nas equac
oes B.7 e B.8.
Complexidade do algoritmo Inicialmente provaremos pelo metodo da
substituic
ao que a recorrencia deste algoritmo e O(nlog2 3 ). Se usarmos a
hip
otese de que T (n) cnlog2 3 , n
ao conseguiremos finalizar a prova pois
permanecer
a um fator adicional que n
ao podemos remover da equacao.

229

B. Soluc
oes dos exerccios
Caso este fator adicional for menor em ordem que a complexidade que
queremos provar, podemos usar uma hipotese mais forte como apresentado abaixo.
Hip
otese: T (n) cnlog2 3 dn
T (n) 3(c(n/2)log2 3 d(n/2)) + bn
3cnlog2 3 /(2log2 3 ) 3d(n/2) + bn
cnlog2 3 3d(n/2) + bn
cnlog2 3 dn

A desigualdade acima e verdadeira para 3d(n/2) + bn dn, ou seja,


para d 2b: T (n) O(nlog2 3 dn) O(nlog2 3 ).
Com a hip
otese que uma multiplicac
ao com 2k precisa tempo constante
(shift left), a linha 7 do algoritmo tambem precisa tempo constante,
porque uma multiplicac
ao com x1 ou y1 precisa tempo constante (de
fato e um if). O custo das adic
oes e O(n) e temos a recorrencia
(
1
se n = 1
Tn =
3T (n/2) + cn se n > 1
cuja solucao e (n1.58 ) (com 1.58 log2 3, aplica o teorema Master).
Exemplo B.1
Com p = (1101.1100)2 = (220)10 e q = (1001.0010)2 = (146)10 temos
n = 8, x = p1 + p2 = 1.1001 tal que x1 = 1 e x2 = 1001 e y = q1 + q2 =
1011 tal que y1 = 0 e y2 = 1011. Logo z = x2 y2 = 0110.0011, t =
y2 24 + z = 21.0001.0011, u = p1 q1 = 0111.0101, v = p2 q2 = 0001.1000 e
finalmente r = 1111.1010.111.1000 = 32120.

O algoritmo acima n
ao e limitado para n
umeros binarios, ele pode ser
aplicado para n
umeros com base arbitr
ario. Ele e conhecido como algoritmo de Karatsuba [16]. Um algoritmo mais eficiente e do Schonhage e
Strassen [24] que multiplica em O(n log n log log n). Em 2007, F
urer [10]

apresentou um algoritmo que multiplica em n log n 2O(log n) , um pouco


acima do limite inferior (n log n).
2. Algoritmo de Strassen para multiplicacao de matrizes.

230

O algoritmo est
a descrito na sec
ao 6.3. A recorrencia correspondente e
T (n) = 7T (n/2) + (n2 ).
Analisando com a
arvore de recorrencia, obtemos 7i problemas em cada
nvel, cada um com tamanho n/2i e custo c(n/2i )2 = cn2 /4i e altura
h = dlog2 ne (com h + 1 nveis) que leva a soma
X
cn2 (7/4)i + 7h+1
T (n)
0ih

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


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

com 4h+1 4n2

com 7h 7 7log2 n

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


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

231

B. Soluc
oes dos exerccios
c := c1 + c2 . Ent
ao a
arvore tem custo ci n no nvel i e no ramo mais
longo (que corresponde a c2 ) uma altura de h = logc2 20/n . Portanto,
obtemos uma cota superior para o custo da arvore
X
T (n) n
ci + F (n)
0ih

ci + F (n)

porque c < 1

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

0i<

com o n
umero de folhas F (n). Caso F (n) = O(n) obtemos a estimativa
desejada T (n) = O(n). Observe que a estimativa
F (n) = 2h+1 42logc2 20 nlog1/c2 2 = (n1.94 )
n
ao serve! Como as folhas satisfazem a recorrencia
(
F (dn/5e) + F (b7n/10 + 6c) se n > 20
F (n)
O(1)
se n 20
F (n) cn pode ser verificado com substituicao (resolvido no livro do
Cormen). O metodo master n
ao se aplica nesta recorrencia visto que
esta n
ao se encontra no formato em que podemos aplicar o Teorema
Master.

232

Bibliografia
[1] Wilkinson microwave anisotropy probe. Online. http://map.gsfc.nasa.
gov.
[2] S. Aaronson. NP-complete problems and physical reality. ACM SIGACT
News, Mar. 2005.
[3] M. J. Atallah, editor. Algorithms and theory of computation handbook.
CRC Press, 1999.
[4] R. Bellman. Dynamic programming treatment of the travelling salesman
problem. J. ACM, 9(1):6163, 1962.
[5] Complexity zoo. Online.
[6] D. Coppersmith and S. Winograd. Matrix multiplication via arithmetic
progressions. In STOC 87: Proceedings of the nineteenth annual ACM
conference on Theory of computing, pages 16, 1987.
[7] T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein. Introduction
to Algorithms. The MIT Press, 2nd edition, 2001.
[8] R. Diestel. Graph theory. Springer, 3rd edition, 2005.
[9] D.-Z. Du and K.-I. Ko, editors. Advances in Algorithms, Languages, and
Complexity - In Honor of Ronald V. Book. Kluwer, 1997.
[10] M. F
urer. Faster integer multiplication. In STOC 07: Proceedings of
the thirty-ninth annual ACM symposium on Theory of computing, pages
5766, New York, NY, USA, 2007. ACM.
[11] Y. Gurevich and S. Shelah. Expected computation time for hamiltonian
path problem. SIAM J. on Computing, 16(3):486502, 1987.
[12] J. Hartmanis and R. E. Stearns. On the computational complexity of
algorithms. Transactions of the American Mathematical Society, 117:285
306, 1965.
[13] D. S. Hirschberg. A linear space algorithm for computing maximal common subsequences. Comm. of the ACM, 18(6):341343, 1975.

233

Bibliografia
[14] C. A. R. Hoare. Quicksort. Computer Journal, 5:1015, 1962.
[15] E. Kaltofen and G. Villard. On the complexity of computing determinants. Computational complexity, 13:91130, 2004.
[16] A. A. Karatsuba and Y. Ofman. Multiplication of many-digital numbers
by automatic computers. Doklady Akad. Nauk SSSR, 145(2):293294,
1962. Translation in Soviet Physics-Doklady 7 (1963), pp. 595596.
[17] J. Kleinberg and E. Tardos. Algorithm design. Addison-Wesley, 2005.
[18] D. E. Knuth. The art of computer programming, volume III, Sorting and
searching. Addison-Wesley, 2nd edition, 1998.
[19] R. Ladner. On the structure of polynomial time reducibility. Journal of
the ACM, 1975.
[20] V. I. Levenshtein. Binary codes capable of correcting deletions, insertions,
and reversals. Soviet Physics Doklady, pages 707710, 1966.
[21] S. Lloyd. Computational capacity of the universe. Physical Review Letters, 88(23), 2002. http://focus.aps.org/story/v9/st27.
[22] M. Magazine, G.L.Nemhauser, and L.E.Trotter. When the greedy solution solves a class of knapsack problems. Operations research, 23(2):207
217, 1975.
[23] A. R. Meyer and L. J. Stockmeyer. The equivalence problem for regular
expression with squaring requires exponential time. In Proc. 12th IEEE
Symposium on Switching and Automata Theory, pages 125129, 1972.
[24] A. Sch
onhage and V. Strasse. Schnelle multiplikation grosser zahlen.
Computing, 7:281292, 1971.
[25] M. Sipser. The history and status of the P versus NP question. In Proceedings of the 24th Annual ACM Symposium on the Theory of Computing,
pages 603619, 1992.
[26] M. Sipser. Introduction to the theory of computation. Thomson, 2006.
[27] L. V. Toscani and P. A. S. Veloso. Complexidade de Algoritmos. Editora
Sagra Luzzatto, 2a edition, 2005.
[28] A. M. Turing. On computable numbers with an application to the ents
cheidungsproblem. Proc. London MathSoc.,
2(42):230265, 1936.

234

Bibliografia
[29] P. M. B. Vit
anyi and L. Meertens. Big omega versus the wild functions.
SIGACT News, 16(4), 1985.
[30] J. Vitter and P. Flajolet. Handbook of theoretical computer science, volume A: Algorithms and complexity, chapter Average-case analysis of
algorithms and data structures. MIT Press, 1990.
[31] J. Wang. Advances in Algorithms, Languages, and Complexity - In Honor of Ronald V. Book, chapter Average-Case Intractable NP Problems.
Kluwer, 1997.

235

Indice
DSPACE, 180
DTIME, 180
NP, 186
NSPACE, 180
NTIME, 180
(Notac
ao), 21
PSPACE, 180
n , 202
P, 180, 186
n , 202
(Notac
ao), 21
 (relacao de crescimento),
FP, 186
PF, 186
(Notac
ao), 21
(relacao de crescimento),
 (relacao de crescimento),
 (relacao de crescimento),
 (relacao de crescimento),
arvore
bin
aria, 109
de busca, 109
espalhada mnima, 77
APX, 155
NPO, 154
PO, 154
BHALT, 188

25

25
25
25
25

ABB-OTIMA
(algoritmo), 112
absorcao (de uma funcao), 25
adjacencia
de vertices, 217
AEM-Kruskal (algoritmo), 80

AEM-Prim (algoritmo), 80, 81


alfabeto, 171
algoritmo
de aproximacao, 149
de Karatsuba, 228
guloso, 73
PrefixTree, 90
algoritmo -aproximativo, 154
algoritmo r-aproximativo, 155
all pairs shortest paths, 82
aproximacao
absoluta, 154
relativa, 154
aresta, 217
atribuic
ao, 36, 39
aval (funcao de complexidade), 32
bottom-up, 95
Bubblesort (algoritmo), 41, 52
Busca binaria (algoritmo), 46
Busca em Largura (algoritmo), 47
Busca seq
uencial (algoritmo), 44,
50
Busca1 (algoritmo), 34, 50
cache, 95
caminho, 217
Caminho Hamiltoniano, 49
caminho mais curto
entre todas pares, 82
entre um no e todos outros, 82
certificado, 186
ciclo, 217

237

Indice
euleriano, 18
hamiltoniano, 18
classe de complexidade, 180
cobertura por vertices, 149
colorac
ao mnima, 87
complexidade
media, 33, 49
otimista, 35
pessimista, 33
componente
conjuntiva, 36, 37
disjuntiva, 36, 40
composicionalidade, 36
condicional, 36, 40
conjunto compatvel de intervalos,
83
conjunto independente, 85
m
aximo (problema), 85
Cook, Stephen Arthur, 195
CopiaMTI (algoritmo), 212
corte, 78
cota assint
otica superior, 20
Counting-Sort (algoritmo), 45
custo (func
ao de custos), 32
desemp (func
ao de desempenho), 32
Dijkstra, Edsger, 83
dist
ancia de Levenshtein, 100
distribuic
ao, 216
divis
ao e conquista, 56, 117
Eliminac
ao de Gauss (algoritmo),
11
espaco amostral, 216
espaco-construtvel, 179
Euler, Leonhard, 18
evento, 216
elementar, 216
exec (func
ao de execuc
ao), 32
f
ormula de Stirling, 209

238

fatorial, 209
Flajolet, Philippe, 50
Floyd, Robert W, 113
Floyd-Warshall (algoritmo), 113
funcao
de complexidade (aval), 32
de custos (custo), 32
de desempenho (desemp), 32
de execucao (exec), 32
grafo, 47, 217
k-partido, 142
bipartido, 142
conexo, 18, 77
de intervalo, 86
direcionado, 217
nao-direcionado, 18
perfeito, 142
Hamilton, Sir William Rowan, 18
hierarquia polinomial, 202
Hoare, Charles Anthony Richard,
55
independent set, 85
inducao natural, 214
inversao, 53
tabela de, 55
iteracao
definida, 36, 39
indefinida, 36, 39
Karatsuba, Anatolii Alekseevitch,
228
Kruskal, Joseph Bernard, 79
Levensthein, Vladimir Iosifovich, 100
Levin, Leonid, 195
linearidade do valor esperado, 217
linguagem, 171
logaritmo, 209
Loteria Esportiva (algoritmo), 45

Indice
m
aquina de RAM, 31
m
aquina de Turing, 173
determinstica, 175
n
ao-determinstica, 175
M
aximo (algoritmo), 43, 54
metodo
da substituic
ao, 119, 120
de
arvore de recurs
ao, 119, 125
mestre, 119, 127
maximum independent set (problema),
85
maximum Knapsack, 114
memoizac
ao, 95
Mergesort, 17
recorrencia, 119
mochila m
axima, 114
Multiplicac
ao de matrizes, 17, 48,
105
algoritmo de Coppersmith-Winograd,
48
algoritmo de Strassen, 48, 133
multiplicac
ao de n
umeros (algoritmo),
228

Quicksort, 55
palavra, 171
Parada n
ao-determinstico em k passos, 49
particionamento
de intervalos, 86, 87
de um vetor, 56
Partition (algoritmo), 56
PD-matrizes, 104
potenciacao, 128
PrefixTree (algoritmo), 90
Prim, Robert C., 79
probabilidade, 216
problema
completo, 187
de avaliacao, 153
de construcao, 153
de decisao, 153
difcil, 187
problema de otimizacao, 153
programacao dinamica, 93, 108
Quicksort (algoritmo), 55, 58

n
umero crom
atico, 142
n
umero de clique, 142
n
umero Fibonacci, 93
n
umeros harm
onicos, 210
notac
ao assint
otica
, 21
, 21
, 21
O, 19
o, 21
O (notac
ao), 19
o (Notac
ao), 21
ordenac
ao
Bubblesort, 41
por inserc
ao direta (algoritmo),
42, 52

recorrencia
simplificar, 119
reduc
ao, 187
relac
ao
polinomialmente limitada, 154,
186
relac
ao de crescimento, 25
, 25
, 25
, 25
, 25
, 25
serie aritmetica, 212
serie geometrica, 212
Savitch, Walter J., 183

239

Indice
seq
uencia, 36, 37
seq
uenciamento
de intervalos (algoritmo), 84
de intervalos (problema), 83
single-source shortest paths, 82
somat
orio, 211
straight insertion sort (algoritmo),
42, 52
Strassen, Volker, 133
subestrutura
otima, 75
subgrafo, 217
induzido, 217
subseq
uencia, 96
subseq
uencia comum mais longa, 96
tabela de invers
oes, 55
tam (tamanho de entradas), 32
tempo-construtvel, 179
teorema de Savitch, 183
tese de Cobham-Edmonds, 8
top-down, 95
transposic
ao, 53
troca mnima (algoritmo), 74
Turing, Alan Mathison, 172
vertice, 217
valor esperado, 217
vari
avel aleat
oria, 217
vertex cover, 149
Vinogradov, I. M., 25
notac
ao de, 25
Vitter, Jeffrey Scott, 50
vizinhanca, 217
Warshall, Stephen, 113

240

Vous aimerez peut-être aussi