Ordenação: Terminologia

Slides:



Advertisements
Apresentações semelhantes
Algoritmos de Ordenação
Advertisements

Principais famílias de algoritmos

Pesquisa em Memória Primária
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
HeapSort Filas de Prioridade – Heap
Pesquisa em Memória Primária – Árvores de Busca
Pesquisa em Memória Primária – Árvores de Busca
Pesquisa em Memória Primária
David Menotti Estruturas de Dados I DECOM – UFOP
SEMINÁRIO DE ALGORITMOS
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Classificação e Pesquisa de Dados
Métodos de Classificação por Seleção: HeapSort
Algoritmos de Ordenação
Algoritmos de Ordenação
Insertion Sort.
Alberto Rodrigues Costa Junior - (arcj)
Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária
Comparação entre os métodos de ordenação
Árvores binárias de pesquisa com balanceamento
Árvores Binárias de Pesquisa
Heap Sort TPA – Prof. Mateus Costa
Katia S. Guimarães Heapsort Katia S. Guimarães
Estruturas de Dados e Ordenação
Listas de Prioridades Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade A prioridade associada a um dado pode ser qualquer.
Algoritmos de Ordenação
QuickSort Dividir: A[p…r] é particionado (reorganizado) em dois subvetores não vazios A[p…q] e A[q+1…r] tal que cada elemento de A[p…q] é menor ou igual.
Árvore Binária de Busca
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Aula 10 Algoritmos de Busca
Complexidade em Tempo de um Algoritmo
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos.
Métodos de Ordenação.
CLASSIFICAÇÃO DE DADOS
1 TAD Fila com Prioridade -FCP ATAI. 2 TAD Fila com Prioridade (Priority Queue) TAD Fila com Prioridade armazena uma colecção de elementos com prioridade.
ATAL – Prof. Jorge Figueiredo Ordenação AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação.
Heaps Katia S. Guimarães
Berilhes Borges Garcia Algoritmos Uma ferramenta para resolver um problema de computação bem- especificado (O espírito da computação) Exemplo: ordenação.
Programação II Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da Prof.
ORDENAÇÃO EM TEMPO LINEAR
Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva.
USP – ICMC – SSC SSC0300 2º Semestre 2015
Campus Pau dos Ferros Disciplina de Algoritmos Prof. Demétrios Coutinho INFORMÁTICA BÁSICA Algoritmos de Ordenação.
1 Heap Sort Algoritmos e Estuturas de Dados Cátia Vaz.
Listas de Prioridades Cinéticas Tese de Mestrado de: Guilherme Dias da Fonseca (bolsista CAPES) Orientadora: Celina M. H. de Figueiredo 03/2003.
INE5408 Estruturas de Dados Árvores B Exemplos de inserção e deleção segundo a interpretação de Alan Tharp do algoritmo de Bayer.
Gerência de Arquivos.
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS
Ordenação dos Elementos de um Vetor - Bubble Sort e Quick Sort .
Métodos de Pesquisa e Ordenação
INF1007: Programação 2 6 – Ordenação de Vetores
Capítulo VIII – Técnicas de Ordenação
Estrutura de dados Pilhas e filas
FEUP/LEEC Algoritmos e Estruturas de Dados 2001/2002
Métodos de Pesquisa e Ordenação
Árvores.
Capítulo IV – Árvores Gerais
PROGRAMAÇÃO I UNIDADE 3.
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS

GBC053–Gerenciamento de Banco de Dados Ordenação Externa
Analise de Algoritmos e Notação Assintótica
Sistemas Inteligentes Busca Cega (Exaustiva)
Ordenação por Comparação
Algoritmos de ordenação Estruturas avançadas de dados I
Aula 7 Professores: Conteúdo: Dante Corbucci Filho
Transcrição da apresentação:

Ordenação: Terminologia Interno (o arquivo é armazenado na memória principal e pode ser aleatoriamente acessado) x Externo (arquivo é armazenado em memória secundária, e pode ser acessado somente seqüencialmente) Ord. Baseada-comparações: utiliza somente as relações entre as chaves, nenhuma outra propriedade especial da apresentação das chaves é utilizada. Ord. Estável: registros com chaves iguais retêm sua ordem relativa original; i < j & Kpi = Kpj  pi < pj Baseada em Vetor (chaves consecutivas são armazenadas em localizações de memória consecutivas) x Baseada em Listas (pode ser armazenado em localizações não consecutivas) Ord. “In-place” : Necessita um montante constante de espaço extra em adição àquele necessário para armazenar as chaves.

Métodos de Ordenação Elementares Mais fácil de entender os mecanismos básicos de ordenamento Podem ser mais adequados para arquivos pequenos Bons para arquivos bem-comportados que são relativamente fáceis de ordenar, como por exemplo os arquivos quase ordenados Podem ser utilizados para melhorar a eficiência de métodos mais poderosos Ord. por Inserção insertion sort, shellsort Ord. por Troca bubble sort, quicksort Ord. por Seleção selection sort, heapsort Ord. por Fusão merge sort Ord. por Distribuição radix sort

Selection Sort Ordenação “In-place” Não é estável 1. for i = n to 2 do 2. max  i 3. for j = i - 1 to 1 do 4. if A[max]  A[j] then 5. max  j 6. t  A[max] 7. A[max]  A[i] 8. A[i]  t Ordenação “In-place” Não é estável O número de comparações é (n2) no pior caso, mas pode ser melhorado, conduzindo ao método heapsort (mostrado a seguir).

Heaps Heapsort Estrutura de Dado Mantendo a Propriedade Heap Construindo uma Heap Algoritmo Heapsort Fila de Prioridade Um vetor que pode ser visto como uma árvore binária completa. 16 14 10 8 7 9 3 2 4 1

Operações Básicas Pai (i) retorne i/2 Esquerda (i) retorne 2i Direita (i) retorne 2i+1

Propriedades Propriedade Heap: para todo nó i, com exceção da raiz, A[Parent(i)]  A[i] Altura de um nó em uma árvore: o número de arcos existentes no caminho mais longo de um nó para uma folha. A altura de uma árvore para uma heap é (lg n). Assim, as operações básicas de uma heap executam em O(lg n).

Mantendo a Propriedade Heap

Heapify (A, i) Heapify (A, i) 1. l  esquerda(i) 2. r  direita(i) 3. if l  heap-size[A] and A[l] > A[i] 4. then largest  l 5. else largest  i 6. if r  heap-size[A] and A[r] > A[largest] 7. then largest  r 8. if largest i 9. then troque A[i]  A[largest] 10. Heapify(A, largest)

Análise do Algoritmo O tempo de execução para qualquer nó i é (1), o tempo para corrigir o relacionamento entre A[i], A[Esquerda(i)] e A[Direita (i)], mais o tempo para executar Heapify sobre uma das sub-árvores filhas. E, cada sub-árvore filha têm tamanho de no máximo 2n/3 (o pior caso ocorre quando a última fileira da árvore está exatamente cheia até a metade). Assim, T(n)  T(2n/3) + (1)  T(n) = O(lg n) Alternativamente, Heapify requer O(h) onde h é a altura do nó ao qual Heapify é aplicada.

Build-Heap(A) Build-Heap(A) 1. heap-size[A]  length[A] 2. for i  length[A]/2 downto 1 3. do Heapify(A, i)

Tempo de Execução O tempo requerido por Heapify sobre um nó de altura h é O(h). De modo que nós podemos expressar o custo total de Build-Heap como  h=0 à lgn n / 2h+1 O(h) = O( n  h=0 à lgn h/ 2h ) e,  h=0 à  h/ 2h = (1/2) / (1 - 1/2)2 = 2 Portanto, O( n  h=0 à lgn h/ 2h ) = O(n) Assim, pode-se construir uma heap de um vetor aleatório em um tempo linear.

Heapsort (A) 1. Build-Heap(A) 2. for i  length[A] downto 2 3. do troque A[1]  A[i] 4. heap-size[A]  heap-size[A] - 1 5. Heapify(A, 1)

Análise do Algoritmo In-place Instável Build-Heap requer O(n) e cada uma das n-1 invocações de Heapify requer O(lg n). Portanto, T(n) = O(n lg n)

Filas com Prioridade Uma estrutura de dados visando a manutenção de um conjunto S de elementos, cada um com valor associado chamado chave. Aplicações: scheduling de trabalhos sobre um computador compartilhado, simulação de eventos discretos. Heap pode ser utilizada para implementar uma fila de prioridade.

Operações Básicas Insert(S, x) - insere o elemento x no conjunto S, i.e. S  S  {x} Maximum(S) - retorna o elemento de S com a maior chave. Extract-Max(S) - remove e retorna o elemento de S com a maior chave.

Heap-Extract-Max(A) 1. if heap-size[A] < 1 2. then erro “heap underflow” 3. max  A[1] 4. A[1]  A[heap-size[A]] 5. heap-size[A]  heap-size[A] - 1 6. Heapify(A, 1) 7. return max

Heap-Insert(A, key) 1. heap-size[A]  heap-size[A] + 1 2. i  heap-size[A] 3. while i > 1 and A[pai(i)] < key 4. do A[i]  A[pai(i)] 5. i  pai(i) 6. A[i]  key

Tempo de Execução Tempo de execução de Heap-Extract-Max é O(lg n). Executa somente um quantidade constante de trabalho sobre o topo de Heapify, o qual requer O(lg n) Tempo de execução de Heap-Insert é O(lg n). O caminho traçado da nova folha para a raiz têm compriemento da ordem de O(lg n).

Exemplos