52
Análise de Algoritmos Zé Augusto Adaptado de slides de José Coelho e Paulo Feofiloff Abril de 2008

Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Embed Size (px)

Citation preview

Page 1: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Análise de Algoritmos

Zé Augusto

Adaptado de slides de José Coelho ePaulo Feofiloff

Abril de 2008

Page 2: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação em tempo linear

CLRS 8.2–8.3

Page 3: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagemRecebe vetores A[1 . . n] e B[1 . . n] e devolve no vetor B[1 . . n] oselementos de A[1 . . n] em ordem crescente.

Cada A[i] está em 0, . . . , k.

Entra: 1 2 3 4 5 6 7 8 9 10A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

Sai: 1 2 3 4 5 6 7 8 9 10B 0 0 0 2 2 3 3 3 5 5

Page 4: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagemRecebe vetores A[1 . . n] e B[1 . . n] e devolve no vetor B[1 . . n] oselementos de A[1 . . n] em ordem crescente.

Cada A[i] está em 0, . . . , k.

Entra: 1 2 3 4 5 6 7 8 9 10A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

Sai: 1 2 3 4 5 6 7 8 9 10B 0 0 0 2 2 3 3 3 5 5

Page 5: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

1 2 3 4 5 6 7 8 9 10A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

Page 6: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

1 2 3 4 5 6 7 8 9 10A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C

Page 7: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

1 2 3 4 5 6 7 8 9 10A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 0 0 0 0 0 0

Page 8: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 0 0 1 0 0 0

Page 9: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 0 0 1 0 0 1

Page 10: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 0 0 1 1 0 1

Page 11: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 1 0 1 1 0 1

Page 12: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 1 0 2 1 0 1

Page 13: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 1 0 2 2 0 1

Page 14: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 2 0 2 2 0 1

Page 15: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 2 0 2 2 0 2

Page 16: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 2 0 2 3 0 2

Page 17: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 3 0 2 3 0 2

Page 18: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

1 10A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 3 0 2 3 0 2

Page 19: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

1 10A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 3 3 2 3 0 2

Page 20: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

1 10A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 3 3 5 3 0 2

Page 21: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

1 10A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 3 3 5 8 0 2

Page 22: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

1 10A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 3 3 5 8 8 2

Page 23: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

1 10A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 3 3 5 8 8 10

Page 24: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B

0 1 2 3 4 5C 3 3 5 8 8 10

Page 25: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B 0

0 1 2 3 4 5C 2 3 5 8 8 10

Page 26: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B 0 3

0 1 2 3 4 5C 2 3 5 7 8 10

Page 27: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B 0 3 5

0 1 2 3 4 5C 2 3 5 7 8 9

Page 28: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B 0 0 3 5

0 1 2 3 4 5C 1 3 5 7 8 9

Page 29: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B 0 0 3 3 5

0 1 2 3 4 5C 1 3 5 6 8 9

Page 30: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B 0 0 2 3 3 5

0 1 2 3 4 5C 1 3 4 6 8 9

Page 31: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B 0 0 0 2 3 3 5

0 1 2 3 4 5C 0 3 4 6 8 9

Page 32: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B 0 0 0 2 3 3 3 5

0 1 2 3 4 5C 0 3 4 5 8 9

Page 33: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B 0 0 0 2 3 3 3 5 5

0 1 2 3 4 5C 0 3 4 5 8 8

Page 34: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

Cada A[i] está em 0, . . . , 5.

jA 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B 0 0 0 2 2 3 3 3 5 5

0 1 2 3 4 5C 0 3 3 5 8 8

Page 35: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação por contagem

COUNTING-SORT (A, B, n, k)1 para i← 0 até k faça2 C[i]← 0

3 para j← 1 até n faça4 C[A[j]]← C[A[j]] + 1

B C[i] é o número de js tais que A[j] = i

5 para i← 1 até k faça6 C[i]← C[i] + C[i− 1]

B C[i] é o número de js tais que A[j] ≤ i

7 para j← n decrescendo até 1 faça8 B[C[A[j]]]← A[j]9 C[A[j]]← C[A[j]]− 1

Obs: são feitas 0 comparações entre elementos do vetor.

Page 36: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Consumo de tempo

linha consumo na linha

1−2 Θ(k)3−4 Θ(n)5−6 Θ(k)7−9 Θ(n)

Consumo total: Θ(n + k)

Page 37: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Conclusões

O consumo de tempo do COUNTING-SORT é Θ(n + k).

I se k ≤ n então consumo é Θ(n)I se k ≤ 10n então consumo é Θ(n)I se k = O(n) então consumo é Θ(n)I se k ≥ n2 então consumo é Θ(k)I se k = Ω(n) então consumo é Θ(k)

Page 38: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Estabilidade

A propósito: COUNTING-SORT é estável:

na saída, chaves com mesmo valor estão na mesmaordem que apareciam na entrada.

A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10B 0 0 0 2 2 3 3 3 5 5

Page 39: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação digital (=radix sort)

Exemplo:

329457657839436720355

720355436457657329839

720329436839355457657

329355436457657720839

Cada A[j] têm d dígitos decimais:A[j] = ad 10d−1 + · · ·+ a2 101 + a1 100

Exemplo com d = 3: 3 · 102 + 2 · 10 + 9

Page 40: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação digital (=radix sort)

Exemplo:

329457657839436720355

720355436457657329839

720329436839355457657

329355436457657720839

Cada A[j] têm d dígitos decimais:A[j] = ad 10d−1 + · · ·+ a2 101 + a1 100

Exemplo com d = 3: 3 · 102 + 2 · 10 + 9

Page 41: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação digital (=radix sort)

Exemplo:

329457657839436720355

720355436457657329839

720329436839355457657

329355436457657720839

Cada A[j] têm d dígitos decimais:A[j] = ad 10d−1 + · · ·+ a2 101 + a1 100

Exemplo com d = 3: 3 · 102 + 2 · 10 + 9

Page 42: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação digital (=radix sort)

Exemplo:

329457657839436720355

720355436457657329839

720329436839355457657

329355436457657720839

Cada A[j] têm d dígitos decimais:A[j] = ad 10d−1 + · · ·+ a2 101 + a1 100

Exemplo com d = 3: 3 · 102 + 2 · 10 + 9

Page 43: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação digital (=radix sort)

Exemplo:

329457657839436720355

720355436457657329839

720329436839355457657

329355436457657720839

Cada A[j] têm d dígitos decimais:A[j] = ad 10d−1 + · · ·+ a2 101 + a1 100

Exemplo com d = 3: 3 · 102 + 2 · 10 + 9

Page 44: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Ordenação digital

RADIX-SORT (A, n, d)1 para i← 1 até d faça2 B 1 até d e não o contrário!3 ordene A[1 . . n] pelo dígito i

Linha 3:I faz ordenação A[j1 . . jn] de A[1 . . n] tal que

A[j1]i ≤ · · · ≤ A[jn]i;

I ordenação deve ser estável; eI use COUNTING-SORT.

Page 45: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Exemplos

I dígitos decimais: Θ(dn)I dígitos em 0 . . k: Θ(d (n + k)).

Exemplo com d = 5 e k = 127:

a51284 + a41283 + a31282 + a2128 + a1

sendo 0 ≤ ai ≤ 127

Page 46: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Conclusão

Dados n números com b bits e um inteiro r ≤ b,RADIX-SORT ordena esses números em tempo

Θ(b

r(n + 2r)

).

Prova: Considere cada chave com d = db/re dígitos com r bitscada.

Use COUNTING-SORT com k = 2r − 1.Cada passada do COUNTING-SORT: Θ(n + k) = Θ(n + 2r).Tempo total:

Θ(d(n + 2r)) = Θ(b

r(n + 2r)

).

Page 47: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Conclusão

Dados n números com b bits e um inteiro r ≤ b,RADIX-SORT ordena esses números em tempo

Θ(b

r(n + 2r)

).

Prova: Considere cada chave com d = db/re dígitos com r bitscada.Use COUNTING-SORT com k = 2r − 1.

Cada passada do COUNTING-SORT: Θ(n + k) = Θ(n + 2r).Tempo total:

Θ(d(n + 2r)) = Θ(b

r(n + 2r)

).

Page 48: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Conclusão

Dados n números com b bits e um inteiro r ≤ b,RADIX-SORT ordena esses números em tempo

Θ(b

r(n + 2r)

).

Prova: Considere cada chave com d = db/re dígitos com r bitscada.Use COUNTING-SORT com k = 2r − 1.Cada passada do COUNTING-SORT: Θ(n + k) = Θ(n + 2r).

Tempo total:

Θ(d(n + 2r)) = Θ(b

r(n + 2r)

).

Page 49: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Conclusão

Dados n números com b bits e um inteiro r ≤ b,RADIX-SORT ordena esses números em tempo

Θ(b

r(n + 2r)

).

Prova: Considere cada chave com d = db/re dígitos com r bitscada.Use COUNTING-SORT com k = 2r − 1.Cada passada do COUNTING-SORT: Θ(n + k) = Θ(n + 2r).Tempo total:

Θ(d(n + 2r)) = Θ(b

r(n + 2r)

).

Page 50: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Bucket sort

Bucket sort: algoritmo de ordenação em tempo esperadolinear.

Descrito em CRLS 8.4.

Page 51: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Exercícios

Exercício 1.AO seguinte algoritmo promete rearranjar o vetor A[1 . . n] emordem crescente supondo que cada A[i] está em 0, . . . , k. Oalgoritmo está correto?

C-SORT (A, n, k)para i← 0 até k faça

C[i]← 0para j← 1 até n faça

C[A[j]]← C[A[j]] + 1j← 1para i← 0 até k faça

enquanto C[i] > 0 façaA[j]← ij← j + 1C[i]← C[i]− 1

Qual o consumo de tempo do algoritmo?

Page 52: Análise de Algoritmos - Instituto de Matemática e …jose/radix.pdfOrdenação digital (=radix sort) Exemplo: 329 457 657 839 436 720 355 720 355 436 457 657 329 839 720 329 436

Mais exercíciosExercício 1.BO seguinte algoritmo promete rearranjar o vetor A[1 . . n] em ordemcrescente supondo que cada A[j] está em 1, . . . , k. O algoritmoestá correto? Estime, em notação O, o consumo de tempo doalgoritmo.

VITO-SORT (A, n, k)1 i← 12 para a← 1 até k − 1 faça3 para j← i até n faça4 se A[j] = a5 então A[j]↔ A[i] B troca6 i← i + 1

Exercício 1.CSuponha que os components do vetor A[1 . . n] estão todos em 0, 1.Prove que n− 1 comparações são suficientes para rearranjar o vetorem ordem crescente.

Exercício 1.DQual a principal invariante do algoritmo RADIX-SORT?