Katia S. Guimarães katia@cin.ufpe.br Heaps Katia S. Guimarães katia@cin.ufpe.br.

Slides:



Advertisements
Apresentações semelhantes
Algoritmos em Grafos (Parte 2)
Advertisements

HASHING Katia Guimarães julho/2002
Software Básico Silvio Fernandes
ALINHAMENTOS LOCAIS E SEMI-GLOBAIS
Katia S. Guimarães QUICKSORT Katia S. Guimarães
Grafos Introdução
UFES CC/EC/Mestrado Teoria dos Grafos Árvores. UFES CC/EC/Mestrado Teoria dos Grafos Árvores Grafo Acíclico: não possui ciclos.
UNIVERSIDADE LUTERANA DO BRASIL COMUNIDADE EVANGÉLICA LUTERANA SÃO PAULO Reconhecida pela Portaria Ministerial nº 681 de 07/12/89 – DOU de 11/12/89 Campus.
Algoritmos BUSCA E INSERÇÃO
Série de Exercícios.
Árvore Binária - altura máxima A: Inserção de 1, 2, 3, 4, 5, 6 e 7 Pior caso: O(n)
Árvores.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.

HeapSort Filas de Prioridade – Heap
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
SEMINÁRIO DE ALGORITMOS
Qualiti Courses :: Documento de Requisitos. {icc2, jmmn, mmc2, CIn-UFPE Equipe Ivan Cordeiro Cardim Julio Maravitch Maurício.
Classificação e Pesquisa de Dados
Métodos de Classificação por Seleção: HeapSort
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
O uso de questionários em trabalhos científicos
Complexidade de Computação Para avaliar a qualidade de um algoritmo usamos como critério o espaço e o tempo de execução. Ao.
Introdução à NP-completude
Backtracking Katia Guimarães.
Algorítmos e estrutura de dados III
Publicidade com banner
Programa de Cargos e Salários
Silogística Tudo o que os artistas fazem é arte.
PROVA Desenhe a árvore original e a árvore obtida após cada execução do procedimento Heapify no processo de transformação de um array desordenado.
Intr. à Biologia Computacional
Intr. à Biologia Computacional
Intr. à Biologia Computacional ALINHAMENTO DE SEQÜÊNCIAS.
Algoritmos e Estruturas de Dados II
Árvores binárias de pesquisa com balanceamento
Estruturas de Dados com Jogos
Estruturas de Dados com Jogos
Metodologia da Pesquisa em Ensino de Ciências I
Árvores Binárias de Pesquisa
Algorítmos e estrutura de dados III
FABER Cirurgia & Implantes.
LÓGICA FILOSÓFICA. Teoria Obj: Construir um conceito de lógica
1. Se este nó é raiz de uma árvore QuasiEquilibrada de ordem k, e
ALINHAMENTOS LOCAIS E SEMI-GLOBAIS
Árvores Balanceadas Liliane Rose Benning Salgado.
Introdução à NP-completude Katia S. Guimarães
Algoritmos Gulosos em Grafos
Katia S. Guimarães Busca em Grafos Katia S. Guimarães
Abordagens para problemas NP-completos
Árvores Binárias e Encaminhamentos
Rotação Simples e Dupla Katia Guimarães
Remoção e Inserção em Heaps
Katia S. Guimarães Heapsort Katia S. Guimarães
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.
Ferramentas de Planejamento
Ordenação de Dados (III)
Pesquisa Sequencial e Binária
Metodologia da Pesquisa em Ensino de Ciências I
Árvore Binária de Busca
MANUAIS NA EMPRESA
Árvores Prof. Dr. rer. nat. Daniel Duarte Abdala DAS 5102 – Fundamentos da Estrutura da Informação 1.
Análise de Complexidade do Algoritmo de Dijkstra

Prof. Hilton Cardoso Marins Junior

Estruturas de Dados e Algoritmos para Inferência de Motifs Katia Guimarães.
1 de outubro de Árvores de Busca e Árvores AVL Parte 1 Katia Guimarães.
Heaps Katia S. Guimarães
Árvores (introdução) Anjolina Grisi de Oliveira Obs: vários slides foram cedidos por Adolfo Almeida Duran (UFBA)
Árvores Binárias e Árvores AVL Katia Guimarães. Árvores Binárias e Árvores AVL Katia S. Guimarães
Transcrição da apresentação:

Katia S. Guimarães katia@cin.ufpe.br Heaps Katia S. Guimarães katia@cin.ufpe.br

Busca por Prioridade Até agora nós estudamos estruturas de busca através de chaves. E se o nosso argumento de busca for diferente? Se nós quisermos recuperar, por exemplo, o elemento que tem a maior chave? katia@cin.ufpe.br

Estrutura Heap Heap é uma estrutura de prioridades, na forma de árvore binária semi-completa, que representa uma ordem parcial entre os elementos do conjunto. Ex: 89 74 32 22 41 15 4 21 9 34 26 8 katia@cin.ufpe.br

Estrutura Heap Implementação usual: Array unidimensional, onde a raiz ocupa a posição 1, e os elementos obedecem à relação: esq.i = 2i, dir.i = 2i + 1. Ex: 89 74 32 22 41 15 4 21 9 34 26 8 89 74 32 22 41 15 4 21 9 34 26 8 katia@cin.ufpe.br

Construção de um Heap A construção é feita a partir do array com os elementos desordenados, e pode ser feita “bottom-up” ou “top-down”. Na construção bottom-up, o controle segue das folhas à raiz (ou seja, da direita para a esquerda no array), construindo um heap único a partir de dois heaps menores + um novo elemento. katia@cin.ufpe.br

Construindo um Heap Bottom-up Base: Se n = 1, então a árvore é uma folha, não há o que fazer (a árvore já é um heap). Ex: 21 Ex: 9 Ex: 34 34 9 21 katia@cin.ufpe.br

Construindo um Heap Bottom-up Passo: Se n > 1, então usando a Hipótese de Indução, só é necessário ajustar a ordem parcial com relação ao novo elemento. Ex: 21 9 34 34 9 21  21 34 9 34 9 21 katia@cin.ufpe.br

Heapify Toma: Dois (sub)heaps + um novo elemento  Gera:  um novo heap contendo todos. Ex. 9 74 41 21 22 34 26 74 22 41 21 9 34 26 9  74 22 41 74 41 21 9 34 26 21 22 34 26 katia@cin.ufpe.br

Heapify 9 74 41 21 22 34 26 74 22 41 21 9 34 26 9  74 22 41 74 41 21 9 34 26 21 22 34 26 Só precisamos encontrar um local apropriado para o elemento nesta nova raiz. katia@cin.ufpe.br

Algoritmo Heapify Algoritmo Heapify(i ) Enquanto i  int (n/2) /* i tem filhos*/ faça { Se i < (n/2) /* i tem dois filhos*/ então Se A[2i ] > A[2i +1] então maior  2i senão maior  2i +1 senão /* O único é o maior*/ maior  2i ; Se A[i ] < A[maior] então { A[i ]  A[maior]; i  maior } senão i  n /* deixe o laço*/ } katia@cin.ufpe.br

Heapify i=1 9 74  i=2 9 41 74 41 21 22 34 26 21 22 34 26 74 i=7 74  22 41 22 41 i=5 21 9 34 26 21 9 34 26 katia@cin.ufpe.br

Construindo um Heap Bottom-up Algoritmo Constrói-Heap: Para i  int (n/2) até 1 faça Heapify 9 22 34 21 74 41 26 9 22 41 21 74 34 26 9 9  22 34 22 41 21 74 41 26 21 74 34 26 katia@cin.ufpe.br

Construindo um Heap Bottom-up 9 22 41 21 74 34 26 9 74 41 21 22 34 26 9 9 22 41 74 41 21 74 34 26 21 22 34 26  katia@cin.ufpe.br

Construindo um Heap Bottom-up 9 74 41 21 22 34 26 74 22 41 21 9 34 26 9  74 74 41 22 41 21 22 34 26 21 9 34 26 katia@cin.ufpe.br

Construindo um Heap Bottom-up Algoritmo Constrói-Heap: Para i  n/2 até 1 faça Heapify (A, n, i) Custo para construir um heap: T(n) = n / 2 · log (n) = O (n · log (n)) Será que este custo é exato? katia@cin.ufpe.br

Custo para construir um Heap Bottom-up A cada execução da rotina Heapify o número de comparações é no máximo o dobro da altura da sub-árvore que está sendo transformada em heap. Logo, no total queremos a soma das alturas de todas as sub-árvores dentro de uma árvore de altura h: H(h) = 2 · H(h-1) + h katia@cin.ufpe.br

Custo para construir um Heap Bottom-up A soma das alturas de todas as sub-árvores dentro de uma árvore de altura h é dada por: H(h) = 2 · H(h-1) + h H(0) = 0 h 0 1 2 3 4 5 6 7 ... H(h) 0 1 4 11 26 57 120 247 ... 2h+1 2 4 8 16 32 64 128 256 ... katia@cin.ufpe.br

Custo para construir um Heap Bottom-up A soma das alturas de todas as sub-árvores dentro de uma árvore de altura h é dada por: H(h) = 2 · H(h-1) + h H(0) = 0 h 0 1 2 3 4 5 6 7 ... H(h) 0 1 4 11 26 57 120 247 ... 2h+1 2 4 8 16 32 64 128 256 ... H(h) = 2h+1 - (h+2) = O (n) katia@cin.ufpe.br