Ordenação em Tempo Linear

Documentos relacionados
Ordenação. Prof. Túlio A. M. Toffolo Prof. Marco Antonio M. Carvalho BCC402 Aula 04 Algoritmos e Programação Avançada

Projeto e Análise de Algoritmos

Ordenação em tempo linear

Análise de algoritmos

Tópico 5 Algoritmos de Ordenação. Parte II - métodos de ordenação: counting sort, radix sort e bucket sort.

Algoritmos de Ordenação: Tempo Linear

Estruturas de Dados 2

Quão rápido podemos ordenar? Aula07-LimiteInferiorpara Ordenação. Quão rápido podemos ordenar? Árvore de Decisão- Exemplo. Ordenação em Tempo Linear

AULA 13. Algoritmos p.526/582

Análise de Algoritmos Algoritmos de Ordenação

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 7-10

Ordenação. Prof. Jonas Potros

ALGORITMOS DE ORDENAÇÃO

Aula 03 Limite assintótico para a ordenação, Ordenação em tempo linear

Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Algoritmos de ordenação: Bucketsort, Radixsort e Seleção

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: ClaudioQuick F. M.

Projeto e Análise de Algoritmos

Limite assintótico para a ordenação, Ordenação em tempo linear

Radix Sorting. Várias aplicações têm chaves que são inteiros, definidos dentro de um intervalo

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Aula 2. Divisão e conquista. Exemplo 1: Número de inversões de uma permutação (problema 2-4 do CLRS; veja também sec 5.4 do KT)

Algoritmos de Ordenação

BCC202 - Estrutura de Dados I

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: Claudio Quick F. M.

Ordenação: HeapSort. Prof. Túlio Toffolo BCC202 Aula 17 Algoritmos e Estruturas de Dados I

Pedro Ribeiro 2014/2015

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Ordenação em Memória Primária Estrutura de Dados II

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Teoria da Computação Aula 9 Noções de Complexidade

BCC202 - Estrutura de Dados I

Análise de Algoritmos

Algoritmos de ordenação Quicksort

Classificação e Pesquisa Aula 6 Métodos de Ordenação: ShellSort e QuickSort. Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional

Algoritmos de Ordenação e Pesquisa. Marco Antonio Moreira de Carvalho Algoritmos e Estrutura de Dados

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort

Algoritmos de Ordenação: QuickSort

AED2 - Aula 11 Problema da separação e quicksort

Mediana. Aula 09. Menor. i-ésimo menor elemento. Algoritmo de Seleção. -ésimo menor elemento. Mediana é o n+1. -ésimo menor ou o n+1

Ordenação de Dados. Ordenação de Dados

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Algoritmos e Estruturas de Dados II. Trabalho Prático 3

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

BUSCA EM ARRAYS. Prof. André Backes. Ato de procurar por um elemento em um conjunto de dados

Estruturas de Dados 2

Métodos de Ordenação

Análise de Algoritmos

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

Aula 13: Ordenação - Heapsort. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Extra- Algoritmos de Ordenação

void subdivide (LISTA_ENC *pl, LISTA_ENC *pl1, LISTA_ENC *pl2) { int cont, k=1; for (cont=tam(*pl)/2;cont;cont--) {

Memória secundária. Memória secundária

Análise e Complexidade de Algoritmos

Quicksort. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

heapsort (int *x, int n) { int i, e, s, f, aux; /*fase de pré-processamento - cria heap inicial*/ for (i=1; i<n; i++) { e = x[i]; s = i; f = (s-1)/2;

Projeto e Análise de Algoritmos

Aula 03: Análise de algoritmos melhor caso, pior caso e caso médio

Hashing Endereçamento Direto Tabelas Hash

BCC202 - Estrutura de Dados I

ALGORITMOS AVANÇADOS. UNIDADE III Algoritmo de Ordenação por Intercalação (Mergesort) Luiz Leão

Algoritmos de ordenação Heapsort

Projeto e Análise de Algoritmos

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

HeapSort Filas de Prioridade Heap. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort)

5. Algoritmos de Ordenação

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

Algoritmos de Ordenação em LISP

Algoritmo MergeSort. Estrutura de Dados II Prof Jairo Francisco de Souza

Transcrição:

Ordenação em Tempo Linear Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 19 Algoritmos e Estruturas de Dados I

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

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

ORDENAÇÃO EM TEMPO LINEAR ORDENAÇÃO POR CONTAGEM

Ordenação por contagem Pressupõe que cada elemento da entrada é um inteiro na faixa de 0 a k, para algum inteiro k; Idéia básica: Determinar para cada elemento da entrada x o número de elementos maiores que x; Com esta informação, determinar a posição de cada elemento Ex.: Se 17 elementos forem menores que x então x ocupa a posição de saída 18. 5

Ordenação por contagem Algoritmo: Assumimos que o vetor de entrada é A[1,...,n]; Outros dois vetores são utilizados: B[1,...,n] armazena a saída ordenada; C[1,...,k] é utilizado para armazenamento temporário. 6

Ordenação por contagem 1 for i 0 to k 2 do C[i] 0 3 for j 1 to length[a] 4 do C[A[j]] C[A[j]] + 1 1 2 3 4 5 6 7 8 A 2 5 3 0 2 3 0 3 k = 5 5 for i 1 to k 6 do C[i] C[i] + C[i 1] C 0 1 2 3 4 5 7 for j length[a] down to 1 8 do B[C[A[j]]] A[j] 9 C[A[j]] C[A[j]] 1 B 1 2 3 4 5 6 7 8 7

Ordenação por contagem 1 for i 0 to k 2 do C[i] 0 3 for j 1 to length[a] 4 do C[A[j]] C[A[j]] + 1 5 for i 1 to k 6 do C[i] C[i] + C[i 1] 1 2 3 4 5 6 7 8 A 2 5 3 0 2 3 0 3 k = 5 0 1 2 3 4 5 C 0 0 0 0 0 0 7 for j length[a] down to 1 8 do B[C[A[j]]] A[j] 9 C[A[j]] C[A[j]] 1 B 1 2 3 4 5 6 7 8 8

Ordenação por contagem 1 for i 0 to k 2 do C[i] 0 3 for j 1 to length[a] 4 do C[A[j]] C[A[j]] + 1 5 for i 1 to k 6 do C[i] C[i] + C[i 1] 1 2 3 4 5 6 7 8 A 2 5 3 0 2 3 0 3 k = 5 0 1 2 3 4 5 C 2 0 2 3 0 1 7 for j length[a] down to 1 8 do B[C[A[j]]] A[j] 9 C[A[j]] C[A[j]] 1 B 1 2 3 4 5 6 7 8 9

Ordenação por contagem 1 for i 0 to k 2 do C[i] 0 3 for j 1 to length[a] 4 do C[A[j]] C[A[j]] + 1 5 for i 1 to k 6 do C[i] C[i] + C[i 1] 1 2 3 4 5 6 7 8 A 2 5 3 0 2 3 0 3 k = 5 0 1 2 3 4 5 C 2 2 4 7 7 8 7 for j length[a] downto 1 8 do B[C[A[j]]] A[j] 9 C[A[j]] C[A[j]] 1 B 1 2 3 4 5 6 7 8 10

Ordenação por contagem 1 for i 0 to k 2 do C[i] 0 3 for j 1 to length[a] 4 do C[A[j]] C[A[j]] + 1 5 for i 1 to k 6 do C[i] C[i] + C[i 1] 7 for j length[a] down to 1 8 do B[C[A[j]]] A[j] 1 2 3 4 5 6 7 8 A 2 5 3 0 2 3 0 3 k = 5 0 1 2 3 4 5 C 0 2 2 4 7 7 1 2 3 4 5 6 7 8 B 0 0 2 2 3 3 3 5 9 C[A[j]] C[A[j]] 1 11

Ordenação por contagem O tempo de execução é dado em função do valor de k; Roda em tempo Θ(n + k); Se tivermos k = O(n), então o algoritmo executa em tempo Θ(n); Exemplo prático de uso: vídeo locadora 12

ORDENAÇÃO EM TEMPO LINEAR RADIXSORT

Radix Sort Pressupõe que as chaves de entrada possuem limite no valor e no tamanho (quantidade de dígitos); Ordena em função dos dígitos (um de cada vez): A partir do mais significativo; Ou a partir do menos significativo? É essencial utilizar um segundo algoritmo estável para realizar a ordenação de cada dígito. 14

Radix Sort Funcionamento A partir dos dígitos menos significativos: 15

Radix Sort Funcionamento A partir dos dígitos menos significativos: 16

Radix Sort Funcionamento A partir dos dígitos menos significativos: 17

Radix Sort Funcionamento A partir dos dígitos menos significativos: 18

Radix Sort Funcionamento A partir dos dígitos menos significativos: 19

Radix Sort Funcionamento A partir dos dígitos menos significativos: 20

Radix Sort Funcionamento A partir dos dígitos menos significativos: Como ficaria a partir o dígito mais significativo? 21

Radix Sort Funcionamento A partir dos dígitos menos significativos: E se a ordenação não fosse estável? 22

Radix Sort Pseudo Código Como dito anteriormente, o Radix Sort consiste em usar um outro método de ordenação (estável) para ordenar as chaves em relação a cada dígito; O código, portanto, é muito simples: 1 for i 1 to d 2 utilize um algoritmo estável para ordenar o Onde: array A pelo i-ésimo dígito d é número de dígitos; A é o array de entrada. 23

ORDENAÇÃO EM TEMPO LINEAR BUCKETSORT

Bucket Sort Assume que a entrada consiste em elementos distribuídos de forma uniforme sobre o intervalo [0,1); A idéia do Bucket Sort é dividir o intervalo [0,1) em n subintervalos de mesmo tamanho (baldes), e então distribuir os n números nos baldes; Uma vez que as entradas são uniformemente distribuídas não se espera que muitos números caiam em cada balde; 25

Bucket Sort Para produzir a saída ordenada, basta ordenar os números em cada balde, e depois examinar os baldes em ordem, listando seus elementos; A função para determinação do índice do balde correto é ; n A[i] Vamos a um exemplo com 10 números A é o array de entrada; B é o array com os baldes. 26

Bucket Sort Funcionamento B 0 / 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / A 0,78 0,17 0,39 0,26 0,72 0,94 0,21 0,12 0,23 0,68

Bucket Sort Funcionamento B 0 / 1 / 2 / 3 / 4 / 5 / 6 / 7 8 / 9 / 0,78 / A 0,78 0,17 0,39 0,26 0,72 0,94 0,21 0,12 0,23 0,68

Bucket Sort Funcionamento B 0 / 1 2 / 3 / 4 / 5 / 6 / 7 8 / 9 / 0,17 / 0,78 / A 0,78 0,17 0,39 0,26 0,72 0,94 0,21 0,12 0,23 0,68

Bucket Sort Funcionamento B 0 / 1 2 / 3 4 / 5 / 6 / 7 8 / 9 / 0,17 / 0,39 / 0,78 / A 0,78 0,17 0,39 0,26 0,72 0,94 0,21 0,12 0,23 0,68

Bucket Sort Funcionamento B 0 / 1 2 3 4 / 5 / 6 / 7 8 / 9 / 0,17 / 0,26 / 0,39 / 0,78 / A 0,78 0,17 0,39 0,26 0,72 0,94 0,21 0,12 0,23 0,68

Bucket Sort Funcionamento B 0 / 1 2 3 4 / 5 / 6 / 7 8 / 9 / 0,17 / 0,26 / 0,39 / 0,72 0,78 / A 0,78 0,17 0,39 0,26 0,72 0,94 0,21 0,12 0,23 0,68

Bucket Sort Funcionamento B 0 / 1 2 3 4 / 5 / 6 / 7 8 / 9 0,17 / 0,26 / 0,39 / 0,72 0,94 / 0,78 / A 0,78 0,17 0,39 0,26 0,72 0,94 0,21 0,12 0,23 0,68

Bucket Sort Funcionamento B 0 / 1 2 3 4 / 5 / 6 / 7 8 / 9 0,17 / 0,21 0,39 / 0,72 0,94 / 0,26 / 0,78 / A 0,78 0,17 0,39 0,26 0,72 0,94 0,21 0,12 0,23 0,68

Bucket Sort Funcionamento B 0 / 1 2 3 4 / 5 / 6 / 7 8 / 9 0,12 0,21 0,39 / 0,72 0,94 / 0,17 / 0,26 / 0,78 / A 0,78 0,17 0,39 0,26 0,72 0,94 0,21 0,12 0,23 0,68

Bucket Sort Funcionamento B 0 / 1 0,12 0,17 / 2 0,21 0,23 0,26 / 3 0,39 / 4 / 5 / 6 / 7 0,72 0,78 / 8 / 9 0,94 / A 0,78 0,17 0,39 0,26 0,72 0,94 0,21 0,12 0,23 0,68

Bucket Sort Funcionamento B 0 / 1 0,12 0,17 / 2 0,21 0,23 0,26 / 3 0,39 / 4 / 5 / 6 0,68 / 7 0,72 0,78 / 8 / 9 0,94 / A 0,78 0,17 0,39 0,26 0,72 0,94 0,21 0,12 0,23 0,68

Bucket Sort Funcionamento B 0 / 1 0,12 0,17 / 2 0,21 0,23 0,26 / 3 0,39 / 4 / 5 / 6 0,68 / 7 0,72 0,78 / 8 / 9 0,94 / A 0,78 0,17 0,39 0,26 0,72 0,94 0,21 0,12 0,23 0,68

ORDENAÇÃO EM TEMPO LINEAR CONCLUSÕES

Ordenação em tempo linear Foram vistos três algoritmos de ordenação linear (tempo Θ(n)). Que são então melhores que os algoritmos de ordenação por comparação (tempo O(n lg n)); Entretanto, nem sempre é interessante utilizar um destes três algoritmos: Todos eles pressupõem algo sobre os dados de entrada a serem ordenados. 40

Perguntas?