lista de prioridades - profº erinaldo sanches nascimento · pdf fileheap •ou lista...
TRANSCRIPT
Heap
• Ou lista de prioridades, é composta por um conjunto finito de dados, cada qual com uma chave que determinará sua prioridade dentro da lista.
• É um vetor.
• Uma árvore binária completa – Cada nó possui no máximo dois filhos
– Os nós que não possuem dois filhos estão no último ou no penúltimo nível.
Heap (cont.)
A árvore que representa a estrutura heap é sempre preenchida da esquerda para a direita.
Heap (cont.)
Dado um índice i do vetor, para se descobrir as posições em que se encontram o elemento pai, o filho esquerdo e o filho direito, realizam-se os cálculos:
Pai(i) = i / 2
Filho Esquerdo(i) = 2·i
Filho Direito(i) = 2·i+1
Heap (cont.)
Existem dois tipos de heaps binários:
• heaps máximos: o maior elemento se encontra no raiz.
X[Pai(i)] ≥ X[i]
• heaps mínimos: o menor elemento está na raiz.
X[Pai(i)] ≤ X[i]
Heap (cont.)
Exemplo de uso: processos pendentes usados por um sistema operacional, onde cada processo possui um valor associado que indica a prioridade do trabalho.
Os processo são mantidos em uma lista de prioridades, onde os com prioridade mais alta serão executados antes de quaisquer trabalhos com necessidades menos urgentes.
Heap Máximo e Mínimo
a) O elemento raiz deve ocupar a posição 1 do vetor, o que facilita o cálculo dos endereços dos elementos filhos da direita e da esquerda.
b) O vetor utilizado para armazenar n elementos tem a posição inicial zero e como esta não será utilizada o vetor deve ser declarado com n+1 posições.
Heap Máximo e Mínimo
c) Se o heap for máximo, a propriedade de um elemento pai deve ser maior que a de seus filhos. Esta propriedade deve ser aplicada a cada elemento da lista.
d) Se o heap for mínimo, a prioridade de um elemento pai deve ser menor que a de seus filhos. Esta propriedade deve ser aplicada a cada elemento da lista.
Heap Máximo e Mínimo
Operações:
• inserir um elemento na estrutura heap.
• remover o elemento de maior prioridade em um heap máximo ou o de menor prioridade em um heap mínimo.
• consultar um elemento de maior prioridade em um heap máximo ou o de menor prioridade em um heap mínimo.
Inserção
• O elemento deve ser inserido na próxima posição livre, porém, antes, deve ser verificado se o pai atende a propriedade heap.
• Caso não atenda, o paí é copiado para a posição de inserção e a posição antiga do pai é avaliada para inserir o novo elemento.
• A regra deve ser aplicada sucessivamente até encontrar a posição correta do no elemento.
Remoção
• Retira o elemento de maior prioridade ou o de menor prioridade.
• A remoção coloca o último elemento no lugar do primeiro.
• O procedimento heap_fica é aplicado para que o conjunto de elementos volte a ser um heap.
Análise da Complexidade
Heap máximo e mínimo
• operação de consulta do elemento de maior ou menor prioridade gasta tempo constante, O(1) – acessa apenas o primeiro elemento da lista
Análise da complexidade
Heap máximo e mínimo
• operação de remoção do elemento de maior ou menor prioridade (elemento raiz), gasta tempo O(log n) – o último elemento da lista é colocado no lugar do removido, aplicação do procedimento heap_fica.
Análise de complexidade
Heap máximo e mínimo
• operação de inserção tenta incluir o novo elemento no fim, verificando se na posição a ser inserida a propriedade heap será mantida. No pior caso o elemento será colocado na raiz (percorre da folha até à raiz), gastando tempo proporcional à altura da árvore, O(log n).
Heap max-min e heap min-max
Aplicações de heap onde é necessário acessar o elemento que possui a maior e a menor prioridade.
Implementa estrutura de vetores e podem ser vistas como árvores binárias completas.
Heap max-min e heap min-max
Operações: consulta do elemento de maior ou de menor prioridade, inserção de um elemento e remoção do elemento de maior ou de menor prioridade.
Propriedades
• O elemento raiz deve ocupar a posição 1 do vetor.
• O vetor utilizado para armazenar n elementos tem a posição inicial zero.
• Em um heap max-min o elemento de maior prioridade ocupada sempre a posição 1 do vetor.
• Em um heap min-max o elemento de menor prioridade ocupa sempre a posição 1 do vetor.
Propriedades
• Cada elemento do vetor corresponde a um nó da árvore binária e encontra-se em um nível.
• Em um heap max-min os níveis ímpares são chamados níveis máximos e os pares níveis mínimos.
• Em um heap min-max os níveis ímpares são chamados níveis mínimos e os pares níveis máximos.
Propriedades
• Em um heap max-min, se o nível de um nó i é máximo (ímpar) a sua chave é superior à chave do seu pai e inferior à chave do seu avô.
• Em um heap min-max, se o nível de um nó i é mínimo (ímpar) a sua chave é inferior à chave do seu pai e superior à chave do seu avô.