32
ORDENAÇÃO EM TEMPO LINEAR

ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

Embed Size (px)

Citation preview

Page 1: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

ORDENAÇÃO EM TEMPO LINEAR

Page 2: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

Ordenação em Tempo Linear• Algoritmos de ordenação por comparação:

• InsertSort;• Quicksort;• MergeSort;• Heapsort...

• Possuem limite assintótico inferior: O(n lg n);

• Podem existir algoritmos melhores?

Page 3: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

Ordenação em Tempo Linear• A resposta é SIM, desde que:

• A entrada possua características especiais;• Algumas restrições sejam respeitadas;• O algoritmo não seja puramente baseado em

comparações;• A implementação seja feita da maneira adequada.

• Tempo linear: Θ(n);• Algoritmos:

• Ordenação por contagem (Counting sort);• Radix sort;• Bucket sort.

Page 4: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

ORDENAÇÃO POR CONTAGEM

Counting Sort

Page 5: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

COUNTING SORT• Aspectos Positivos:

• Ordena vetores em tempo linear para o tamanho do vetor inicial;

• Não realiza comparações;• É um algoritmo de ordenação estável;

• Aspecto Negativo:• Necessita de dois vetores adicionais para sua

execução, utilizando, assim, mais espaço na memória.

Page 6: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

COUNTING SORT• Funcionamento:

• A ordenação por contagem pressupõe que cada um dos n elementos do vetor de entrada é um inteiro entre 1 e k (k representa o maior inteiro presente no vetor).

• A ideia básica é determinar, para cada elemento de entrada x, o numero de elementos menores ou iguais a x. Com essa informação é possível determinar exatamente onde o elemento x será inserido.

Page 7: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

EXEMPLO

Na lista A acima o elemento circulado 7 possui 5 elementos menores que ele. Dessa forma o elemento 7 deverá ser inserido no índice 6 (5 + 1) do vetor de saída B.

5 9 2 0 7 2 8 9 5A =

7B =

1 2 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9

Page 8: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

SIMULAÇÃO - COUNTING SORT

O algoritmo recebe um vetor desordenado como entrada:

Em seguida, gera os vetores adicionais B e C:

O vetor B é do mesmo tamanho do vetor A (8 elementos).

O vetor C é do tamanho do maior elemento de A + 1 (5 + 1 = 6).

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

B = 1 2 3 4 5 6 7 8

2 5 3 0 2 3 0 3A = 1 2 3 4 5 6 7 8

Page 9: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

SIMULAÇÃO - COUNTING SORT

Se o valor de um elemento de entrada é i, incrementamos C[i]:

C[i] contém um número de elementos de entrada igual a i paracada i = 0,1,2,...,k.

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

Agora fazemos C[i] = C[i] + C[i-1] para determinarmos quantoselementos de entrada são menores que ou iguais a i:

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

Page 10: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

SIMULAÇÃO - COUNTING SORT

Agora, partindo do maior para o menor índice, fazemosB[C[A[j]]] = A[j]. Assim, colocamos cada elemento A[j] em suaPosição ordenada no vetor B:

Para j = 8B[C[A[8]]] B[C[3]] B[7]B[7] = A[8] B[7] = 3

Exemplo:

Page 11: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

SIMULAÇÃO - COUNTING SORT

Em seguida decrementamos o valor de C[A[j]] toda vez que Inserimos um valor no vetor B. isso faz com que o próximoelemento de entrada com valor igual a A[j], se existir, vá paraa posição imediatamente anterior a A[j] no vetor B.

C[3] = C[3] – 1:

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

2 2 4 6 7 8C = 0 1 2 3 4 5

Page 12: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

SIMULAÇÃO - COUNTING SORT

Após as iterações de (comprimento de [A] até 1) temos o vetor desaída B ordenado!!!

0 0 2 2 3 3 3 5B = 1 2 3 4 5 6 7 8

Page 13: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

ALGORITMO COUNTING SORT

01 CountingSort(A, B, k) {02 for I0 to k03 do C[i] 004 for j1 to comprimento [A]05 do C[A[j]] C[A[j]] + 106 for I2 to k07 do C[i] = C[i] + C[i-1]08 for j comprimento [A] downto 109 do B[C[A[j]]] = A[j]10 C[A[j]] = C[A[j]] - 111 }

Page 14: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

COUNTING SORT IN Cvoid coutingSort(int *A, int n, int *B, int *C, int k){

int i; // Passo 1 - Contagem do número de cada elemento do intervalofor(i=0; i<n; i++) C[A[i]-1]++; // Passo 2 - Soma os números da casa atual, com os números da casa anteriorfor(i=1;i<k;i++) C[i] += C[i-1]; // Passo 3 - Alocação dos valores no vetor ordenadofor(i=n-1;i>=0;i--) { B[C[A[i]-1]-1] = A[i]; C[A[i]-1]--; } //Passo 4 - Passar o conteúdo do vetor final para o vetor original.for(i=0;i<n;i++) A[i] = B[i];

}

Page 15: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

ORDENAÇÃO RADIXSORT

Page 16: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

INTRODUÇÃO

Page 17: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

Radixsort

Page 18: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite
Page 19: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite
Page 20: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite
Page 21: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite
Page 22: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite
Page 23: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite
Page 24: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite
Page 25: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite
Page 26: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite
Page 27: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite
Page 28: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite
Page 29: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite
Page 30: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite
Page 31: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite
Page 32: ORDENAÇÃO EM TEMPO LINEAR. Ordenação em Tempo Linear Algoritmos de ordenação por comparação: InsertSort; Quicksort; MergeSort; Heapsort... Possuem limite

Exercícios• Implementar os algoritmos RadixSort e CountSort

realizando experimentos que avaliem a quantidade de operações (comparações) e o tempo de execução para:

• vetores com 1.000, 10.000, 100.000 e um milhão de números inteiros entre 0 e 99.999. Os números inteiros serão gerados aleatoriamente.