Académique Documents
Professionnel Documents
Culture Documents
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
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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 . . . . . . . . . . . . .
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= ?
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
det(Ai )
det(A)
Y
X
sgn()
det(A) =
ai,(i)
Sn
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! 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
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.
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
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
= 2 105 s
= 30s
2(106 )2 OP
109 OP/s
= 2 103 s
= 0.3s
16
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
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
c = 4; n0 = 1
20
(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)
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)
(1.6)
(1.7)
(1.8)
(1.9)
22
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.
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
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)
(Tricotomia)
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
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
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
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
34
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
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
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
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
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
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
42
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).
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
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
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)
46
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
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
1 Tamb
em
48
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
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
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
1in
n
n+22
2n
cp [a](n) = 5 2
(n + 2) = 2 21n
(A.34)
= O(1)
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
Complexidade de Bubblesort
30000
25000
# de entradas
20000
15000
10000
5000
52
10
15
20
Compara es
25
30
35
40
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
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.
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
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
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
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
separando Dn
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
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
dDn
=n+
Pr[d](desemp[QS](dl ) + desemp[QS](dr ))
dDn
=n+
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 +
1in
Ti
0i<n
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
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
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
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
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]
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]
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.
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
leva a soluc
ao
otima atraves de uma regra simples. Portanto, o algoritmo
guloso evite resolver todos subproblemas.
76
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
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.
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
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
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).
82
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?
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
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
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
Objetivo Minimiza o n
umero de r
otulos diferentes.
1
2
3
4
5
6
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.
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
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 ) )
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
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
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. 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
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.
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 =
98
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
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)
h i h i
a
a
a
;
;
;
a
a
b
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
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
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
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.
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)
ti + tk
se vk v e S (k 1, v vk ) definido
ti .
iS (k1,v)
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
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
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
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
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
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
Pr[c = ai ]prof(ai )+
eid
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
e1i<r
Pr[c = ai ]prof(ai ) +
r<id
rid
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
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
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
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
122
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
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
f (n) = c1 f (n/c2 ) = = c1
= nlogc2 c1
T (n/c2 )
log n/c2
c1 c2
obtemos
f (n)
log n
c1 c2
125
6. Divis
ao e conquista
logc2 n
temos
A(n) = A(n/c2 ) +
f (n)
log n
c1 c2
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
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 .
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
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
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
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
se n = 1
se n > 1
132
se n = 1
se n = bi
T (n) = (nlogb a ) +
aj f (n/bj )
j=0
g(n) =
aj f (n/bj )
j=0
se n = 1
se n = bi
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
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.
137
7. Backtracking
138
2n
n n
e
(1 + O(1/n))
(7.1)
139
7. Backtracking
Se considerarmos tambem a restric
ao de diagonal podemos reduzir ainda mais
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
141
7. Backtracking
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?
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
f
a
e
d
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 )
}
146
c
d
e
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.
148
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 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
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
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
||Gi ||
.
OPT(G)
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
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
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
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
Soluc
ao Partic
ao
i [1, n].
1ik
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?
Considere os 4n itens
Otimo:
n baldes com dois elementos de 1/2 + um com 2n elementos de
1/(2n). OPT(x) = n = 1.
166
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
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
Alan Mathison
Turing (*1912,
+1954)
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
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})
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
181
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
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
184
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
186
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)
187
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
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
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
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)?
(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)
em
forma
normal
conjuntiva
Quest
ao Tem uma atribuic
ao a1 , . . . , an B que satisfaz ?
193
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
W1,y,c1,y En,y,cn,y
^
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
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.
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 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
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
Corol
ario 12.1
ATIME = PSPACE
Esta caracterizac
ao facilite entender por que QBF e PSPACE-completo
204
Peru...
205
12. Fora do NP
Mais exemplos da classe PSPACE (3)
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
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:
2k
0
4
1
16
2
65536
k EXP
k0
207
3
1.16
12. Fora do NP
O mundo at
e ELEMENTAR
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)
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)
Proposi
c
ao A.2 (Regras para o m
aximo)
Para ai , bi R
max ai + bi max ai + max bi
i
(A.8)
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)
n! : N N : n 7
i.
1in
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!
(A.12)
=n
por definicao
(A.13)
propriedade do produto
(A.14)
propriedade da divisao
(A.15)
propriedade da potencia
(A.16)
troca de base
(A.17)
mudanca de base
(A.18)
logc (n)
logc (a)
1
logb (a) =
loga (b)
loga (n) =
(A.19)
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.
n+1
1
dx < Hn < 1 +
x
n+1
1
dx
x1
1/x = ln x.
0
0
10
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
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)
(A.28)
(A.29)
X
k=0
xk =
1
1x
(A.30)
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
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
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).
2i 1
i=1
qi =
i=0
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)
(A.36)
Tambem temos
inf f (m)
n
n mn
lim sup f (n) = lim sup f (m)
lim inf f (n) = lim
mn
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
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)
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
= 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!
222
d 1 ns g d 2 ns
a partir de um n0
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
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
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
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
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
228
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
(B.8)
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
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]
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
com 7h 7 7log2 n
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
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