Documente Academic
Documente Profesional
Documente Cultură
CLRS cap 8
Algoritmos p. 1
Algoritmos p. 2
Algoritmos p. 2
Algoritmos p. 2
Algoritmos p. 2
Exemplo
ORDENA-POR-INSERO (A[1 . . 3]):
SIM
A[1] A[2]?
A[2] A[3]?
SIM
NO
A[1] A[3]?
SIM
NO
A[1]A[3]<A[2]
A[2]<A[1]A[3]
NO
A[3]<A[1]A[2]
NO
A[2] A[3]?
SIM
NO
A[2]A[3]A[1] A[3]<A[2]<A[1]
Algoritmos p. 3
Limite inferior
Considere uma rvore de deciso para A[1 . . n].
Algoritmos p. 4
Limite inferior
Considere uma rvore de deciso para A[1 . . n].
Nmero de comparaes, no pior caso?
Algoritmos p. 4
Limite inferior
Considere uma rvore de deciso para A[1 . . n].
Nmero de comparaes, no pior caso?
Resposta: altura, h, da rvore de deciso.
Algoritmos p. 4
Limite inferior
Considere uma rvore de deciso para A[1 . . n].
Nmero de comparaes, no pior caso?
Resposta: altura, h, da rvore de deciso.
Todas as n! permutaes de 1, . . . , n devem ser folhas.
Algoritmos p. 4
Limite inferior
Considere uma rvore de deciso para A[1 . . n].
Nmero de comparaes, no pior caso?
Resposta: altura, h, da rvore de deciso.
Todas as n! permutaes de 1, . . . , n devem ser folhas.
Toda rvore binria de altura h tem no mximo 2h folhas.
Algoritmos p. 4
Limite inferior
Considere uma rvore de deciso para A[1 . . n].
Nmero de comparaes, no pior caso?
Resposta: altura, h, da rvore de deciso.
Todas as n! permutaes de 1, . . . , n devem ser folhas.
Toda rvore binria de altura h tem no mximo 2h folhas.
Prova: Por induo em h. A afirmao vale para h = 0.
Suponha que a afirmao vale para toda rvore binria de
altura menor que h, para h 1.
O nmero de folhas de uma rvore de altura h a soma do
nmero de folhas de suas sub-rvores, que tm altura
h 1. Logo, o nmero de folhas de uma rvore de altura
h no superior a
2 2h1 = 2h .
Algoritmos p. 4
Limite inferior
Assim, devemos ter 2h n! , donde h lg(n!).
(n!)2 =
n1
Y
i=0
(ni)(i+1)
n
Y
n = nn
i=1
Portanto,
1
h lg(n!) n lg n.
2
1
n n
(1 + ( )).
n! = 2 n
e
n
n n
Disso, temos que h lg(n!) lg e
= n(lg n lg e).
Algoritmos p. 5
Concluso
Algoritmos p. 6
Counting Sort
Recebe inteiros n e k , e um vetor A[1 . . n] onde
cada elemento um inteiro entre 1 e k .
Algoritmos p. 7
Counting Sort
Recebe inteiros n e k , e um vetor A[1 . . n] onde
cada elemento um inteiro entre 1 e k .
Devolve um vetor B[1 . . n] com
os elementos de A[1 . . n] em ordem crescente.
Algoritmos p. 7
Counting Sort
Recebe inteiros n e k , e um vetor A[1 . . n] onde
cada elemento um inteiro entre 1 e k .
Devolve um vetor B[1 . . n] com
os elementos de A[1 . . n] em ordem crescente.
COUNTINGSORT(A, n)
1 para i 1 at k faa
2
C[i] 0
3 para j 1 at n faa
4
C[A[j]] C[A[j]] + 1
5 para i 2 at k faa
6
C[i] C[i] + C[i 1]
7 para j n decrescendo at 1 faa
8
B[C[A[j]]] A[j]
9
C[A[j]] C[A[j]] 1
10 devolva B
Algoritmos p. 7
Consumo de tempo
linha consumo na linha
1
2
3
4
5
6
7
8
9
10
(k)
O(k)
(n)
O(n)
(k)
O(k)
(n)
O(n)
O(n)
(1)
total
????
Algoritmos p. 8
Consumo de tempo
linha consumo na linha
1
2
3
4
5
6
7
8
9
10
(k)
O(k)
(n)
O(n)
(k)
O(k)
(n)
O(n)
O(n)
(1)
total
(k + n)
Algoritmos p. 8
Counting Sort
COUNTINGSORT(A, n)
1 para i 1 at k faa
2
C[i] 0
3 para j 1 at n faa
4
C[A[j]] C[A[j]] + 1
5 para i 2 at k faa
6
C[i] C[i] + C[i 1]
7 para j n decrescendo at 1 faa
8
B[C[A[j]]] A[j]
9
C[A[j]] C[A[j]] 1
10 devolva B
Consumo de tempo: (k + n)
Se k = O(n), o consumo de tempo (n).
Algoritmos p. 9
Radix Sort
Algoritmo usado para ordenar
inteiros no-negativos com d dgitos
cartes perfurados
registros cuja chave tem vrios campos
Algoritmos p. 10
Radix Sort
Algoritmo usado para ordenar
inteiros no-negativos com d dgitos
cartes perfurados
registros cuja chave tem vrios campos
dgito 1: menos significativo
dgito d: mais significativo
Algoritmos p. 10
Radix Sort
Algoritmo usado para ordenar
inteiros no-negativos com d dgitos
cartes perfurados
registros cuja chave tem vrios campos
dgito 1: menos significativo
dgito d: mais significativo
RADIXSORT(A, n, d)
1 para i 1 at d faa
2
ORDENE(A, n, i)
Algoritmos p. 10
Radix Sort
Algoritmo usado para ordenar
inteiros no-negativos com d dgitos
cartes perfurados
registros cuja chave tem vrios campos
dgito 1: menos significativo
dgito d: mais significativo
RADIXSORT(A, n, d)
1 para i 1 at d faa
2
ORDENE(A, n, i)
ORDENE(A, n, i): ordena A[1 . . n] pelo i-simo dgito dos
nmeros em A por meio de um algoritmo estvel.
Algoritmos p. 10
Estabilidade
Um algoritmo de ordenao estvel se sempre que,
inicialmente, A[i] = A[j] para i < j , a cpia A[i] termina em
uma posio menor do vetor que a cpia A[j].
Algoritmos p. 11
Estabilidade
Um algoritmo de ordenao estvel se sempre que,
inicialmente, A[i] = A[j] para i < j , a cpia A[i] termina em
uma posio menor do vetor que a cpia A[j].
Isso s relevante quando temos informao satlite.
Algoritmos p. 11
Estabilidade
Um algoritmo de ordenao estvel se sempre que,
inicialmente, A[i] = A[j] para i < j , a cpia A[i] termina em
uma posio menor do vetor que a cpia A[j].
Isso s relevante quando temos informao satlite.
Quais dos algoritmos que vimos so estveis?
Algoritmos p. 11
Estabilidade
Um algoritmo de ordenao estvel se sempre que,
inicialmente, A[i] = A[j] para i < j , a cpia A[i] termina em
uma posio menor do vetor que a cpia A[j].
Isso s relevante quando temos informao satlite.
Quais dos algoritmos que vimos so estveis?
insero direta? seleo direta? bubblesort?
mergesort?
quicksort?
heapsort?
countingsort?
Algoritmos p. 11
Algoritmos p. 12
Algoritmos p. 12
Algoritmos p. 12
Algoritmos p. 12
Bucket Sort
Recebe um inteiro n e um vetor A[1 . . n] onde
cada elemento um nmero no intervalo [0, 1).
Algoritmos p. 13
Bucket Sort
Recebe um inteiro n e um vetor A[1 . . n] onde
cada elemento um nmero no intervalo [0, 1).
Devolve um vetor C[1 . . n] com
os elementos de A[1 . . n] em ordem crescente.
Algoritmos p. 13
Bucket Sort
Recebe um inteiro n e um vetor A[1 . . n] onde
cada elemento um nmero no intervalo [0, 1).
Devolve um vetor C[1 . . n] com
os elementos de A[1 . . n] em ordem crescente.
BUCKETSORT(A, n)
1 para i 0 at n 1 faa
2
B[i] NIL
3 para i 1 at n faa
4
INSIRA(B[n A[i]], A[i])
5 para i 0 at n 1 faa
ORDENELISTA(B[i])
6
7 C CONCATENE(B, n)
8 devolva C
Algoritmos p. 13
Bucket Sort
BUCKETSORT(A, n)
1 para i 0 at n 1 faa
2
B[i] NIL
3 para i 1 at n faa
4
INSIRA(B[n A[i]], A[i])
5 para i 0 at n 1 faa
ORDENELISTA(B[i])
6
7 C CONCATENE(B, n)
8 devolva C
Algoritmos p. 14
Bucket Sort
BUCKETSORT(A, n)
1 para i 0 at n 1 faa
2
B[i] NIL
3 para i 1 at n faa
4
INSIRA(B[n A[i]], A[i])
5 para i 0 at n 1 faa
ORDENELISTA(B[i])
6
7 C CONCATENE(B, n)
8 devolva C
INSIRA(p, x): insere x na lista apontada por p
ORDENELISTA(p): ordena a lista apontada por p
CONCATENE(B, n): devolve a lista obtida da concatenao
das listas apontadas por B[0], . . . , B[n 1].
Algoritmos p. 14
Bucket Sort
BUCKETSORT(A, n)
1 para i 0 at n 1 faa
2
B[i] NIL
3 para i 1 at n faa
4
INSIRA(B[n A[i]], A[i])
5 para i 0 at n 1 faa
ORDENELISTA(B[i])
6
7 C CONCATENE(B, n)
8 devolva C
Se os nmeros em A[1 . . n] forem
uniformemente distribudos no intervalo [0, 1),
ento o consumo de tempo esperado linear em n.
Algoritmos p. 14
Bucket Sort
Se os nmeros em A[1 . . n] forem
uniformemente distribudos no intervalo [0, 1),
ento o nmero esperado de elementos de A[1 . . n]
em cada lista B[i] (1).
Algoritmos p. 15
Bucket Sort
Se os nmeros em A[1 . . n] forem
uniformemente distribudos no intervalo [0, 1),
ento o nmero esperado de elementos de A[1 . . n]
em cada lista B[i] (1).
Logo, o consumo de tempo esperado para
ordenar cada uma das listas B[i] (1).
Assim, o consumo de tempo esperado do algoritmo
BUCKETSORT neste caso (n).
Algoritmos p. 15
Bucket Sort
Se os nmeros em A[1 . . n] forem
uniformemente distribudos no intervalo [0, 1),
ento o nmero esperado de elementos de A[1 . . n]
em cada lista B[i] (1).
Logo, o consumo de tempo esperado para
ordenar cada uma das listas B[i] (1).
Assim, o consumo de tempo esperado do algoritmo
BUCKETSORT neste caso (n).
Algoritmos p. 15
Exerccios
Exerccio 10.A
Desenhe a rvore de deciso para o SELECTIONSORT aplicado a A[1 . . 3] com todos os
elementos distintos.
Exerccio 10.B [CLRS 8.1-1]
Qual o menor profundidade (= menor nvel) que uma folha pode ter em uma rvore de
deciso que descreve um algoritmo de ordenao baseado em comparaes?
Exerccio 10.C [CLRS 8.1-2]
Mostre que lg(n!) = (n lg n) sem usar a frmula de Stirling. Sugesto: Calcule
Pn
k=n/2 lg k. Use as tcnicas de CLRS A.2.
Algoritmos p. 16
Exerccios
Exerccio 10.D [CLRS 8.2-1]
Simule a execuo do COUNTINGSORT usando como entrada o vetor
A[1 . . 11] = h7, 1, 3, 1, 2, 4, 5, 7, 2, 4, 3i.
Exerccio 10.E [CLRS 8.2-2]
Mostre que o COUNTINGSORT estvel.
Exerccio 10.F [CLRS 8.2-3]
Suponha que o para da linha 7 do COUNTINGSORT substitudo por
7
para j 1 at n faa
Algoritmos p. 17
Dicas de implementao
Mergesort
Algoritmos p. 18
Dicas de implementao
Mergesort
Onde declarar o vetor auxiliar?
Algoritmos p. 18
Dicas de implementao
Mergesort
Onde declarar o vetor auxiliar?
Alternncia entre dois vetores
Algoritmos p. 18
Dicas de implementao
Mergesort
Onde declarar o vetor auxiliar?
Alternncia entre dois vetores
Teste se j ordenado
Algoritmos p. 18
Dicas de implementao
Mergesort
Onde declarar o vetor auxiliar?
Alternncia entre dois vetores
Teste se j ordenado
Insero direta para vetores pequenos
Algoritmos p. 18
Dicas de implementao
Mergesort
Onde declarar o vetor auxiliar?
Alternncia entre dois vetores
Teste se j ordenado
Insero direta para vetores pequenos
Quicksort
Algoritmos p. 18
Dicas de implementao
Mergesort
Onde declarar o vetor auxiliar?
Alternncia entre dois vetores
Teste se j ordenado
Insero direta para vetores pequenos
Quicksort
Elementos repetidos: partio ternria
Algoritmos p. 18
Dicas de implementao
Mergesort
Onde declarar o vetor auxiliar?
Alternncia entre dois vetores
Teste se j ordenado
Insero direta para vetores pequenos
Quicksort
Elementos repetidos: partio ternria
Mediana de trs
Algoritmos p. 18
Dicas de implementao
Mergesort
Onde declarar o vetor auxiliar?
Alternncia entre dois vetores
Teste se j ordenado
Insero direta para vetores pequenos
Quicksort
Elementos repetidos: partio ternria
Mediana de trs
Recurso de cauda
Algoritmos p. 18
Dicas de implementao
Mergesort
Onde declarar o vetor auxiliar?
Alternncia entre dois vetores
Teste se j ordenado
Insero direta para vetores pequenos
Quicksort
Elementos repetidos: partio ternria
Mediana de trs
Recurso de cauda
Insero direta para vetores pequenos
Algoritmos p. 18