A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

ORDENAÇÃO EM TEMPO LINEAR

Apresentações semelhantes


Apresentação em tema: "ORDENAÇÃO EM TEMPO LINEAR"— Transcrição da apresentação:

1 ORDENAÇÃO EM TEMPO LINEAR

2 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?

3 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.

4 ORDENAÇÃO POR CONTAGEM
Counting Sort

5 COUNTING SORT Aspectos Positivos: Aspecto Negativo:
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.

6 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.

7 EXEMPLO 5 9 2 7 2 8 9 5 A = 7 B =  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.

8 SIMULAÇÃO - COUNTING SORT
O algoritmo recebe um vetor desordenado como entrada: 2 5 3 A = Em seguida, gera os vetores adicionais B e C: B =  O vetor B é do mesmo tamanho do vetor A (8 elementos). C =  O vetor C é do tamanho do maior elemento de A + 1 (5 + 1 = 6).

9 SIMULAÇÃO - COUNTING SORT
Se o valor de um elemento de entrada é i, incrementamos C[i]: 2 3 1 C = C[i] contém um número de elementos de entrada igual a i para cada i = 0,1,2,...,k. Agora fazemos C[i] = C[i] + C[i-1] para determinarmos quantos elementos de entrada são menores que ou iguais a i: 2 4 7 8 C =

10 SIMULAÇÃO - COUNTING SORT
Agora, partindo do maior para o menor índice, fazemos B[C[A[j]]] = A[j]. Assim, colocamos cada elemento A[j] em sua Posição ordenada no vetor B: Exemplo: Para j = 8 B[C[A[8]]]  B[C[3]]  B[7] B[7] = A[8]  B[7] = 3

11 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óximo elemento de entrada com valor igual a A[j], se existir, vá para a posição imediatamente anterior a A[j] no vetor B. 2 4 7 8 C = C[3] = C[3] – 1: 2 4 6 7 8 C =

12 SIMULAÇÃO - COUNTING SORT
Após as iterações de (comprimento de [A] até 1) temos o vetor de saída B ordenado!!! 2 3 5 B =

13 ALGORITMO COUNTING SORT
01 CountingSort(A, B, k) { 02 for I0 to k 03 do C[i] 0 04 for j1 to comprimento [A] 05 do C[A[j]] C[A[j]] for I2 to k 07 do C[i] = C[i] + C[i-1] 08 for j comprimento [A] downto 1 09 do B[C[A[j]]] = A[j] 10 C[A[j]] = C[A[j]] }

14 COUNTING SORT IN C void coutingSort(int *A, int n, int *B, int *C, int k){ int i; // Passo 1 - Contagem do número de cada elemento do intervalo for(i=0; i<n; i++) C[A[i]-1]++; // Passo 2 - Soma os números da casa atual, com os números da casa anterior for(i=1;i<k;i++) C[i] += C[i-1]; // Passo 3 - Alocação dos valores no vetor ordenado for(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];

15 ORDENAÇÃO RADIXSORT

16 INTRODUÇÃO

17 Radixsort

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32 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, , e um milhão de números inteiros entre 0 e Os números inteiros serão gerados aleatoriamente.


Carregar ppt "ORDENAÇÃO EM TEMPO LINEAR"

Apresentações semelhantes


Anúncios Google