Anda di halaman 1dari 28

Algoritmos I

G.P. Telles
ICUNICAMP
2 de maio de 2012
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 1 / 27
Referencias
Estes slides sao baseados principalmente nos livros:
CLRS09 T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein. Introduction to
Algorithms. McGraw-Hill, 2009.
Man89 U. Manber. Algorithms: A Creative Approach. Addison-Wesley, 1989.
Estes slides sao incompletos e contem erros, inconsistencias,
imperfei coes e outros defeitos desse genero.
Estes slides foram escritos usando gramatica anterior `a reforma
ortograca de 2009.
Guilherme P. Telles, 2012.
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 2 / 27
Parte I
Selecao
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 3 / 27
Sec oes
CLRS09: captulo 9.
Man89: secao 6.5.
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 4 / 27
Selecao
O problema da selecao (ou das estatsticas de ordem) e o problema de
encontrar o i -esimo menor elemento em uma seq uencia
X = x
1
, x
2
, . . . , x
n
, para i inteiro e 1 i n.
Se X esta ordenada, o problema pode ser resolvido em tempo
constante.
Vamos considerar casos em que X nao esta ordenada, que os
elementos sao distintos e estao armazenados em um vetor.
Os casos particulares mais freq uentes sao o mnimo (i = 1), o
maximo (i = n) e a mediana (i = (n + 1)/2 ou i = n/2, n/2 + 1).
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 5 / 27
Selecao em (n lg n)
O problema da selecao pode ser resolvido em tempo (n lg n).
Basta ordenar o vetor usando um algoritmo otimo e retornar a
posi cao i .
Ha algoritmos mais ecientes. Vamos considerar primeiro o mnimo e
o maximo e depois o problema geral.
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 6 / 27
Mnimo, maximo
O mnimo pode ser encontrado com n 1 compara coes.
O mesmo vale para o maximo.
Min(A)
1 min = 1
2 for i = 2 to A. length
3 if A[i ] < A[min]
4 min = i
5 return min
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 7 / 27
Maximo e mnimo ao mesmo tempo
O maximo e o mnimo podem ser encontrados independentemente
com 2n-3 comparacoes, primeiro n 1 para o maximo e depois n 2
para o mnimo.
Nessa solucao usamos 2 comparacoes para cada chave.
Outra ideia e comparar dois n umeros entre si e depois o menor com o
mnimo e o maior com o maximo, gastando 3 comparacoes para cada
par de chaves.
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 8 / 27
Maximo e mnimo, outra ideia
Uma inducao com bases
n = 1, n = 2
e passo de
n 2 para n
em que x
n1
e x
n
sao comparados entre si e depois com o maximo e
mnimo correntes faz C(n) comparacoes:
C(n) =
_
_
_
0 se n = 1
1 se n = 2
C(n 2) + 3 se n > 2
Resolvendo temos 1 + 3(
n
2
1) se n e par e 3(
n1
2
) se n e impar.
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 9 / 27
Selecao em O(n) no caso medio
O algoritmo de particao posiciona um pivo e particiona as chaves.
Se queremos o i -esimo menor entao ou ele e o proprio pivo, ou esta `a
esquerda do pivo ou `a direita do pivo.
Usando a parti cao obtemos um algoritmo que e O(n
2
) no pior caso e
O(n) no melhor caso e no caso medio.
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 10 / 27
Algoritmo
Seleciona o i -esimo menor no vetor A[l . . r ].
k armazena o n umero de chaves entre l e p.
Randomized-Selection(A, l , r , i )
1 if l == r
2 return A[l ]
3 p = Randomized-Partition(A, l , r )
4 k = p l + 1
5 if i == k
6 return A[p]
7 elseif i < k
8 return Randomized-Selection(A, l , p 1, i )
9 else
10 return Randomized-Selection(A, p + 1, r , i k)
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 11 / 27
Complexidade
O pior caso e o caso em que o particionamento e desbalanceado,
resultando em um vetor de instancias de tamanho n, n 1, . . . , 2, 1.
Esse caso e O(n
2
).
O melhor caso e o que o particionamento e balanceado, resultando
em instancias de tamanho aproximadamente n,
n
2
,
n
4
, . . . , 2, 1. Esse
caso e O(n).
Uma analise desses casos pode ser feita de forma similar `a do
Quicksort.

E um bom algoritmo para sele cao na pratica.


G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 12 / 27
Complexidade de caso medio
Seja T(n) o tempo de execucao do algoritmo em um vetor A[l . . r ] de
tamanho n.
Randomized-Partition retorna elementos de A como pivo com a
mesma probabilidade.
Entao para todo k, 1 k n, A[l . . p] tem k elementos com
probabilidade 1/n.
Para k = 1, 2, . . . , n denimos variaveis aleatorias binarias X
k
tais que
X
k
= {o vetor A[l . . p] tem exatamente k elementos}
Para uma chamada de Randomized-Selection, uma variavel
aleatoria X
k
tem valor 1 todas as demais tem valor 0.
Supondo que os elementos do vetor sao distintos
E[X
k
] = 1/n.
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 13 / 27
Complexidade de caso medio
Seja T(n) o tempo de execucao do algoritmo em um vetor A[l . . r ] de
tamanho n.
Randomized-Partition retorna elementos de A como pivo com a
mesma probabilidade.
Entao para todo k, 1 k n, A[l . . p] tem k elementos com
probabilidade 1/n.
Para k = 1, 2, . . . , n denimos variaveis aleatorias binarias X
k
tais que
X
k
= {o vetor A[l . . p] tem exatamente k elementos}
Para uma chamada de Randomized-Selection, uma variavel
aleatoria X
k
tem valor 1 todas as demais tem valor 0.
Supondo que os elementos do vetor sao distintos
E[X
k
] = 1/n.
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 13 / 27
Complexidade de caso medio
Para obter um limite superior, vamos supor T(n) e monotonicamente
crescente e que o i -esimo elemento esta sempre do lado da parti cao
com o maior n umero de elementos.
Para um problema de tamanho n o Randomized-Partition leva
tempo (n). Como estamos interessados em um limite superior,
O(n) e suciente.
Quando X
k
= 1 os subvetores terao tamanhos k 1 e n k.
Entao temos a recorrencia
T(n)
n

k=1
X
k
(T(max(k 1, n k)) + O(n))
=
n

k=1
X
k
T(max(k 1, n k)) + O(n)
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 14 / 27
Complexidade de caso medio
E[T(n)] E[
n

k=1
X
k
T(max(k 1, n k)) + O(n)]
=
n

k=1
E[X
k
T(max(k 1, n k))] + O(n)
=
n

k=1
E[X
k
] E[T(max(k 1, n k))] + O(n)
=
n

k=1
1
n
E[T(max(k 1, n k))] + O(n)
X
k
e T(max(k 1, n k)) sao independentes entao
E[X
k
T(max(k 1, n k))] = E[X
k
] E[T(max(k 1, n k))].
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 15 / 27
Complexidade de caso medio
Analisando max(k 1, n k) obtemos
max(k 1, n k) =
_
k 1 if k > n/2
n k if k n/2
Se n e par cada termo entre T(n/2) e T(n 1) aparece
exatamente duas vezes.
Se n e impar cada termo entre T(n/2) e T(n 1) aparece
exatamente duas vezes e T(n 1) aparece uma vez.
De um jeito ou de outro
E[T(n)]
2
n
n1

k=n/2
E[T(k)] + O(n).
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 16 / 27
Substituicao
Vamos supor que E[T(n)] = O(n).
Para a base, vamos supor que o caso limite da recorrencia e
T(n) = O(1) para valores pequenos de n.
Para a HI, vamos supor que E[T(k)] ck para k < n e para alguma
constante c que satisfaca as condi coes da recorrencia.
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 17 / 27
Substituicao
E[T(n)]
2
n
n1

k=n/2
E[T(k)] + O(n)

2
n
n1

k=n/2
ck + an
=
2c
n
_
_
n1

k=1
k
n/21

k=1
k
_
_
+ an
=
2c
n
_
(n 1)n
2

(n/2 1)n/2
2
_
+ an
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 18 / 27
Substituicao
E[T(n)] =
2c
n
_
(n 1)n
2

(n/2 1)n/2
2
_
+ an

2c
n
_
(n 1)n
2

(n/2 2)(n/2 1)
2
_
+ an
=
c
n
_
3n
2
4
+
n
2
2
_
+ an

3cn
4
+
c
2
+ an
= cn
_
cn
4

c
2
an
_
cn
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 19 / 27
Substituicao
A desigualdade vale se escolhemos c tal que
cn/4 c/2 an 0
cn/4 an c/2
n(c/4 a) c/2
Se c/4 a > 0 podemos dividir ambos os lados por c/4 a,
n
c/2
c/4 a
n
2c
c 4a
Entao para c > 4a e n 2c/(c 4a) o passo vale.
Se T(n) = O(1) para n < 2c/(c 4a) a base esta completa e
podemos concluir que E[T(n)] = O(n).
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 20 / 27
Selecao em tempo O(n) no pior caso
M. Blum, R.W. Floyd, V.P. Pratt, R.L. Rivest e R.E. Tarjan, 1973.
Usa uma estrategia engenhosa para garantir um particionamento
sempre razoavelmente balanceado.
As constantes sao grandes e por isso e um algoritmo que nao e usado
na pratica.
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 21 / 27
Selection-BFPRT
Selection-BFPRT(A, l , r , i )
1 if l = r
2 return A[l ]
3 p = Partition-BFPRT(A, l , r )
4 k = p l + 1
5 if i = k
6 return A[p]
7 elseif i < k
8 return Selection-BFPRT(A, l , p 1, i )
9 else
10 return Selection-BFPRT(A, p + 1, r , i k)
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 22 / 27
Partition-BFPRT
1
Divida o vetor em n/5 grupos de tamanho 5 e um grupo de
tamanho menor que 5.
2
Encontre a mediana de cada grupo, ordenando-os.
3
Agrupe as medianas no incio do vetor e encontre a mediana das
medianas chamando Selection-BFPRT.
4
Particione o vetor em torno da mediana das medianas.
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 23 / 27
Partition-BFPRT(A, l , r )
1 m = (r l + 1) mod 5
2 i = l
3 while i < r 4
4 Insertion-Sort(A, i , i + 4)
5 i = i + 5
6 if m > 0
7 Insertion-Sort(A, r m + 1, r )
8 i = j = l
9 while i < r 4
10 switch A[j ] and A[i + 2]
11 i = i + 5
12 j = j + 1
13 if m > 0
14 switch A[j ] and A[r m/2]
15 j = j + 1
16 mm = Selection-BFPRT(A, l , j 1, j /2)
17 switch A[mm] and A[r ]
18 return Partition(A, l , r )
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 24 / 27
Tamanho dos blocos da particao
Vamos supor que todos os elementos do vetor sao distintos.
No mnimo
1
2

n
5
grupos contribuem com 3 elementos maiores que
a mediana das medianas, exceto aquele que a contem e exceto o
grupo que contem menos que 5 elementos (se houver).
Entao o n umero de elementos maiores que a mediana das medianas e
no mnimo
3
__
1
2
_
n
5
__
2
_

3n
10
6.
O mesmo vale para os elementos garantidamente menores que a
mediana das medianas.
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 25 / 27
Complexidade do Selection-BFPRT
Vamos denotar o tempo gasto por Selection-BFPRT em um vetor
de tamanho n por T(n).
Partition-BFPRT: Os passos 1, 2 e 4 custam O(n). O passo 3
custa T(n/5).
A chamada recursiva custa T(7n/10 + 6) no pior caso.
Entao temos a recorrencia
T(n) =
_
O(1) se n < 140
T(n/5) + T(7n/10 + 6) + (n) se n 140
onde 140 e uma constante escolhida para as contas darem certo.
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 26 / 27
T(n) = O(n), por indu cao
Para a base vamos supor que T(n) cn para todo n < 140.
Passo:
T(n) T(n/5) + T(7n/10 + 6) + an
cn/5 + c(7n/10 + 6) + an
c(n/5 + 1) + c(7n/10 + 6) + an
= 9cn/10 + 7c + an
= cn + (cn/10 + 7c + an)
cn quando cn/10 + 7c + an 0
Entao c 10a(n/(n 70)) para n > 70.
Como n 140, temos n/(n 70) < 2 e assim basta escolher c 20a para
satisfazer a desigualdade e a base.
G.P. Telles (ICUNICAMP) Algoritmos I 2 de maio de 2012 27 / 27

Anda mungkin juga menyukai