You are on page 1of 44

i-simo menor elemento

CLRS 9
Algoritmos p.1/28
i-simo menor
Problema: Encontrar o i-simo menor elemento de A[1 . . n]
Suponha A[1 . . n] sem elementos repetidos.
Algoritmos p.2/28
i-simo menor
Problema: Encontrar o i-simo menor elemento de A[1 . . n]
Suponha A[1 . . n] sem elementos repetidos.
Exemplo: 33 o quarto menor elemento de:
1 10
22 99 32 88 34 33 11 97 55 66 A
1 4 10
11 22 32 33 34 55 66 88 97 99 ordenado
Algoritmos p.2/28
Mediana
Mediana o
n+1
2
-simo menor ou o
n+1
2
-simo menor
elemento
Exemplo: a mediana 34 ou 55:
1 10
22 99 32 88 34 33 11 97 55 66 A
1 5 6 10
11 22 32 33 34 55 66 88 97 99 ordenado
Algoritmos p.3/28
Menor
Recebe um vetor A[1 . . n] e devolve o valor do menor
elemento.
MENOR (A, n)
1 menor A[1]
2 para k 2 at n faa
3 se A[k] < menor
4 ento menor A[k]
5 devolva menor
Algoritmos p.4/28
Menor
Recebe um vetor A[1 . . n] e devolve o valor do menor
elemento.
MENOR (A, n)
1 menor A[1]
2 para k 2 at n faa
3 se A[k] < menor
4 ento menor A[k]
5 devolva menor
O consumo de tempo do algoritmo MENOR (n).
Algoritmos p.4/28
Segundo menor
Recebe um vetor A[1 . . n] e devolve o valor do segundo
menor elemento, supondo n 2.
SEG-MENOR (A, n)
1 menor min{A[1], A[2]} segmenor max{A[1], A[2]}
2 para k 3 at n faa
3 se A[k] < menor
4 ento segmenor menor
5 menor A[k]
6 seno se A[k] < segmenor
7 ento segmenor A[k]
8 devolva segmenor
Algoritmos p.5/28
Segundo menor
Recebe um vetor A[1 . . n] e devolve o valor do segundo
menor elemento, supondo n 2.
SEG-MENOR (A, n)
1 menor min{A[1], A[2]} segmenor max{A[1], A[2]}
2 para k 3 at n faa
3 se A[k] < menor
4 ento segmenor menor
5 menor A[k]
6 seno se A[k] < segmenor
7 ento segmenor A[k]
8 devolva segmenor
O consumo de tempo do algoritmo SEG-MENOR
(n).
Algoritmos p.5/28
i-simo menor
Recebe A[1 . . n] e i tal que 1 i n
e devolve valor do i-simo menor elemento de A[1 . . n]
SELECT-ORD (A, n, i)
1 ORDENE (A, n)
2 devolva A[i]
O consumo de tempo do algoritmo SELECT-ORD
(nlg n).
Algoritmos p.6/28
SELECT-ALEATORIZADO (= randomized select)
Usa o PARTICIONE-ALEA...
Algoritmos p.7/28
SELECT-ALEATORIZADO (= randomized select)
Usa o PARTICIONE-ALEA...
Recebe A[p . . r] e i tal que 1 i rp+1
e devolve valor do i-simo menor elemento de A[p . . r]
SELECT-ALEA(A, p, r, i)
1 se p = r
2 ento devolva A[p]
3 q PARTICIONE-ALEA(A, p, r)
4 k q p + 1
5 se k = i
6 ento devolva A[q]
7 se k > i
8 ento devolva SELECT-ALEA(A, p, q 1, i)
9 seno devolva SELECT-ALEA(A, q + 1, r, i k)
Algoritmos p.7/28
Consumo de tempo
O consumo de tempo proporcional a
T(n) = nmero de comparaes entre elementos de A
quando n = r p + 1
linha consumo de todas as execues da linha
1-2 = 0
3 = n 1
4-7 = 0
8 = T(k 1)
9 = T(n k)
total max{T(k 1), T(n k)} + n 1
T(n) uma varivel aleatria.
Algoritmos p.8/28
Consumo de tempo
T(1) = 0
T(n)
n1

h=1
X
h
T(h) + n 1 para n = 2, 3, . . .
onde
X
h
=

1 se max{k 1, n k} = h
0 caso contrrio
Algoritmos p.9/28
Pr{X
h
= 1} = E[X
h
]
X
h
=

1 se max{k 1, n k} = h
0 caso contrrio
Qual a probabilidade de X
h
valer 1?
Algoritmos p.10/28
Pr{X
h
= 1} = E[X
h
]
X
h
=

1 se max{k 1, n k} = h
0 caso contrrio
Qual a probabilidade de X
h
valer 1?
Para h = 1, . . . , n/2 1, Pr {X
h
= 1} = 0 = E[X
h
].
Para h = n/2, . . . , n,
Pr {X
h
=1} =
1
n
+
1
n
=
2
n
= E[X
h
]
Se n impar e h = n/2, ento
Pr {X
h
= 1} =
1
n
= E[X
h
]
Algoritmos p.10/28
Consumo de tempo esperado
E[T(1)] = 0
E[T(n)]
n1

h=1
E[X
h
T(h)] + n 1

n1

h=1
E[X
h
] E[T(h)] + n 1 (CLRS 9.2-2)

2
n
n1

h=a
E[T(h)] + n 1 para n = 2, 3, . . .
onde a = n/2.
Soluo: E[T(n)] = O(n).
Algoritmos p.11/28
Consumo de tempo esperado
E[T(n)] pertence a mesma classe O que:
S(1) = 0
S(n)
2
n
n1

h=a
S(h) + n 1 para n = 2, 3, . . .
onde a = n/2.
n 1 2 3 4 5 6 7 8 9 10
S(n) 0.0 1.0 2.7 4.8 7.4 10.0 13.1 15.8 19.4 22.1
4n 4 8 12 16 20 24 28 32 36 40
Vamos vericar que S(n) < 4 n para n = 1, 2, 3, 4, . . .
Algoritmos p.12/28
Recorrncia
Prova: Se n = 1, ento S(n) = 0 < 4 = 4 1 = 4n. Se n 2,
S(n)
2
n
n1

h=a
S(h) + n 1
hi
<
2
n
n1

h=a
4 h + n 1
=
8
n
(
n1

h=1
h
a1

h=1
h) + n 1

4
n
(n
2
n
(n 1)(n 3)
4
) + n 1
=
4
n
(
3n
2
4

3
4
) + n 1
= 3n
3
n
+ n 1 = 4n
3
n
1 < 4n.
Algoritmos p.13/28
Concluso
O consumo de tempo esperado do algoritmo
SELECT-ALEA O(n).
Algoritmos p.14/28
Exerccios
Exerccio 1 [CLRS 9.1-1] [muito bom!]
Mostre que o segundo menor elemento de um vetor A[1 . . n] pode ser encontrado com no
mais que n + lg n 2 comparaes.
Exerccio 2
Prove que o algoritmo Select Aleatorizado (= Randomized Select) funciona corretamente.
Exerccio 3 [CLRS 9.2-3]
Escreva uma verso iterativa do algoritmo Select Aleatorizado (= Randomized Select).
Exerccio 4
Considere o algoritmo abaixo, que devolve o mximo de um vetor.
Suponha que A[1 . . n] uma permutao aleatria uniforme de 1, . . . , n.
Quantas vezes a linha 4 executada?
MAX (A, n)
1 max 0
2 para i 1 at n faa
3 se A[i] > max
4 ento max A[i]
5 devolva max
Algoritmos p.15/28
Skip Lists
Sedgewick, sec 13.5
Algoritmos p.16/28
Skip Lists
Sedgewick, sec 13.5
Skip lists: aprimoramento sobre listas ligadas.
Algoritmos p.16/28
Skip Lists
Sedgewick, sec 13.5
Skip lists: aprimoramento sobre listas ligadas.
Objetivo:
tornar a busca em uma lista ligada ordenada mais eciente.
Algoritmos p.16/28
Skip Lists
Sedgewick, sec 13.5
Skip lists: aprimoramento sobre listas ligadas.
Objetivo:
tornar a busca em uma lista ligada ordenada mais eciente.
Ferramenta usada: aleatoriedade.
Algoritmos p.16/28
De onde elas vm?
Uma lista ligada:
Algoritmos p.17/28
De onde elas vm?
Uma lista ligada:
Uma extenso:
Algoritmos p.17/28
De onde elas vm?
Uma lista ligada:
Uma skip list:
Algoritmos p.17/28
De onde elas vm?
Uma lista ligada:
Uma skip list:
Resultado:
Lista ordenada com busca, insero e remoo
em tempo esperado O(lg n).
Algoritmos p.17/28
Skip Lists
Algoritmos p.18/28
Skip Lists
Idia: Ao inserir x na skip list, escolhemos aleatoriamente o
nmero de apontadores de clula que vai conter x.
Algoritmos p.18/28
Skip Lists
Idia: Ao inserir x na skip list, escolhemos aleatoriamente o
nmero de apontadores de clula que vai conter x.
A escolha feita de modo a preservar as propores de
apontadores por nvel: se h N clulas na skip list,
o nmero esperado de apontadores no nvel 0 N;
o nmero esperado de apontadores no nvel 1 N/2;
o nmero esperado de apontadores no nvel 2 N/4;
o nmero esperado de apontadores no nvel 3 N/8;
e assim por diante...
Algoritmos p.18/28
Skip Lists
Algoritmos p.19/28
Skip Lists
Ou seja, o nmero de apontadores (nvel) da nova clula
k, com probabilidade 1/2
k
.
Algoritmos p.19/28
Skip Lists
Ou seja, o nmero de apontadores (nvel) da nova clula
k, com probabilidade 1/2
k
.
t: nmero aleatrio entre 0 e 1
1 apontador
2 apontadores
3 apontadores
4 apontadores
0 1 1/4
1/2
Algoritmos p.19/28
Escolha do nvel
lgNmax = nvel mximo permitido
lgNmax = nvel mximo existente no momento
NVEL-ALEATRIO ()
1 t RAND() nmero aleatrio em [0 . . 1)
2 i 0
3 j 1 j = 2
i
4 enquanto i < lgNmax e t 1/j faa
5 j 2j
6 i i + 1
7 se i > lgN
8 ento lgN i
9 devolva i
Algoritmos p.20/28
Busca numa skip list
BUSCA (r, x)
1 devolva BUSCA-NVEL (r, r, x, lgN)
Algoritmos p.21/28
Busca numa skip list
BUSCA (r, x)
1 devolva BUSCA-NVEL (r, r, x, lgN)
BUSCA-NVEL (r, p, x, k)
1 se x = chave(prox(p, k))
2 devolva prox(p, k)
3 se x < chave(prox(p, k))
4 se k = 0
5 devolva NIL
6 seno
7 devolva BUSCA-NVEL (r, p, x, k 1)
8 seno
9 devolva BUSCA-NVEL (r, prox(p, k), x, k)
Algoritmos p.21/28
Insero numa skip list
INSERE (r, x)
1 INSERE-NVEL (r, NOVACEL(x, NVEL-ALEATRIO()), lgN)
2 N N + 1
Algoritmos p.22/28
Insero numa skip list
INSERE (r, x)
1 INSERE-NVEL (r, NOVACEL(x, NVEL-ALEATRIO()), lgN)
2 N N + 1
INSERE-NVEL (p, q, k)
1 v chave(q)
2 se v < chave(prox(p, k))
3 se k < nivel (q)
4 prox(q, k) prox(p, k)
5 prox(p, k) q
5 se k > 0
6 INSERE-NVEL (p, q, k 1)
7 seno
8 INSERE-NVEL (prox(p, k), q, k)
Algoritmos p.22/28
Exerccios
1. Escreva o REMOVE (r, x), que remove de uma skip list
apontada por r a clula cujo contedo x.
Algoritmos p.23/28
Exerccios
1. Escreva o REMOVE (r, x), que remove de uma skip list
apontada por r a clula cujo contedo x.
2. Mostre que o nmero esperado de apontadores em uma
skip list em que ocorreram N inseres O(N).
ocupa espao linear
Algoritmos p.23/28
Exerccios
1. Escreva o REMOVE (r, x), que remove de uma skip list
apontada por r a clula cujo contedo x.
2. Mostre que o nmero esperado de apontadores em uma
skip list em que ocorreram N inseres O(N).
ocupa espao linear
3. Mostre que o nmero esperado de nveis em uma skip
list que sofreu N inseres O(lg N).
Algoritmos p.23/28
Exerccios
1. Escreva o REMOVE (r, x), que remove de uma skip list
apontada por r a clula cujo contedo x.
2. Mostre que o nmero esperado de apontadores em uma
skip list em que ocorreram N inseres O(N).
ocupa espao linear
3. Mostre que o nmero esperado de nveis em uma skip
list que sofreu N inseres O(lg N).
4. Mostre que o nmero esperado de elementos no nvel
i 1 entre dois elementos consecutivos do nvel i dois.
Algoritmos p.23/28
Exerccios
1. Escreva o REMOVE (r, x), que remove de uma skip list
apontada por r a clula cujo contedo x.
2. Mostre que o nmero esperado de apontadores em uma
skip list em que ocorreram N inseres O(N).
ocupa espao linear
3. Mostre que o nmero esperado de nveis em uma skip
list que sofreu N inseres O(lg N).
4. Mostre que o nmero esperado de elementos no nvel
i 1 entre dois elementos consecutivos do nvel i dois.
5. Conclua que o nmero esperado de comparaes em
uma busca, insero ou remoo O(lg N).
Algoritmos p.23/28