2020
Paulo Feolo
IME,UniversidadedeSãoPaulo
1
Aula 1: Introdução
2
CLRS: Cormen, Leiserson, Rivest, Stein
•
Having a solid base of algorithmi knowledge and te hnique is one hara teristi that separatesthe truly skilled programmers fromthe novi es. With modern omputing te hnology,
you an a omplish some tasks
without knowing mu h about algorithms,
but with a good ba kground in algorithms, you an domu h, mu h more.
•
Uma base sólida de onhe imento e té ni ade algoritmos é uma das ara terísti as que separao programador experiente do aprendiz. Com a moderna te nologia de omputação, vo ê pode realizar algumas tarefas
sem saber muito sobre algoritmos,
mas om um boa base em algoritmos vo êpode fazer muito, muito mais.
O que é AA? Um exemplo
Problema: Rearranjar um vetor em ordem res ente
A[1 . . n]
é res ente seA[1] ≤ · · · ≤ A[n]
22 33 33 33 44 55 11 99 22 55 77
Algoritmo: Rearranja
A[1 . . n]
em ordem res enteORDENA-POR-INSERÇO
(A, n)
1 paraj ← 2
atén
faça 2chave
← A[j]
3
i ← j − 1
4 enquanto
i ≥ 1
eA[i] >
chave
faça 5A[i + 1] ← A[i]
6i ← i − 1
7A[i + 1] ←
chave
1
j
n
22 33 33 33 44 55 11 99 22 55 77
Note a do umentação 5Análise da orreção: O algoritmo faz o que prometeu?
•
Invariante: no iní io de ada iteração,A[1 . . j−1]
é res ente•
Se valena últimaiteração, o algoritmo está orreto!6
ORDENA-POR-INSERÇO
(A, n)
1 paraj ← 2
até (*)n
faça 2chave
← A[j]
3
i ← j − 1
4 enquanto
i ≥ 1
eA[i] >
chave
faça 5A[i + 1] ← A[i]
6
i ← i − 1
7A[i + 1] ←
chave
1
j
n
22 33 33 33 44 55
11 99 22 55 77
•
vale na primeira iteração•
se valeem uma iteração, valena seguinteAnálise do desempenho: Quantotempo onsome?
•
Regra de três•
Regra de três não fun iona!•
Suponha 1 unidade de tempo por linhalinha total deunidades de tempo
1
= n
2
= n − 1
3
= n − 1
4
≤ 2 + 3 + · · · + n
= (n − 1)(n + 2)/2
5
≤ 1 + 2 + · · · + (n−1) = n(n − 1)/2
6
≤ 1 + 2 + · · · + (n−1) = n(n − 1)/2
7
= n − 1
total≤
3
2
n
2
+
7
2
n − 4
unidades detempo•
Algoritmo onsome≤
3
2
n
2
+
7
2
n − 4
unidades detempo•
3
2
é pra valer?Não, pois depende do omputador
• n
2
é pra valer?Sim, pois só depende do algoritmo
•
Queremos um resultado que só dependa doalgoritmo9
Outra táti a:
•
número de omparaçõesA[i] >
chave
≤ 2 + 3 + · · · + n =
1
2
(n − 1)(n + 2) ≤
1
2
n
2
+
1
2
n − 1
•
1
2
é pra valer?Não, pois depende do omputador
• n
2
é pra valer?Sim, pois só depende do algoritmo
•
Queremos resultado que só dependa doalgoritmo10
•
n
2
é informação valiosa
•
mostra evoluçãodo tempo omn
:n
n
2
2n
4n
2
10n
100n
2
AA in a nutshell•
Problema•
Instân ias do problema•
Tamanho de umainstân ia•
Algoritmo•
Análise da orreção do algoritmo•
Análise do desempenho (velo idades) do algoritmo•
Desempenho em função do tamanho das instân ias•
Pior aso•
Evolução do onsumo de tempo emfunção den
Aula 2
Notação
O
13
Notação
O
: omparação assintóti a de funções•
Comparação assintóti a grosseira de funçõesf (n)
eg(n)
•
Qual das duas res e mais rápido?•
Algo om sabor def (n)
≤
g(n)
•
Despreze valores pequenos den
:n → ∞
•
Despreze onstantes multipli ativas:100 n
2
≤
n
2
•
Despreze termos deordem inferior:n
2
+ 10n + 10
≤
2 n
2
14
f (n)
eg(n)
assintoti amentenão-negativasDenição: Dizemos que
f = O(g)
se existem onstantesc > 0
eN > 0
tais quef (n) ≤ c · g(n)
para todon ≥ N
Em outras palavras: para todo
n
su ientemente grande,f (n)
é dominado por um múltiplodeg(n)
Comentários:
•
onstante = não dependende den
•
f ∈ O(g)
seria mais orretoExemplo 1
n
2
+ 10n = O(n
2
)
Prova:•
sen ≥ 10
entãon
2
+ 10n ≤ n
2
+ n · n = n
2
+ n
2
= 2
· n
2
•
resumo:n
2
+ 10n ≤ 2 n
2
para todon ≥ 10
Comoadivinheique
2
e10
sãobonsvaloresparac
eN
respe tivamente? Resposta: zoseguinteras unho:•
queron
2
+ 10n ≤ c n
2
•
dividindoporn
2
, quero1 + 10/n ≤ c
•
sen ≥ 10
então1 + 10/n ≤ 2
9n + 9 = O(n
2
)
Prova:•
sen ≥ 9
então9n + 9 ≤ n · n + n
2
= 2
· n
2
•
resumo:9n + 9 ≤ 2 n
2
para todon ≥ 9
Outra prova:•
sen ≥ 1
então9n + 9 ≤ 9n · n + 9 · n
2
= 18 n
2
17n
2
= O(9n + 9)
?
Não é verdade! Prova, por ontradição:
•
suponha que existemc
eN
tais quen
2
≤ c · (9n + 9)
para todon ≥ N
•
entãon
2
≤ c · (9n + 9n) = 18 c n
para todo
n ≥ N
•
entãon ≤ 18 c
para todon ≥ N
•
impossível!18
Exemplo 4
3n = O(2
n
)
Prova:
•
vou mostrar que3n ≤ 2
n
para
n ≥ 4
•
provapor indução matemáti a:•
sen = 4
então3n = 3 · 4 = 12 ≤ 16 = 2
4
= 2
n
•
sen > 4
então3n = 3(n − 1 + 1)
= 3(n − 1) + 3
≤ 3(n − 1) + 3(n − 1)
≤ 2
n−1
+ 2
n−1
(hipótese deindução)= 2
n
Tambémpoderiamostrarque
3n ≤ 2 · 2
n
para
n ≥ 1
Exemplo 5
log
2
n = O(n)
Prova:
• n ≤ 2
n
quandon ≥ 1
( omo no exemplo anterior)• log
2
é res ente•
logo,log
2
n ≤ n
quandon ≥ 1
a ≤ b
seesomentese2
a
≤ 2
b
• log
2
n =
log
3
n
log
3
2
=
1
log
3
2
log
3
n
•
todososlog
, qualquer que seja a base, estão na mesma orderO
21
Desempenho de ORDENA-POR-INSERÇO:
•
algoritmo onsomeO(n
2
)
unidades detempo
•
não é verdade que onsomeO(n)
unidades de tempo•
existem instân ias que levam o algoritmo a onsumir tempo propor ional an
2
22
Aula 3
Problema da inter alação (merge)
Mergesort
Novo problema/algoritmo: inter alação
Problema: Rearranjar um vetor em ordem res ente sabendo que o lado e o ladodireito são res entes
Sei fazer em
O(n
2
)
unidades de tempo Dá pra melhorar?p
q
r
22 44 55 88 88 33 66 77 99 99 99
p
q
r
22 33 44 55 66 77 88 88 99 99 99
Possíveis valoresdep
,q
er
?Algoritmo: Re ebe
A[p . . r]
talqueA[p . . q]
eA[q+1 . . r]
são res entes. Rearranja o vetor todo em ordem res ente.INTERCALA
(A, p, q, r)
1n
1
← q − p + 1
2n
2
← r − q
3 rie vetores
L[1 . . n
1
+ 1]
eR[1 . . n
2
+ 1]
4 parai ← 1
atén
1
façaL[i] ← A[p + i − 1]
5 paraj ← 1
atén
2
façaR[j] ← A[q + j]
6L[n
1
+ 1]
← R[n
2
+ 1]
← ∞
. . . . . . 25 . . . . . . 7i ← j ← 1
8 para
k ← p
atér
faça 9 seL[i] ≤ R[j]
0 entãoA[k] ← L[i]
1
i ← i + 1
2 senão
A[k] ← R[j]
3
j ← j + 1
Análise do desempenho:
•
tamanho de instân ia:n := r − p + 1
•
algoritmo onsomeO(n)
unidades de tempo•
isso é muito rápido!26
Novo problema/algoritmo: Mergesort
Problema: Rearranjar um vetor em ordem res ente
Algoritmo: Rearranja
A[p . . r]
em ordem res ente supondop ≤ r
MERGE-SORT(A, p, r)
1 sep < r
2 entãoq ← ⌊(p + r)/2⌋
3 MERGE-SORT(A, p, q)
4 MERGE-SORT(A, q + 1, r)
5 INTERCALA(A, p, q, r)
Métodode divisão e onquista
Segredo da velo idade do MERGE-SORT : INTERCALA é rápido
Desempenho: Quanto tempo MERGE-SORT onsome?
•
Tamanho de instân ia:n := r − p + 1
• T (n)
:= tempo para pior instân ia detamanhon
•
Quero ota superior:T (n) = O(n lg n)
•
Sen > 1
entãoT (n) ≤ T
n
2
+ T
n
2
+ f (n)
sendo
f (n)
é onsumo detempo de INTERCALA:f (n) = O(n)
•
Vamos provar queT (n) = O(n lg n)
Aula 4
Análise do Mergesort
Solução de re orrên ias
29
Problema: Rearranjar um vetor em ordem res ente
Algoritmo: Rearranja
A[p . . r]
em ordem res ente, supondop ≤ r
MERGE-SORT
(A, p, r)
1 sep < r
2 entãoq ← ⌊(p + r)/2⌋
3 MERGE-SORT(A, p, q)
4 MERGE-SORT(A, q + 1, r)
5 INTERCALA(A, p, q, r)
Desempenho: Quanto tempo MERGE-SORT onsome?
•
Tamanho de instân ia:n := r − p + 1
• T (n)
:=tempo de pior instân iade tamanhon
•
Vou mostrar queT (n) = O(n lg n)
30 MERGE-SORT
(A, p, r)
1 sep < r
2 entãoq ← ⌊(p + r)/2⌋
3 MERGE-SORT(A, p, q)
4 MERGE-SORT(A, q + 1, r)
5 INTERCALA(A, p, q, r)
T (n) ≤
(
a
sen = 1
T (⌈n/2⌉) + T (⌊n/2⌋) + f (n)
sen = 2, 3, 4, 5, . . .
a
é o onsumo de tempo da linha 1f (n)
é o onsumo de INTERCALA maiso das linhas 1 e 2Queremos uma fórmula fe hada para
T (n)
Exemplo: solução de re orrên ia
Re orrên ia semelhante à do Mergesort:
T (n) =
(
3
sen = 1
T (⌈n/2⌉) + T (⌊n/2⌋) + 10 n
sen = 2, 3, 4, , . . .
Re orrên ia dene função
T
sobre inteiros positivos:n
T (n)
1
3
3
2
3 + 3 + 10
· 2
26
3
3 + 26 + 10
· 3
59
4
26 + 26 + 10
· 4
92
5
26 + 59 + 10
· 5
135
Não sei dar umafórmula fe hada...
Vou omeçartentando algo mais simples: somente potên iasde
2
S(n) =
(
3
sen = 1
2 S(
n
2
) + 10 n
sen = 2
1
, 2
2
, 2
3
, . . .
Fórmula fe hada:S(n) = 10 n lg n + 3n
Prova? Lembrete:lg n := log2
n
33 Teorema:S(n) = 10 n lg n + 3n
paran = 2
0
, 2
1
, 2
2
, 2
3
, . . .
Prova, por indução matemáti a:
•
Base: sen = 1
entãoS(n) = 3 = 10n lg n + 3n
•
Passo: sen > 1
entãoS(n) = 2 S(
n
2
) + 10 n
= 2
10
n
2
lg
n
2
+ 3
n
2
+ 10 n
(hipótese de indução)= 10 n(lg n − 1) + 3n + 10 n
= 10 n lg n − 10n + 3n + 10 n
= 10 n lg n + 3n
34Resposta mais grosseira:
S(n) = O(n lg n)
Prova: ...
Como adivinhei a fórmula
10 n lg n + 3n
?Desenrolei a re orrên ia:
S(n) = 2 S(n/2) + 10 n
= 4 S(n/4) + 20 n
= 8 S(n/8) + 30 n
. . . . . .= n S(1) + 10 lg n n
= 3 n + 10 n lg n
T (n) ≤ T
n
2
+ T
n
2
+ O(n)
Diferenças em relação ao exemplo anterior:
•
≤
no lugar de=
• ⌈.⌉
e⌊.⌋
•
1, 2, 3, 4, 5, . . .
nolugar de2
0
, 2
1
, 2
2
, 2
3
, . . .
•
O(n)
no lugar def (n)
Apesar dessasdiferenças, CLRS (se .4.3 p.7375) garante que
T (n) = O(n lg n)
37 Resolva a re orrên iaR(n) =
(
a
sen = 1
2 R(
n
2
) + b n
sen = 2
1
, 2
2
, 2
3
, . . .
Solução:R(n) = b n lg n + a n
Prova, por indução:
•
Base: sen = 1
entãoR(n) = a
ebn lg n + an = a
•
Passo: sen > 1
entãoR(n) = 2 R(
n
2
) + b n
= 2
b
n
2
lg
n
2
+ a
n
2
+ b n
= b n(lg n − 1) + a n + b n
= b n lg n − b n + a n + b n
= b n lg n + a n
38 Exer í ioO algoritmo supõe
n ≥ 1
e devolve o valor de um elemento máximodeA[1 . . n]
MAX
(A, n)
1 sen = 1
2 então devolva
A[1]
3 senãox ←
MAX(A, n − 1)
4 sex ≥ A[n]
5 então devolva
x
6 senão devolva
A[n]
Análise dodesempenho:
•
tamanho de instân ia:n
• T (n)
: tempo depior aso para instân ia de tamanhon
T (n) ≤
(
a
sen = 1
T (n − 1) + b
sen = 2, 3, 4, 5, . . .
sendo
a
eb
onstantesTeorema:
T (n) ≤ a + b(n − 1)
para todo inteiro positivon
Prova: ...
Colorário:
T (n) = O(n)
Aula 5
Ordens
Ω
eΘ
Algoritmo Heapsort
41
Ordem
Ω
Denição: Dizemos que
f = Ω(g)
se existem onstantesc > 0
eN > 0
tais quef (n)
≥
c · g(n)
para todon ≥ N
Exemplos:• n
2
= Ω(n)
• n
2
= Ω(n
2
)
• n
2
− 10n − 100 = Ω(n
2
)
• n lg n = Ω(n)
• 1.001
n
= Ω(n
100
)
• n
não éΩ(n
2
)
f = Ω(g)
se e somenteseg = O(f )
42 OrdemΘ
Denição: Dizemos que
f = Θ(g)
sef = O(g)
ef = Ω(g)
Exemplos:• 100 n
2
= Θ(n
2
)
• n
2
− 10n − 100 = Θ(n
2
)
• lg n = Θ(ln n)
• n lg n
não éΘ(n
2
)
Novo algoritmo: Heapsort
Rearranja
A[1 . . n]
emordem res enteHEAPSORT
(A, n)
1 para
i ← ⌊n/2⌋
de res endo até1
2 façaMAX-HEAPIFY(A, n, i)
3 param ← n
de res endo até2
4 façaA[1] ↔ A[m]
5 MAX-HEAPIFY
(A, m − 1, 1)
1
m
n
66 44 55 44 22 33 11 77 88 99 99
Invariante: no iní io de ada iteração
• A[m+1 . . n]
grandes, ordem res enteVetor
A[1 . . m]
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
lho esquerdo do nói
2i
lho direito do nói
2i + 1
pai donói
⌊i/2⌋
raiz (nó1
) nível 0 nível do nói
⌊lg i⌋
nívelp
tem2
p
nós altura do nói
⌊lg
m
i
⌋
folha altura 0A[1 . . m]
é um max-heap seA[⌊i/2⌋] ≥ A[i]
para adai
45
MAX-HEAPIFY re ebe
A[1 . . m]
ei ≥ 1
tais que subárvores om raiz2i
e2i + 1
são max-heaps.Rearranja de modoque subárvore om raiz
i
seja max-heap.MAX-HEAPIFY
(A, m, i)
1e ← 2i
2d ← 2i + 1
3 see ≤ m
eA[e] > A[i]
4 entãox ← e
5 senãox ← i
6 sed ≤ m
eA[d] > A[x]
7 entãox ← d
8 sex 6= i
9 então
A[i] ↔ A[x]
0 MAX-HEAPIFY
(A, m, x)
46
Aula 6
Algoritmo Heapsort ( ontinuação)
Filas de prioridades
MAX-HEAPIFY re ebe
A[1 . . m]
ei ≥ 1
tais que subárvores om raiz2i
e2i + 1
são max-heaps.Rearranja de modoque subárvore om raiz
i
seja max-heap.MAX-HEAPIFY
(A, m, i)
1e ← 2i
2d ← 2i + 1
3 see ≤ m
eA[e] > A[i]
4 entãox ← e
5 senãox ← i
6 sed ≤ m
eA[d] > A[x]
7 entãox ← d
8 sex 6= i
9 então
A[i] ↔ A[x]
0 MAX-HEAPIFY
(A, m, x)
•
tamanhoda instân ia: altura donói
h := ⌊lg
m
i
⌋
•
onsumo de tempo no pior aso:T (h)
•
re orrên ia:T (h) = T (h − 1) + O(1)
•
mais on reto:T (1) = a
eT (h) = T (h − 1) + b
parah > 1
solução:
T (h) = bh − b + a
parah ≥ 1
resumo:T (h) = O(h)
•
omoh ≤ lg m
, podemos dizer que onsumo éO(lg m)
49
•
tamanhoda instân ia: número denós na subárvore om raizi
M ∼
=
m/i
•
onsumo de tempo no pior aso:T (M )
•
re orrên ia:T (M ) ≤ T (2M/3) + O(1)
justi ativado
2/3
...•
mais on reto (a
eb
números positivos):T (1) = a
eT (M ) ≤ T (2M/3) + b
paraM > 1
solução:T (M ) ≤ b log
3/2
M + a
resumo:T (M ) = O(lg M )
•
omoM <
2m
i
≤ 2m
, o algoritmo éO(lg m)
50 Construção de um max-heap:1 para
i ← ⌊n/2⌋
de res endo até1
2 façaMAX-HEAPIFY(A, n, i)
Invariante: no iní io de ada iteração
i+1, . . . , n
são raízes de max-heapsDesempenho:
•
tamanhode instân ia:n
•
onsumo de tempo no pior aso:T (n)
• T (n) =
n
2
O(lg n) = O(n lg n)
.•
análisemais uidadosa:T (n) = O(n)
.Prova de que a onstrução doheap onsome
O(n)
: Parasimpli ar, suponhaárvoreé ompletaetemalturah
portanton = 2
h+1
− 1
,portanto1
2
(n + 1) = 2
h
adanó quantos altura onsome nós1
1
2
h−1
2
2
2
h−2
3
3
2
h−3
. . . . . .h
h
2
0
1
· 2
h−1
+ 2
· 2
h−2
+ . . . + h · 2
0
1
· 2
−1
+ 2
· 2
−2
+ . . . + h · 2
−h
· 2
h
1
·
1
2
1
+ 2
·
1
2
2
+ . . . + h ·
1
2
h
+
· · ·
·
1
2
(n + 1)
1/2
(1−1/2)
2
·
1
2
(n + 1)
n + 1
x
0
+ x
1
+ x
2
+ x
3
+
· · · =
1
1
− x
1x
0
+ 2x
1
+ 3x
2
+
· · · =
1
(1
− x)
2
1x
1
+ 2x
2
+ 3x
3
+
· · · =
x
(1
− x)
2
53 HEAPSORT(A, n)
1 para
i ← ⌊n/2⌋
de res endo até1
O(n)
2 façaMAX-HEAPIFY
(A, n, i)
O(n)
3 para
m ← n
de res endo até2
O(n)
4 faça
A[1] ↔ A[m]
O(n)
5 MAX-HEAPIFY
(A, m − 1, 1)
n O(lg n)
Total:
O(n lg n)
Consumodetempono pior aso:
Ω(n lg n)
.54
Fila de prioridades (priority queue)
Tipo abstrato dedados (= abstra t data type)
1
m
A
Organizar
A[1 . . m]
de modo que as operaçõesonsulte máximo extraia máximo
aumenta valor de elemento insira novo elemento
sejam e ientes
Vetor sem ordem alguma? res ente? de res ente?
Implementações om max-heap
HEAP-MAXIMUM
(A, m)
1 devolvaA[1]
Consome
O(1)
unidades detempoHEAP-EXTRACT-MAX
(A, m) ✄
m ≥ 1
1max
← A[1]
2A[1] ← A[m]
3m ← m − 1
4 MAX-HEAPIFY(A, m, 1)
5 devolvamax
HEAP-INCREASE-KEY
(A, i,
chave
) ✄
chave
≥ A[i]
1A[i] ←
chave
2 enquanto
i > 1
eA[⌊i/2⌋] < A[i]
3 façaA[i] ↔ A[⌊i/2⌋]
4
i ← ⌊i/2⌋
Noiní iode ada iteração,A[1 . . m]
éummax-heapex etotalvezpelaviolaçãoA[⌊i/2⌋] < A[i]
MAX-HEAP-INSERT
(A, m,
chave
)
1m ← m + 1
2
A[m] ← −∞
3 HEAP-INCREASE-KEY
(A, m,
chave
)
Todos onsomem
O(lg m)
57
Aula 7
Qui ksort
CLRS ap.7
58
Novo algoritmo: Qui ksort
O algoritmo QUICKSORT rearranja
A[p . . r]
em ordem res enteQUICKSORT
(A, p, r)
1 sep < r
2 então
q ←
PARTICIONE(A, p, r)
3 QUICKSORT(A, p, q − 1)
4 QUICKSORT(A, q + 1, r)
p
q
r
22 22 22 11 11 44 88 99 88 99 88
No omeçodalinha3,
A[p . . q−1] ≤ A[q] ≤ A[q+1 . . r]
PARTICIONE rearranja o vetor de modo que
p ≤ q ≤ r
eA[p . . q−1] ≤ A[q] < A[q+1 . . r]
PARTICIONE
(A, p, r)
1x ← A[r]
✄
x
éopiv 2i ← p − 1
3 paraj ← p
atér − 1
4 façaseA[j] ≤ x
5 entãoi ← i + 1
6A[i] ↔ A[j]
7A[i + 1] ↔ A[r]
8 devolvai + 1
Invariantes: no omeço de ada iteração
A[p . . i] ≤ x
A[i+1 . . j−1] > x
A[r] = x
p
i
j
r
•
tamanho de instân ia:n := r − p + 1
•
onsumo de tempo:Θ(n)
unidades de tempoConsumo de tempo do QUICKSORT
•
tamanho de instân ia:n := r − p + 1
•
o algoritmo éO(n
2
)
•
o algoritmo éΩ(n lg n)
omo veremos adiante
61
•
se PARTICIONE divide sempren/2
paran/2
então
T (n) = 2 T (n/2) + Θ(n)
dondeT (n) = Θ(n lg n)
•
se PARTICIONE dividen/10
para9n/10
então
T (n) = T (n/10) + T (9n/10) + Θ(n)
doneT (n) = Θ(n lg n)
•
se PARTICIONE divide0
paran−1
então
T (n) = T (n − 1) + Θ(n)
doneT (n) = Θ(n
2
)
62
Desempenho do QUICKSORT no pior aso
• P (n)
: onsumo de tempo no pior aso• P (n) ≤
max
0≤k<n
P (k) + P (n−k−1)
+ Θ(n)
•
ota superior:P (n) = O(n
2
)
•
prova?•
em lugar de uma prova, vou examinar um exemplo on retoExemplo on reto:
S(0) = S(1) = 1
eS(n) = max
0≤k<n
S(k) + S(n−k−1)
+ n
paran ≥ 2
n
S(n)
0
1
1
1
2
1 + 1 + 2 = 4
3
1 + 4 + 3 = 8
4 1 + 8 + 4 = 13
Vou provar que
S(n) ≤ n
2
+ 1
para
n ≥ 0
Prova:
•
sen ≤ 1
então ...trivial•
sen ≥ 2
entãoS(n) =
max
0≤k<n
S(k) + S(n−k−1)
+ n
hi≤ max
k
2
+ 1 + (n−k−1)
2
+ 1
+ n
= (n − 1)
2
+ 2 + n
✄
CLRS 7.4-3= n
2
− n + 3
≤ n
2
+ 1
Exer í io(CLRS7.4-1):S(n) ≥
1
2
n
2
para todon ≥ 1
65Desempenho do QUICKSORT no melhor aso
• M (n)
: onsumo de tempo no melhor aso• M (n) ≥
min
0≤k<n
M (k) + M (n−k−1)
+ Θ(n)
•
ota inferior:M (n) = Ω(n lg n)
•
prova? CLRS 7.4-2 66 Qui ksort aleatorizado PARTICIONE-ALE(A, p, r)
1i ←
RANDOM(p, r)
2A[i] ↔ A[r]
3 devolva PARTICIONE
(A, p, r)
QUICKSORT-ALE
(A, p, r)
1 sep < r
2 então
q ←
PARTICIONE-ALE(A, p, r)
3 QUICKSORT-ALE(A, p, q − 1)
4 QUICKSORT-ALE(A, q + 1, r)
Consumode tempo esperado (ou seja, médio):
Θ(n lg n)
Aula 8
i
-ésimo menor elementoMediana
Novo problema:
i
-ésimo menor elementoProblema: En ontrar o
i
-ésimo menor elemento deA[p . . r]
SuponhaA[p . . r]
sem elementos repetidosUma instân ia:
33
éo4-omenorelemento22 99 32 88 34
3311 97 55 66
A
11 22 32
3334 55 66 88 97 99
ordenado Mediana:⌊
n+1
2
⌋
-ésimomenor 69 Observações:•
tamanho de instân ia:n := r − p + 1
•
problemasó tem solução sei
está no intervalo1 . . n
•
asoi = 1
: algoritmoO(n)
•
asoi = 2
: algoritmoO(n)
•
mediana: algoritmoO(n lg n)
• i
arbitrário: algoritmoO(n lg n)
•
existe algo melhor?70
Algoritmo: Re ebe vetor
A[p . . r]
(elementos todos diferentes) ei
no intervalo1 . . r−p+1
e devolve
i
-ésimomenor elementoSELECT
(A, p, r, i)
1 sep = r
2 então devolva
A[p]
3q ←
PARTICIONE(A, p, r)
4k ← q − p + 1
5 se
k = i
6 então devolva
A[q]
7 sek > i
8 então devolva SELECT
(A, p, q − 1, i)
9 senão devolva SELECT(A, q + 1, r, i − k)
p
q
r
|
{z
}
|
{z
}
k − 1
n − k
Consumo de tempo
•
propor ional ao número de omparações entre elementos deA
•
todas as omparações a onte em no PARTICIONE•
PARTICIONE(A, p, r)
fazn − 1
omparações• T (n)
: número omparações entre elementos deA
no pior aso• T (n) = T (n − 1) + n−1
solução:
T (n) = Θ(n
2
)
EXEMPLO
Número médiode omparações no pior aso
Examinatodas as pertmutações
1, 2, . . . , n
Supõe linha 6 não se apli a e linhas 89 es olhem o ladomaior
A[p . . r]
omps 1,2 1+0 2,1 1+0 média 2/2A[p . . r]
omps 1,2,3 2+1 2,1,3 2+1 1,3,2 2+0 3,1,2 2+0 2,3,1 2+1 3,2,1 2+1 média 16/6 73A[p . . r]
omps 1,2,3,4 3+3 2,1,3,4 3+3 1,3,2,4 3+2 3,1,2,4 3+2 2,3,1,4 3+3 3,2,1,4 3+3 1,2,4,3 3+1 2,1,4,3 3+1 1,4,2,3 3+1 4,1,2,3 3+1 2,4,1,3 3+1 4,2,1,3 3+1A[p . . r]
omps 1,3,4,2 3+1 3,1,4,2 3+1 1,4,3,2 3+1 4,1,3,2 3+1 3,4,1,2 3+1 4,3,1,2 3+1 2,3,4,1 3+3 3,2,4,1 3+3 2,4,3,1 3+2 4,2,3,1 3+2 3,4,2,1 3+3 4,3,2,1 3+3 média 116/24Maisum aso: quando
r − p + 1 = 5
, amédia é864/120
74
Esperança (número médio) de omparações
• E[T (n)] =
?•
notação:E(n) := E[T (n)]
•
probab dequeA[p . . q]
tenha exatamentek
elementos:1
n
•
re orrên ia:E(n) ≤ n−1 +
n
X
k=1
1
n
· E
max(k − 1, n − k)
≤ n−1 +
2
n
E(⌊
n
2
⌋) + E(⌊
n
2
⌋+1) + · · · + E(n−1)
•
solução:E(n)
?
= O(n)
Implementação: SELECT-ALEATORIZADO
•
troque PARTICIONE por PARTICIONE-ALEATORIZADO•
número esperado de omparações:E(1) = 0
E(n) ≤ n−1 +
2
n
E(⌊
n
2
⌋) + · · · + E(n−1)
paran ≥ 2
•
alguns valores:n
E(n)
=
∼
1
0
0
2
2/2
1
3
16/6 2.7
4
116/24 4.8
5 864/120 7.2
Teorema:
E(n) ≤ 4n
para todointeiron ≥ 1
Prova:
•
sen = 1
entãoE(n) = E(1) = 0 ≤ 4 = 4 · 1 = 4n
•
sen > 1
entãoE(n) ≤ n − 1 +
2
n
E(⌊
n
2
⌋) + · · · + E(n−1)
≤ n − 1 +
2
n
4⌊
n
2
⌋ + · · · + 4(n−1)
< 4n − 1
< 4n
Conra,pois as ontasnãobatem omasdo livro!
77
Corolário:
E(n) = O(n)
78
Aula 9
Árvores binárias de bus a
Programação dinâmi a:
números de Fibona i e
multipli ação de adeia de matrizes
CLRS ap.12, ap.15
Árvores binárias de bus a
Árvores binárias:
•
vetor×
árvore binária•
vetor res ente×
árvore binária de bus a•
bus a binária em vetor×
bus a binária em lista en adeadaEstrutura:
•
nóx
•
chave
[x]
•
pai:p[x]
•
lhos:esq
[x]
edir
[x]
Árvore de bus a: para todonó
x
para todoy
na subárvore esquerda dex
e todonóz
na subárvore direitadex
chave
[y] ≤
chave
[x] ≤
chave
[z]
81
Varredura esquerda-raiz-direita:
imprime os nós da subárvore que tem raiz
x
VARREDURA-E-R-D
(x)
✄
inorder traversal 1 sex 6=
NIL
2 então VARREDURA-E-R-D
(
esq
[x])
3 imprima
chave
[x]
4 VARREDURA-E-R-D
(
dir
[x])
•
árvore é debus a⇔
varredura erd dá haves em ordem res ente
•
tamanho da instân ia: número de nós na subárvore de raizx
notação:n
•
onsumo de tempo:T (n) = T (k) + T (n − k − 1) + Θ(1)
para algum0
≤ k ≤ n − 1
• T (n) = Θ(n)
82
Tipo abstrato de dados
•
operações: bus a, mínimo, máximo, su essor, prede essor, inserção, remoção•
todas onsomemO(h)
, sendoh
a altura da árvoreBUSCA-EM-ÁRVORE
(x, k)
✄
Tree-Sear h 1 sex =
NIL
ouk =
chave
[x]
2 então devolva
x
3 sek <
chave
[x]
4 então BUSCA-EM-ÁRVORE
(
esq
[x], k)
5 senão BUSCA-EM-ÁRVORE(
dir
[x], k)
MIN-DE-ÁRVORE
(x)
✄
Tree-Minimum 1 enquantoesq
[x] 6=
NIL
2 faça
x ←
esq
[x]
3 devolvax
SUCESSOR-EM-ÁRVORE
(x)
✄
Tree-Su essor 1 sedir
[x] 6=
NIL
2 então devolva MIN-DE-ÁRVORE
(
dir
[x])
3y ← p[x]
4 enquanto
y 6=
NIL
ex =
dir
[y]
5 façax ← y
6
y ← p[y]
7 devolvay
INSERÇO-EM-ÁRVORE? REMOÇO-EM-ÁRVORE?
Todas as operações onsomem
O(h)
sendoh
a altura da árvoreÁrvore balan eada:
h = O(lg n)
sendon
o número de nós85
Programação dinâmi a
•
re ursão omtabela•
transformação inteligente de re ursão em iteraçãoExemplos:
•
números deFibona i•
árvore ótimade bus a (CLRS se .15.2)•
multipli açãode adeias de matrizes•
subseqüên ia omum máxima•
mo hila booleanaAqui, apalavraprogramação nãotemnadaaver om programação de omputadores
86
Problema 1: números de Fibona i
F
0
= 0
F
1
= 1
F
n
= F
n−1
+ F
n−2
Algoritmo re ursivo: FIBO-REC(n)
1 sen ≤ 1
2 então devolvan
3 senãoa ←
FIBO-REC(n − 1)
4b ←
FIBO-REC(n − 2)
5 devolvaa + b
Consumode tempo é propor ional ao número de somas:
T (0) = T (1) = 0
T (n) = T (n − 1) + T (n − 2) + 1
sen ≥ 2
Solução:T (n) ≥ 3
n
/2
n
paran ≥ 6
Consumoexponen ial:T (n) = Ω
(
3
2
)
n
Por quetãoine iente?
Algoritmoresolvea mesmasubinstân iamuitas vezes:
F5
/
\
F4
F3
/
\
/
\
F3
F2
F2
F1
/
\
/
\
/
\
F2
F1
F1
F0
F1
F0
FIBO
(n)
1f [0] ← 0
2f [1] ← 1
3 parai ← 2
atén
4 façaf [i] ← f [i − 1] + f [i − 2]
5 devolvaf [n]
Tabelaf [0 . . n−1]
Consumode tempo:Θ(n)
89 seA
ép × q
eB
éq × r
entãoAB
ép × r
(AB)[i, j] =
P
k
A[i, k] B[k, j]
número demultipli ações es alares =
p · q · r
Multipli açãoem adeia:
A
1
· A
2
· A
3
10
A
1
100
A
2
5
A
3
50
((A
1
A
2
) A
3
)
7500
mults es alares(A
1
(A
2
A
3
))
75000
mults es alares90
Problema: En ontrar número mínimo de multipli ações es alaresne essário para al ular produto
A
1
A
2
· · · A
n
p
0
p
1
p
2
. . .
p
n−1
p
n
A
1
A
2
. . .
A
n
adaAi
ép
i−1
× p
i
Continua... Aula 10 Programação dinâmi a:Multipli ação de adeia de matrizes
Subset sum (= soma de heques)
Problema 2: multipli ação de adeia de matrizes
se
A
ép × q
eB
éq × r
entãoAB
ép × r
(AB)[i, j] =
P
k
A[i, k] B[k, j]
número demultipli ações es alares =
p · q · r
Multipli açãoem adeia:
A
1
· A
2
· A
3
10
A
1
100
A
2
5
A
3
50
((A
1
A
2
) A
3
)
7500
mults es alares(A
1
(A
2
A
3
))
75000
mults es alares93
ne essário para al ular produto
A
1
A
2
· · · A
n
p
0
p
1
p
2
. . .
p
n−1
p
n
A
1
A
2
. . .
A
n
ada
Ai
ép
i−1
× p
i
Passo 1: Estrutura re ursiva do problema
Soluções ótimas ontêm soluções ótimas: se
(A
1
A
2
) (A
3
((A
4
A
5
)A
6
))
minimizamultipli ações então(A
1
A
2
)
e(A
3
((A
4
A
5
)A
6
))
tambémminimizam
94
Passo 2: Algoritmo re ursivo:
re ebe
p
i−1
, . . . , p
j
omi ≤ j
e devolve número mínimo de multipli ações es alaresREC-MAT-CHAIN
(p, i, j)
1 sei = j
2 então devolva
0
3x ← ∞
4 para
k ← i
atéj − 1
faça 5a ←
REC-MAT-CHAIN(p, i, k)
6b ←
REC-MAT-CHAIN(p, k + 1, j)
7q ← a + p
i−1
p
k
p
j
+ b
8 seq < x
9 entãox ← q
0 devolvax
•
tamanho de umainstân ia:n := j − i + 1
•
onsumo de tempo:Ω(2
n
)
•
demora tanto porque mesma instân ia resolvidamuitas vezesPasso 3: Programação dinâmi a
m[i, j] =
número mínimo de multipli ações es alares para al ularA
i
· · · A
j
de omposição:
(A
i
· · · A
k
) (A
k+1
· · · A
j
)
re orrên ia:
se
i = j
entãom[i, j] = 0
sei < j
entãom[i, j] = min
i≤k<j
m[i, k] + p
i−1
p
k
p
j
+ m[k+1, j]
Exemplo:
m[3, 7] = min
•
ada instân iaA
i
· · · A
j
resolvida umasó vez•
em que ordem al ular os omponentes da tabelam
?•
para al ularm[2, 6]
pre iso dem[2, 2]
,m[2, 3]
,m[2, 4]
,m[2, 5]
e dem[3, 6]
,m[4, 6]
,m[5, 6]
,m[6, 6]
1
2
3
4
5
6
7
8 j
1 0
2
0
⋆
⋆
⋆
?
3
0
⋆
4
0
⋆
5
0
⋆
6
0
7
0
8
0
i
97Cal ule todos os
m[i, j]
omj − i + 1 = 2
, depois todos omj − i + 1 = 3
,depois todos om
j − i + 1 = 4
, et .98
Programação dinâmi a: re ebe
p
0
, p
1
, . . . , p
n
e devolvem[1, n]
MATRIX-CHAIN-ORDER
(p, n)
1 parai ← 1
atén
faça 2m[i, i] ← 0
3 para
l ← 2
atén
faça4 para
i ← 1
atén − l + 1
faça 5j ← i + l − 1
6
m[i, j] ← ∞
7 para
k ← i
atéj − 1
faça 8q ← m[i, k] + p
i−1
p
k
p
j
+ m[k+1, j]
9 seq < m[i, j]
0 então
m[i, j] ← q
1 devolva
m[1, n]
•
ompare omREC-MAT-CHAIN•
linhas410tratamdassub adeiasAi
· · · Aj
de omprimentol
•
umdos invariantes menosimportantes:j − i + 1 = l
Prova da orreção doalgoritmo:
•
estrutura re ursiva(optimal substru ture property)•
(veja slide 93)Consumode tempo:
•
tamanho de umainstân ia:n := j − i + 1
•
obviamenteΘ(n
3
)
(três loops en aixados)Problema 3: Subset sum (soma de heques)
Problema: Dados inteiros não-negativos
w
1
, . . . , w
n
, W
en ontrarK ⊆ {1, . . . , n}
tal queX
k∈K
w
k
= W
•
Uma instân ia:w = 100, 30, 90, 35, 40, 30, 10
eW = 160
•
motivação: problema dos hequesalgum sub onj dos heques
w
1
, . . . , w
n
tem somaW
?•
solução força-bruta: examine todos os2
n
sub onjuntos de
{1, . . . , n}
101
devolve
1
se instân iatem solução e0
em aso ontrárioREC
(w, n, W )
1 seW = 0
2 então devolva1
3 sen = 0
4 então devolva0
5 se REC(w, n − 1, W ) = 1
6 então devolva1
7 sew
n
> W
8 então devolva0
9 senão devolva REC
(w, n−1, W −w
n
)
102
Prova da orreção doalgoritmo:
depende da subestrutura ótima(optimal substru ture property): se
K
é solução da instân ia(n, W )
então•
sen ∈ K
entãoK − {n}
é solução da instân ia(n − 1, W − w
n
)
•
sen /
∈ K
entãoK
é solução da instân ia(n − 1, W )
Consumode tempo:• Ω(2
n
)
(Prova?)•
demora tanto porque mesma instân iaresolvida muitas vezesAlgoritmo de programação dinâmi a
s[i, Y ] :=
1
seinstân ia(i, Y )
temsolução0
aso ontrárioRe orrên ia:
s[i, 0] = 1
s[0, Y ] = 0
seY > 0
s[i, Y ] = s[i − 1, Y ]
sew
i
> Y
s[i, Y ] = max
s[i − 1, Y ], s[i − 1, Y − w
i
]
0
1
2
3
4
0
0
0
0
0
0
1
2
3
⋆
⋆
⋆
⋆
4
?
5
olunas:Y
vaide0
aW
linhas:i
vaide0
an
SUBSET-SUM
(w, n, W )
0 alo as[0 . . n, 0 . . W ]
1 parai ← 0
atén
faça 2s[i, 0] ← 1
3 para
Y ← 1
atéW
faça 4s[0, Y ] ← 0
5 para
i ← 1
atén
faça 6s[i, Y ] ← s[i−1, Y ]
7 ses[i, Y ] = 0
ew
i
≤ Y
8 então
s[i, Y ] ← s[i−1, Y − w
i
]
9 devolvas[n, W ]
adainstân ia
(i, Y )
resolvidaumasóvez105
Prova da orreção:
•
propriedade da subestrutra ótimaConsumode tempo:
•
obviamenteΘ(n W )
Exer í io:
•
es reva uma versão que devolvaK
tal queP
k∈K
w
k
= W
106Resumo do projeto do algoritmo
•
passo 1: en ontrar a propridade da subestrutura ótima (optimal substru ture property)•
passo 2: es reveralgoritmo re ursivo•
passo 3: transformar algoritmo em programação dinâmi aComentários sobre o onsumo de tempo do algoritmo
Algoritmo onsome tempo
Θ(nW )
Adependên iadeW
émánotí ia:semultipli ar
w1, . . . , wn, W
por100
a instân ia ontinua essen ialmentea mesma mas oalgoritmo onsome
100
vezesmaistempo!Qualotamanho deumainstân ia
w1, . . . , wn, W
do problema?•
émuitorazoáveldizerque otamanho én + 1
•
infelizmente,nãodápra es reverΘ(nW )
omo funçãoden + 1
porquenW
envolveovalor(enãosóotamanho) doW
•
adeniçãodetamanho deveria levarem onta ovalordeW
enãoapenas apresençadeW
•
outrodetalhe: éne essário denirotamanho pordois números•
adoteopar(n, W )
omotamanho deumainstân ia•
mas(n, W )
nãoéadeniçãoidealdetamanho: semultipli armosw
1
, . . . , w
n
, W
por100
a instân ia ontinua essen ialmenteamesma mas oseutamanho passade(n, W )
a(n, 100 W )
, oque nãoérazoável!•
deniçãorazoável detamanho de umnúmero( omoW
,porexemplo): númerode ara teres•
exemplo: otamanhodo número256877
é6
(enão256877
)•
on lusão: tamanhodeinstân iaw
1
, . . . , w
n
, W
é(n, ⌈log(W +1)⌉)
•
o onsumodetempodeSUBSET-SUMéΘ(n 2
log W
)
•
oalgoritmoé onsideradoexponen ial•
vejamda páginawww.ime.usp.br/~pf/analise_de_algoritmos /aulas /mo hi la.htm l
109
Aula 11
Programação dinâmi a:
subseqüên ia omum máxima
CLRS se .15.4
110
Problema: Subseqüên ia omum máxima
•
Denição:hz
1
, . . . , z
k
i
é subseqüên ia dehx
1
, . . . , x
m
i
se existem índi esi
1
< · · · < i
k
tais quez
1
= x
i
1
, z
2
= x
i
2
, . . . , z
k
= x
i
k
•
Uma instân ia:h5, 9, 2, 7i
é subseqüên ia deh9, 5, 6, 9, 6, 2, 7, 3i
Pequenas observações:• hx
1
, . . , x
m
i
é o mesmo quex[1 . . m]
• x
j
é o mesmo quex[j]
•
De idir sehz
1
, . . . , z
k
i
é subseqüên ia dehx
1
, . . . , x
m
i
•
Uma instân ia:A A A
é subseq deB A B B A B B B A A B B A B A B A B B
?•
Solução gulosa: SUB-SEQ(z, k, x, m)
0i ← k
1j ← m
2 enquantoi ≥ 1
ej ≥ 1
faça 3 sez
i
= xj
4 entãoi ← i − 1
5j ← j − 1
6 sei ≥ 1
7 entãodevolvanão 8 senãodevolvasim Prove queoalgoritmoestá orreto!
113
de seqüên ias
X
eY
• Z
é subseq omum deX
eY
seZ
é subseq deX
e deY
•
minha abreviatura: ss o = subseqüên ia omum•
abreviaturado livro: LCS = longest ommon subsequen e•
uma instân ia(g 15.6 de CLRS):X
A B C B D A BY
B D C A B A ss o B C A ss o maximal A B A ss o máxima B C B A outra ss o máxima B D A B114
•
invente heurísti a gulosa para o problema•
mostre que ela não resolve o problemaAlgoritmo de programação dinâmi a
Problema simpli ado:
en ontrar o omprimento de uma ss omáx de
X
eY
c[i, j] =
omprimentode uma ss omáx deX
i
eY
j
Re orrên ia:
• c[0, j] = c[i, 0] = 0
• c[i, j] = c[i−1, j−1] + 1
sei, j > 0
ex
i
= y
j
LCS-LENGTH
(X, m, Y, n)
0 alo ac[0 . . m, 0 . . n]
1 parai ← 0
atém
faça 2c[i, 0] ← 0
3 para
j ← 1
atén
faça 4c[0, j] ← 0
5 para
i ← 1
atém
faça 6 paraj ← 1
atén
faça 7 sex
i
= y
j
8 então
c[i, j] ← c[i − 1, j − 1] + 1
9 senão sec[i − 1, j] ≥ c[i, j − 1]
10 então
c[i, j] ← c[i − 1, j]
11 senão
c[i, j] ← c[i, j − 1]
12 devolva
c[m, n]
117 horizontal:X =
A B C B D A B verti al:Y =
B D C A B A0 1 2 3 4 5 6
B D C A B A0
0 0 0 0 0 0 0
1
A0
2
B0
3
C0
4
B0
5
D0
6
A0
7
B0
118 horizontal:X =
A B C B D A B verti al:Y =
B D C A B A0 1 2 3 4 5 6
B D C A B A0
0 0 0 0 0 0 0
1
A0 0
2
B0
3
C0
4
B0
5
D0
6
A0
7
B0
horizontal:X =
A B C B D A B verti al:Y =
B D C A B A0 1 2 3 4 5 6
B D C A B A0
0 0 0 0 0 0 0
1
A0 0 0
2
B0
3
C0
4
B0
5
D0
6
A0
7
B0
horizontal:
X =
A B C B D A B verti al:Y =
B D C A B A0 1 2 3 4 5 6
B D C A B A0
0 0 0 0 0 0 0
1
A0 0 0 0
2
B0
3
C0
4
B0
5
D0
6
A0
7
B0
118- horizontal:X =
A B C B D A B verti al:Y =
B D C A B A0 1 2 3 4 5 6
B D C A B A0
0 0 0 0 0 0 0
1
A0 0 0 0 1
2
B0
3
C0
4
B0
5
D0
6
A0
7
B0
118-d horizontal:X =
A B C B D A B verti al:Y =
B D C A B A0 1 2 3 4 5 6
B D C A B A0
0 0 0 0 0 0 0
1
A0 0 0 0 1 1 1
2
B0
3
C0
4
B0
5
D0
6
A0
7
B0
horizontal:X =
A B C B D A B verti al:Y =
B D C A B A0 1 2 3 4 5 6
B D C A B A0
0 0 0 0 0 0 0
1
A0 0 0 0 1 1 1
2
B0 1 1 1 1 2 2
3
C0
4
B0
5
D0
6
A0
7
B0
horizontal:
X =
A B C B D A B verti al:Y =
B D C A B A0 1 2 3 4 5 6
B D C A B A0
0 0 0 0 0 0 0
1
A0 0 0 0 1 1 1
2
B0 1 1 1 1 2 2
3
C0 1 1 2 2 2 2
4
B0 1 1 2 2 3 3
5
D0 1 2 2 2 3 3
6
A0 1 2 2 3 3 4
7
B0 1 2 2 3
118-g horizontal:X =
A B C B D A B verti al:Y =
B D C A B A0 1 2 3 4 5 6
B D C A B A0
0 0 0 0 0 0 0
1
A0 0 0 0 1 1 1
2
B0 1 1 1 1 2 2
3
C0 1 1 2 2 2 2
4
B0 1 1 2 2 3 3
5
D0 1 2 2 2 3 3
6
A0 1 2 2 3 3 4
7
B0 1 2 2 3 4
118-h horizontal:X =
A B C B D A B verti al:Y =
B D C A B A0 1 2 3 4 5 6
B D C A B A0
0 0 0 0 0 0 0
1
A0 0 0 0 1 1 1
2
B0 1 1 1 1 2 2
3
C0 1 1 2 2 2 2
4
B0 1 1 2 2 3 3
5
D0 1 2 2 2 3 3
6
A0 1 2 2 3 3 4
7
B0 1 2 2 3 4 4
Prova da orreção doalgoritmo:
• Z = hz
1
, . . . , z
k
i
,X = hx
1
, . . . , x
m
i
,Y = hy
1
, . . . , y
n
i
•
notação:X
i
:=
hx
1
, . . . , x
i
i
•
propriedade da subestrutura ótima:suponha
Z
é ss omáx deX
eY
•
sex
m
= y
n
entãoz
k
= x
m
= y
n
eZ
k−1
é ss omáx deX
m−1
eY
n−1
•
sex
m
6= y
n
ez
k
6= x
m
entãoZ
é ss omáx deX
m−1
eY
•
sex
m
6= y
n
ez
k
6= y
n
entãoZ
é ss omáx deX
eY
n−1
Prove a propriedade!X
A B C B D A BY
B D C A B Ass o máxima B C B A
outra ss o máxima B D A B
120
•
tamanho de instân iaé o par(m, n)
•
linha 7 (sex
i
= y
j
) é exe utadamn
vezes•
onsumo de tempo:O(mn)
121 Aula 12 Algoritmos gulosos O problema do disquete CLRS ap16 Algoritmos gulosos Algoritmo guloso
•
em ada iteração, a res enta à solução o objeto que pare e melhor naquele momento•
pro ura maximal e a aba obtendo máximo•
pro ura ótimo lo al e a aba obtendo ótimo globalCostumaser
•
muito simplese intuitivo•
muito e iente•
difí il provar que está orretoProblema pre isa ter
•
subestrutura ótima ( omo na programação dinâmi a)Instân ias
v=1
da mo hilabooleanaProblema: Dados inteiros não-negativos
w
1
, . . . , w
n
eW
en ontrarK ⊆ {1, . . . , n}
máximo tal queX
k∈K
w
k
≤ W
•
Diferente do subset sum dos slides 101106•
Motivação: gravação de arquivos em um disqueteProblema simpli ado: en ontrar
|K|
máximo124
dado
I ⊆ {1, . . . , n}
o algoritmo devolve|K|
sendoK
sub onjunto máximo deI
tal queP
k∈K
w
k
≤ W
DISQUETE-REC
(w, W, I)
1 seI = ∅
2 então devolva
0
3 es olha
m
emI
talquew
m
= min
{w
i
: i ∈ I}
4 sew
m
> W
5 então devolva
0
6 senão devolva
1 +
DISQUETE-REC(w, W − w
m
, I − {m})
125
Prova da orreção doalgoritmo:
•
es olha gulosa (greedy- hoi e property):se
w
m
= min{w
1
, . . . , w
n
}
ew
m
≤ W
então
m
perten e a alguma solução ótima•
subestrutura ótima (optimal substru ture property):se
K
é solução ótima da instân ia(n, W )
en ∈ K
entãoK − {n}
é solução ótimapara(n − 1, W − w
n
)
A provadas propriedades é muito fá il!
Versão melhor de DISQUETE-REC: supõe
w
1
≥ · · · ≥ w
n
DISQUETE-REC
(w, n, W )
1 sen = 0
ouw
n
> W
2 então devolva0
3 senão devolva
1 +
DISQUETE-REC(w, n − 1, W − w
n
)
Consumode tempo:
•
tamanhode uma instân ia:n
•
re orrên ia:T (n) = T (n − 1) + O(1)
Versão iterativa, supondo
w
1
≥ · · · ≥ w
n
:DISQUETE-IT
(w, n, W )
1k ← 0
2 para
j ← n
de res endo até1
faça 3 sew
j
> W
4 então devolva
k
5 senão
k ← k + 1
6
W ← W − w
j
7 devolva
k
Consumode tempo:
O(n)
Programação dinâmi a onsumiria
Θ(n
2
)
128
Aula 13
Algoritmos gulosos:
problema dos intervalos disjuntos
CLRS seções16.1,16.2e16.3
129
Problema: oleção disjunta máxima de intervalos
Problema: Dados intervalos
[s
1
, f
1
), . . . , [s
n
, f
n
)
en ontrar uma oleção máxima de intervalos disjuntos dois a dois
Instân ia:
s1
f1
Solução(sub onjuntode
{1, . . . , n}
):Intervalos
i
ej
são disjuntossefi
≤ sj
oufj
≤ si
Outra instân ia:
i
1
2
3
4
5
6
7
8
9
10
11
s
i
1
3
0
5
3
5
6
8
8
2 12
f
i
4
5
6
7
8
9 10 11 12 13 14
•
um andidato a solução:{
3, 9, 11}
Propriedade da es olha gulosa:
•
sef
m
é mínimo entãom
está em alguma solução ótimaPropriedade da subestruturaótima:
•
seA
é solução ótima em ∈ A
é tal quef
m
é mínimoentão
A − {m}
é solução ótima de{j : s
j
≥ f
m
}
(todos os intervalos posteriores a
f
m
)Propriedade mais geral da subestrutura ótima:
•
seA
é solução ótima eA ∋ m
então
A − {m}
é solução ótima de{i : f
i
≤ s
m
} ∪ {j : s
j
≥ f
m
}
(intervalos anteriores a
s
m
ouposteriores af
m
)Prove as propriedades!
132
dado
I ⊆ {1, . . . , n}
o algoritmo devolve sub onjunto máximo
A
deI
tal que os intervalos[s
a
, f
a
)
,a ∈ A
, são disjuntos dois a doisINTERV-DISJ-REC
(s, f, I)
✄
supõeI 6= ∅
1 se
|I| = 1
2 então devolva
I
3 senão es olha
m
emI
tal quef
m
= min
{f
i
: i ∈ I}
4J ← {j ∈ I : s
j
≥ f
m
}
5
A ←
INTERV-DISJ-REC(s, f, J)
6 devolva
{m} ∪ A
prova da orreção: es olha gulosa + subestrutura ótima
133
Versão re ursiva maise iente:
•
não pre isa administrar o onjuntoI
expli itamente•
supõef
1
≤ · · · ≤ f
n
Algoritmo devolve uma sub ol disjunta máx de
{ [s
k
, f
k
) : s
k
≥ f
h
}
INTERV-DISJ-REC(s, f,
h
)
1m ← h + 1
2 enquantom ≤ n
es
m
< f
h
3 façam ← m + 1
4 sem > n
5 então devolva∅
6 senão devolva
{m} ∪
INTERV-DISJ-REC(s, f, m)
Para resolver problema original
adote
f
0
:=
−∞
e diga INTERV-DISJ-REC(s, f, 0)
Algoritmo guloso, versão iterativa:
supõe
f
1
≤ · · · ≤ f
n
INTERVALOS-DISJUNTOS
(s, f, n)
✄
supõen ≥ 1
1
A ← {1}
2i ← 1
3 para
m ← 2
atén
faça 4 ses
m
≥ f
i
5 então
A ← A ∪ {m}
6
i ← m
7 devolva
A
Nomedoalgoritmono CLRS:Greedy-A tivity-Sele tor Aorganização doalgoritmoésemelhanteà doPARTICIONE
•
tamanho de instân ia:n
•
onsumo de tempo:Θ(n)
136
era orreta e e iente, mas deselegante:
INTERVALOS-DISJUNTOS-FEIO
(s, f, n)
1A ← ∅
2i ← 1
3 enquantoi ≤ n
faça 4A ← A ∪ {i}
5m ← i + 1
6 enquantom ≤ n
es
m
< f
i
faça 7m ← m + 1
8i ← m
9 devolvaA
Mostre que onsumo de tempo é
O(n)
(apesar dos dois loops)137 Aula 14 Algoritmos gulosos: ódigos de Human CLRS seção16.3 Códigos de Human
Trata de ompressão dedados e ombina várias idéias/té ni as/estruturas:
•
gula•
lade prioridades•
texto = seqüên ia de ara teres•
ada ara ter representado por umaseq de bits•
ódigo de um ara ter = seq de bits•
número debits por ara ter podeser variável•
exemplo: a = 0, b = 101, et .•
ódigo livre de prexos•
fá il odi ação/de odi ação: 01010101101 = ababbDadoum arquivo (= seqüên ia de ara teres)
hc
1
, . . . , c
n
i
, omc
i
∈ C
para todoi
Cada
c
emC
o orref [c]
vezes noarquivoProblema:
En ontrar uma odi ação de ara teres em seqs de bits que minimize o omprimento doarquivo odi ado
140
Exemplo:
ara ter
c
... a b d e f freqüên iaf [c]
... 45 13 12 16 9 5 ódigo de omprimento xo .. 000 001 010 011 100 101 ódigo de omprimento variável 0 101 100 111 1101 1100se texto original tem100 ara teres, texto odi ado terá
•
300 bits se ódigo de omprimentoxo•
224 bits se ódigo de omprimentovariável141
•
tabela de ódigo é representada por árvore binária•
árvore binária heia: ada nó tem0 ou 2 lhos•
ara teressão as folhas•
0 se des e para esquerda, 1 se des e para direita• d(c)
:=profundidade de folhac
na árvore• d(c)
= número de bits de ara terc
•
usto da árvore:=
P
c
f [c] d(c)
•
texto odi ado teráP
c
f [c] d(c)
bitsProblema reformulado: en ontrar árvore de ustomínimo
exemplos: . . / \ 0/ \1 / \ / \ a . / \ / \ . . / \ / \ / . . / \ / / \ / \ . . . b . d / \ / \ / \ / \ a b d e f f e
Re ebe onjunto
C
de ara teres e vetor de freqüên iasf
onstroi árvore do ódigo e devolve raiz da árvoreHUFFMAN
(C, f )
0Q ← C
1 para
i ← 1
até|C| − 1
faça 2x ←
EXTRACT-MIN(Q)
3y ←
EXTRACT-MIN(Q)
4 aloque novo nóz
5esq
[z] ← x
6
dir
[z] ← y
7
chave
[z] ←
chave
[x] +
chave
[y]
8 INSERT(Q, z)
9 devolva EXTRACT-MIN
(Q)
Q
é la deprioridadesEXTRACT-MIN retira de
Q
um nóq
omchave
[q]
mínima144
INICIALIZA-ÁRVORE
(C)
1 para adac
emC
faça 2 aloque novo nóz
3esq
[z] ←
dir
[z] ←
NIL
4chave
[z] ← f [c]
5 INSERT(Q, z)
145 Desempenho de HUFFMAN:•
instân ia:(C, f )
•
tamanho de instân ia:n := |C|
•
ini ialização da árvore:n
vezes INSERT• n − 1
vezes: EXTRACT-MIN, EXTRACT-MIN , INSERT•
ada EXTRACT-MIN e ada INSERT onsomeO(lg n)
total:
O(n lg n)
Prova da orreção deHUFFMAN:
Propriedade da es olha gulosa: se
x
ey
minimizamf
então existe árvore ótima em quex
ey
são folhas-irmãsProva: