lista de prioridades - profº erinaldo sanches nascimento · pdf fileheap •ou lista...

24
Lista de Prioridades Estrutura de Dados II Prof. Erinaldo

Upload: phungdat

Post on 23-Feb-2018

216 views

Category:

Documents


2 download

TRANSCRIPT

Lista de Prioridades

Estrutura de Dados II

Prof. Erinaldo

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

Heap Mínimo

Heap Máximo e Mínimo

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.

Consultar

Acessa o valor da raiz da árvore, que é o primeiro elemento do vetor.

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

Em um heap max-min e em um heap min-max a chave de um nó i é superior às chaves de seus descendentes quando i está situado em um nível máximo, e inferior às chaves de seus descendentes quando i é situado em um nível mínimo.