1 / 16

Ordenação: Heapsort

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II. Introdução. Possui o mesmo princípio de funcionamento da ordenação por seleção. Selecione o menor item do vetor Troque-o pelo item da primeira posição Repita operação com os elementos restantes do vetor Implementação direta

karsen
Download Presentation

Ordenação: Heapsort

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Introdução • Possui o mesmo princípio de funcionamento da ordenação por seleção. • Selecione o menor item do vetor • Troque-o pelo item da primeira posição • Repita operação com os elementos restantes do vetor • Implementação direta • Encontrar o menor elemento requer n-1 comparações • Ideia: • Utilização de uma fila de prioridades implementada com um heap.

  3. Fila de Prioridades • Definição: • Estrutura de dados composta de chaves, que suporta duas operações básicas: inserção de um novo item e remoção do item com a maior chave. • A chave de cada item reflete a prioridade em que se deve tratar aquele item. • Aplicações: • Sistemas operacionais, sistema de memória (paginação).

  4. Fila de Prioridades • Operações • Constrói a fila de prioridade com N itens • Insere um novo item • Retira o maior item • Altera a prioridade de um item

  5. Fila de Prioridades • Representações • Lista sequencial ordenada, não ordenada e heap.

  6. Fila de Prioridades • Algoritmos de ordenação com fila de prioridades • Utiliza operação insere para adicionar todas as N chaves • Utiliza a operação retira máximo para receber uma lista na ordem reversa.

  7. Fila de Prioridades • Algoritmos de ordenação com fila de prioridades • Utiliza operação insere para adicionar todas as N chaves • Utiliza a operação retira máximo para receber uma lista na ordem reversa.

  8. Heap • Representação vetorial A[1], A[2], ..., A[n] • A[i] ≥A[2i] • A[i] ≥ A[2i+1] • i = 1, 2, 3, ..., n/2. • Representação emárvore binária • Será um heap se cada nó for maior ou igual seus filhos.

  9. Heap • Representação emárvore binária • Nós são numerados de 1 a n • O primeiro é chamado raiz • O nó k/2 é o pai do nó k, 1 < k ≤ n • Os nós 2k e 2k+1 são filhos da esquerda e direita do nó k, para 1 ≤ k ≤ n/2.

  10. Heap • Árvores binária pode ser representadas por vetores. • Uma representação muito compacta • Permite caminhar pelos nós da árvore facilmente • Filhos de um nó i estão nas posições 2i e 2i + 1 • O pai de um nó i está na posição i/2

  11. Heap • Construindo/Restauração da condição de heap. • Garantir que o valor da chave do pai é maior que dos filhos. • Observe que os nós n/2,..., n satisfazem a condição, uma vez que não tem filhos. • Para todo i de n/2 até 1 • Troque o nó com seu filho de maior chave, até que nenhuma mudança ocorra.

  12. Heap 1 D 1 D 1 2 3 3 2 R O 2 R O 4 5 6 7 4 5 6 7 E N A S E N A S 1 D 1 S 3 4 3 3 2 R S 2 R D 4 5 6 7 4 5 6 7 E N A O E N A O • Restauração da condição de heap (árvore)

  13. Heap – Refaz a condição de heap voidRefazCimaBaixo(Item A[], int k, intDir) { int j; while (2*k <= Dir) { j = 2*k; /* encontra maior filho */ if (j+1 <= Dir && A[j] < A[j+1]) j++; /* testa se pai é maior que filho */ if (A[k] >= A[j]) break; /* pai é menor que filho, troca posições */ Troca(A[k], A[j]); k = j; } }

  14. Heap – Construção do heap voidConstroi(Item A[], int N) { intEsq; /* inicia na metade do vetor */ Esq = N / 2 + 1; while (Esq > 1) { Esq--; RefazCimaBaixo(A, Esq, N); }

  15. Heapsort – Análise Algoritmos e Estrutura de Dados II • O procedimento RefazCimaBaixo gasta cerca de log n operações no pior caso. • Logo, o heapsort gasta um tempo proporcional a O(n log n), no pior caso.

  16. Heapsort • Vantagens • O(n log n). • Desvantagens • Não é estável.

More Related