Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville Bucket Sort Gabriel C.S. EDA0001 – TADS – 2013 UDESC – Joinville
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²). Definição
Pseudocódigo BUCKET SORT(A, n) para i ← 1 até n faça insira A[i] na lista ligada B[⌊n A[i]⌋] para i ← 0 até n − 1 faça ordene a lista B[i] com algum algoritmo de ordenação 5 Concatene as listas B[0], B[1], . . . ,B[n − 1] Pseudocódigo
http://www.cs.usfca.edu/~galles/visualiza tion/BucketSort.html Exemplo
Vantagens e Desvantagens Não realiza comparações É estável, preserva a ordem de chaves iguais Tempo Linear Desvantagens: Precisa de mais memória para ordenar o conjunto O algoritmo se torna muito caro quando o vetor chave é muito extenso Vantagens e Desvantagens
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. Exercícios Sugeridos
Lucas Casas EDA0001 – TADS – 2013 UDESC – Joinville Counting Sort Lucas Casas EDA0001 – TADS – 2013 UDESC – Joinville
Vantagens e Desvantagens Ordena vetores em tempo linear Nã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 Vantagens e Desvantagens
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
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”. Funcionamento
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] B[C[A[j]]] = A[j] C[A[j]] = C[A[j]] - 1 Pseudocódigo
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 A = 1 2 3 4 5 6 7 8 B = 1 2 3 4 5 6 7 8 C = 0 1 2 3 4 5 Simulação
Simulação Incrementamos C[i] de acordo com os valores em A[i] Depois fazemos C[i] = C[i] + C[i-1] 2 3 1 C = 0 1 2 3 4 5 2 4 7 8 C = 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]] 2 4 7 8 C = 0 1 2 3 4 5 C[3] = C[3] – 1: 2 4 6 7 8 C = 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 2 3 5 B = 1 2 3 4 5 6 7 8 Simulação
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)? Exercícios Sugeridos
Vagner Pagotti EDA0001 – TADS – 2013 UDESC – Joinville Radix Sort Vagner Pagotti EDA0001 – TADS – 2013 UDESC – Joinville
= radix quadratum 9 aequalis 3 base do quadrado 9 é igual a 3 Significado
Origem Século XIX Herman Hollerith (1860-1929) Máquina de Tabulação de Cartões Necessidade de ordenar as fichas Harold H. Seward (1930–2012) MIT – 1945 – Projeto Apollo Origem
Radix Sort = O(n) Classificação Complexidade Notação Significado Constante O(1) Não varia com o número de entradas Linear O(n) Varia linearmente Logarítmica O(log n) Varia de forma logaritimica Linearítimica O(n log n) Varia n vezes a variação logaritimica Quadrática O(n²) Varia de forma quadrada Radix Sort = O(n) Classificação
Definição Ordenação pela posição (LSB/MSB) Algoritmo não comparativo Algoritmo de complexidade linear Complexidade de tempo = O(n.k) Complexidade de espaço = O(n+s) n = número de elementos k = tamanho string s = tamanho do alfabeto Definição
Vantagens e Desvantagens Baixa complexidade Execução rápida (linear) Estabilidade Desvantagens Necessita mais memória Depende do tipo de dado Depende do valor máximo Vantagens e Desvantagens
Algoritmo LSB - Numérico Entrada: V = vetor de inteiros Criar matriz de dígitos: D = matriz[10][*] Calcular Passos: P = número de dígitos do maior de V Para 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 Algoritmo LSB - Numérico
Exemplo LSB Entrada 25 18 123 345 7 603 789 43 11 120 Saída 7 11 18 25 Passo 1 120 1 011 2 3 123 603 043 4 5 025 345 6 7 007 8 018 9 789 Passo 2 603 007 1 011 018 2 120 123 025 3 4 043 345 5 6 7 8 789 9 Passo 3 007 011 018 025 043 1 120 123 2 3 345 4 5 6 603 7 789 8 9 025 018 123 345 007 603 789 043 011 120 120 011 123 603 043 025 345 007 018 789 603 007 011 018 120 123 025 043 345 789 Saída 7 11 18 25 43 120 123 345 603 789 Exemplo
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 V Saida: vetor V ordenado Algoritmo MSB – Lexicográfico
Exemplo MSB Entrada JATO DADO DEDO PATO LATA MAR FOCA FACA MACA JAPA Passo 1 D F J L M P ADO OCA ATO ATA AR EDO ACA APA Passo 2 D A E DO F A O CA J A TO PA M A R CA Passo 3 JA P T A O MA C R A Saída DADO DEDO FACA FOCA JAPA JATO LATA MACA MAR PATO Exemplo
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”. Exercícios Sugeridos