algoritmos de ordenaÇÃo nÃo comparativos
TRANSCRIPT
![Page 1: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/1.jpg)
ALGORITMOS DE ORDENAÇÃO
NÃO COMPARATIVOS
UNIVERSIDADE DE SÃO PAULO INTRODUÇÃO A CIÊNCIA DA COMPUTAÇÃO II
Ricardo Cerri ICMC - USP
17/11/2011
![Page 2: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/2.jpg)
Algoritmos não Comparativos
Counting Sort
Pigeonhole Sort
Bucket Sort
Radix Sort
![Page 3: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/3.jpg)
Counting Sort
Ordena n elementos de acordo com k chaves
Para cada chave ki, conta o número K de elementos que têm aquela chave
Armazena o valor K na posição ki um vetor de k posições
Percorre o vetor colocando os elementos em ordem no vetor original
![Page 4: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/4.jpg)
Counting Sort
Exemplo: ordenar vetor v = [-2 -4 2 0 5 5 1]
7 elementos
[5 - (-4)] + 1 = 10 possíveis chaves
Cria vetor de 10 posições e armazena número de
vezes que cada elemento aparece
contagem[v[i] - min]++
1 0 1 0 1 1 1 0 0 2
0 1 2 3 4 5 6 7 8 9
-4 -3 -2 -1 0 1 2 3 4 5
![Page 5: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/5.jpg)
Counting Sort
Percorre vetor com a contagem dos elementos,
ordenando os elementos do vetor original de
acordo com suas chaves
v = [-2 -4 2 0 5 5 1]
v[j] = min + i
1 0 1 0 1 1 1 0 0 2
0 1 2 3 4 5 6 7 8 9
-4 -3 -2 -1 0 1 2 3 4 5
-4 -2 0 1 2 5 5
![Page 6: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/6.jpg)
Counting Sort
![Page 7: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/7.jpg)
Counting Sort
Complexidade de tempo
O(n + k)
Complexidade de espaço
O(n + k)
Adequado quando o número de chaves não é muito maior do que o número de elementos
É um algoritmo de ordenação estável
![Page 8: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/8.jpg)
Pigeonhole Sort
Mesma ideia do Counting Sort, mas ao invés de
armazenar a contagem de elementos, armazena os
elementos
Utiliza o Pigeonhole Principle
Se n elementos devem ser
colocados em k buracos de
pombas, com n > k, então
pelo menos um buraco conterá
mais de um elemento.
![Page 9: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/9.jpg)
Pigeonhole Sort
Percorre vetor original colocando os elementos em
buracos de pombas
v = [-2 -4 2 0 5 5 1]
pigeonhole[v[i]-min][j] = v[i]
-4 -2 0 1 2 5
0 1 2 3 4 5 6 7 8 9
-4 -3 -2 -1 0 1 2 3 4 5
5
![Page 10: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/10.jpg)
Pigeonhole Sort
Percorre o vetor auxiliar colocando os elementos de
volta no vetor original ordenados
v[k] = pigeonhole[i][j]
-4 -2 0 1 2 5
0 1 2 3 4 5 6 7 8 9
-4 -3 -2 -1 0 1 2 3 4 5
5
-4 -2 0 1 2 5 5
![Page 11: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/11.jpg)
Pigeonhole Sort
![Page 12: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/12.jpg)
Pigeonhole Sort
![Page 13: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/13.jpg)
Pigeonhole Sort
Complexidade de tempo
O(n + k)
Complexidade de espaço
O(n x k)
Adequado quando o número de chaves e o número de elementos é aproximadamente o mesmo
É um algoritmo de ordenação estável
![Page 14: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/14.jpg)
Bucket Sort
Divide o vetor de entrada em buckets (baldes), sendo que cada balde conterá uma quantidade de elementos
Cada balde é ordenado individualmente utilizando outro algoritmo de ordenação (Inserção, Seleção) ou aplicando Bucket Sort recursivamente
Percorre os baldes em ordem e coloca os elementos de volta no vetor original
![Page 15: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/15.jpg)
Bucket Sort
v = [-2 -4 2 0 5 5 1]
-2
-4
2
0
1
5
5
-5 <= x < 0 0 <= x < 5 5 <= x < 10
-4 -2 0 1 2 5 5
![Page 16: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/16.jpg)
Bucket Sort
![Page 17: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/17.jpg)
Bucket Sort
![Page 18: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/18.jpg)
Bucket Sort
Complexidade de tempo
O(n²)
Complexidade de espaço
O(n)
Bom quando o número de chaves é pequeno e há em média poucos elementos por balde
Sua estabilidade depende do algoritmo de ordenação utilizado para ordenar os baldes
![Page 19: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/19.jpg)
Radix Sort
Ordena o vetor de entrada agrupando as chaves
de acordo com as posições e valores dos dígitos
que as compõem.
As chaves podem ser agrupadas do dígito menos
significativo para o mais significativo, ou o contrário
8 0 2
MSB LSB
![Page 20: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/20.jpg)
Radix Sort
v = [170 45 75 90 802 24 2 66]
0
1
2
3
4
5
6
7
8
9
Primeira
Passada
170 090
802 002
024
045 075
066
170
090
802
002
024
045
075
066
![Page 21: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/21.jpg)
Radix Sort
v = [170 90 802 2 24 45 75 66]
0
1
2
3
4
5
6
7
8
9
Segunda
Passada
802 002
024
045
066
802
002
024
045
066
170
075
090
170
090
075
![Page 22: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/22.jpg)
Radix Sort
v = [802 2 24 45 66 170 75 90]
0
1
2
3
4
5
6
7
8
9
Terceira
Passada
002 024 002
024
045
066
075
090
170
802
170
066 045 075 090
802
![Page 23: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/23.jpg)
Radix Sort
v = [170 45 75 90 802 24 2 66]
0
1
2
3
4
5
6
7
8
9
Terceira
Passada
002 024 002
024
045
066
075
090
170
802
170
066 045 075 090
802
Vetor final
ordenado
![Page 24: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/24.jpg)
Radix Sort
![Page 25: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/25.jpg)
Radix Sort
![Page 26: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/26.jpg)
Radix Sort
Complexidade de tempo
O(n x m) : m é a quantidade média de dígitos
Complexidade de espaço
O(n x m)
É um algoritmo de ordenação estável
![Page 27: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS](https://reader030.vdocuments.site/reader030/viewer/2022012414/616e64241781842eb1692db9/html5/thumbnails/27.jpg)
Obrigado