bucket sort gabriel c.s. eda0001 – tads – 2013 udesc – joinville

27
Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

Upload: jonathan-das-neves-cortes

Post on 07-Apr-2016

227 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

Bucket SortGabriel C.S.

EDA0001 – TADS – 2013UDESC – Joinville

Page 2: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – 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²).

Page 3: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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]

Page 5: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 6: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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.

Page 7: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

Counting SortLucas Casas

EDA0001 – TADS – 2013UDESC – Joinville

Page 8: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – 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

Page 9: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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.

Page 10: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 11: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 12: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 13: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 14: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 15: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 16: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 17: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

Radix SortVagner Pagotti

EDA0001 – TADS – 2013UDESC – Joinville

Page 18: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

Significado

radix quadratum 9 aequalis 3

base do quadrado 9 é igual a 3

=

Page 19: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 20: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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)

Page 21: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 22: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 23: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 24: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 25: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 26: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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

Page 27: Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville

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