ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS

27
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

Transcript of ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS

Page 1: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS

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

Algoritmos não Comparativos

Counting Sort

Pigeonhole Sort

Bucket Sort

Radix Sort

Page 3: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS

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

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

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

Counting Sort

Page 7: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS

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

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

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

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

Pigeonhole Sort

Page 12: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS

Pigeonhole Sort

Page 13: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS

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

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

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

Bucket Sort

Page 17: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS

Bucket Sort

Page 18: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS

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

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

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

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

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

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

Radix Sort

Page 25: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS

Radix Sort

Page 26: ALGORITMOS DE ORDENAÇÃO NÃO COMPARATIVOS

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

Obrigado