Bucket SortGabriel C.S.
EDA0001 – TADS – 2013UDESC – Joinville
Definição
Consiste em dividir os elementos do vetor a ser ordenado em baldes, ordenando primeiramente o conteúdo dos baldes, e depois agrupando os elementos.
Melhor caso, Complexidade Linear, O(n).Pior caso, Quadrático,O(n²).
Pseudocódigo
BUCKET SORT(A, n)para i ← 1 até n façainsira A[i] na lista ligada B[⌊n A[i]⌋]para i ← 0 até n − 1 façaordene a lista B[i] com algum algoritmo de
ordenação5 Concatene as listas B[0], B[1], . . . ,B[n − 1]
Exemplo
http://www.cs.usfca.edu/~galles/visualization/BucketSort.html
Vantagens e Desvantagens
Vantagens:Não realiza comparaçõesÉ estável, preserva a ordem de chaves iguaisTempo Linear
Desvantagens:Precisa de mais memória para ordenar o
conjuntoO algoritmo se torna muito caro quando o
vetor chave é muito extenso
Exercícios Sugeridos
Explique com suas palavras o algoritmo Bucket Sort, e demonstre com um exemplo
Insira 10 números em um vetor e faça a ordenação dele utilizando o Bucket Sort e o Bubble Sort como ordenação dos buckets.
Counting SortLucas Casas
EDA0001 – TADS – 2013UDESC – Joinville
Vantagens e Desvantagens
Vantagens:Ordena vetores em tempo linearNão realiza comparaçõesÉ um algoritmo de ordenação estável
Desvantagens:Usa 2 outros vetores na ordenação,
utilizando mais espaço na memória
Funcionamento
Esta forma de ordenação pressupõe que cada elemento dentro do vetor “a” é um inteiro entre 1 e k (k = maior inteiro do vetor).
A ideia é saber para cada elemento x do vetor, quantos elementos são iguais ou inferiores a x.
Funcionamento
Recebe o vetor “a” (que possui os valores desordenados)
Cria vetor cnt[MaiorValor(a)+1] e b[tamanho(a)]Inicializa todas as posições de cnt = 0.Percorre o vetor “a”, para cada posição i de a
faz cnt[a[i]-1]++.Acumula em cada elemento de cnt o elemento
somado ao elemento anterior.Guarda em b os valores de a ordenados de
acordo com b[cnt[a[i]++]=a[i]Copia “b” para “a”.
Pseudocódigo
countingsort(A[], B[], k)for i = 1 to k do C[i] = 0 for j = 1 to length(A) do C[A[j]] = C[A[j]] + 1 for 2 = 1 to k do C[i] = C[i] + C[i-1]
for j = 1 to length(A) do B[C[A[j]]] = A[j] C[A[j]] = C[A[j]] - 1
Simulação
Recebe um vetor de entrada, com os valores desordenados
Então gera um vetor B com o mesmo tamanho de A
E um vetor C com o tamanho igual ao maior elemento + 1
2 5 3 0 2 3 0 3A = 1 2 3 4 5 6 7 8
B = 1 2 3 4 5 6 7 8
0 0 0 0 0 0C = 0 1 2 3 4 5
Simulação
Incrementamos C[i] de acordo com os valores em A[i]
Depois fazemos C[i] = C[i] + C[i-1]2 0 2 3 0 1C = 0 1 2 3 4 5
2 2 4 7 7 8C = 0 1 2 3 4 5
Simulação
Depois fazemos B[C[A[i]]] = A[i], o que vai colocar o valor de A[i] de forma ordenada no vetor B
Em seguida é feito o decremento de C[A[i]]
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
Simulação
Após este ultimo passo o vetor B está ordenado, podemos passar os valores para o vetor A
http://www.cs.usfca.edu/~galles/visualization/CountingSort.html
0 0 2 2 3 3 3 5B =
1 2 3 4 5 6 7 8
Exercícios Sugeridos
Ordene o seguinte conjunto numérico utilizando o Counting Sort:
{2, 3, 5, 3, 3, 3, 5, 6, 6, 6, 5, 5, 2, 2, 2, 7}
Para o vetor [3, 1, 2, 5, 4, 2, 2, 5], qual o valor de k (tamanho do vetor C)?
Radix SortVagner Pagotti
EDA0001 – TADS – 2013UDESC – Joinville
Significado
radix quadratum 9 aequalis 3
base do quadrado 9 é igual a 3
=
Origem
Século XIXHerman Hollerith (1860-1929)Máquina de Tabulação de CartõesNecessidade de ordenar as fichasHarold H. Seward (1930–2012) MIT – 1945 – Projeto Apollo
Classificação
Complexidade Notação SignificadoConstante O(1) Não varia com o número de entradasLinear O(n) Varia linearmenteLogarítmica O(log n) Varia de forma logaritimicaLinearítimica O(n log n) Varia n vezes a variação logaritimicaQuadrática O(n²) Varia de forma quadrada
Radix Sort = O(n)
Definição
Ordenação pela posição (LSB/MSB)Algoritmo não comparativoAlgoritmo de complexidade linear Complexidade de tempo = O(n.k)Complexidade de espaço = O(n+s)
n = número de elementosk = tamanho strings = tamanho do alfabeto
Vantagens e Desvantagens
Vantagens◦Baixa complexidade◦Execução rápida (linear)◦Estabilidade
Desvantagens◦Necessita mais memória◦Depende do tipo de dado◦Depende do valor máximo
Algoritmo LSB - Numérico
Entrada: V = vetor de inteirosCriar matriz de dígitos: D = matriz[10][*]Calcular Passos: P = número de dígitos do
maior de VPara cada passo:
◦Para cada item de V: Calcular dígito do número (entre 0 a 9) Adicionar o número na matriz D[digito]
◦Para cada item na matriz D: Colocar cada item no vetor V
Saida: vetor V ordenado
Exemplo
Passo 10 120
1 01123 123 603 04345 025 3456
7 007
8 018
9 789
Passo 20 603 007
1 011 0182 120 123 0253
4 043 34556
7
8 789
9
025018
123345007
603789043
011
120
120011
123603043
025345007
018
789
Passo 30 007 011 018 025 043
1 120 12323 345456 6037 789
8
9
603007
011018120
123025043
345
789
Saída 7 11 18 25 43 120 123 345 603 789
Entrada 25 18 123 345 7 603 789 43 11 120
LSB
Algoritmo MSB – Lexicográfico
Entrada: V = vetor de strings, P = posição a ser ordenada (inicialmente zero)
Criar matriz de string com uma posição para cada caractere (ASCII): D = matriz[128][*]
Para cada item de V:◦Adicionar a string na matriz de acordo com o caractere
da posição informada: D[caractere]Para cada item na matriz D:
◦Se o vetor do caractere possuí mais de um item, chamar a função recursivamente passando a lista de itens do caractere e a posição informada + 1
◦Colocar cada item no vetor VSaida: vetor V ordenado
Pass
o 1
ExemploSaída DADO DEDO FACA FOCA JAPA JATO LATA MACA MAR PATO
Entrada JATO DADO DEDO PATO LATA MAR FOCA FACA MACA JAPA
MSB
D F J L M P
ADO OCA ATO ATA AR ATO
EDO ACA APA ACA
DA E
DO DOF
A O
CA CA J
A
TO
PA
M
A
R
CA
JA
P T
A OMA
C R
A
Pass
o 2
Pass
o 3
Exercícios Sugeridos
Construir uma função que recebe um vetor de 10 inteiros e ordene os números utilizando o algoritmo de ordenação “Radix LSB”.
Construir uma função que recebe uma lista encadeada simples que contém itens (tipo de informação) de valores inteiros e ordene a lista com o algoritmo de ordernação “Radix LSB”.
Top Related