Aula Prática #13 - Filas de Prioridade

Estruturas de Dados 2018/2019 (CC1007) - DCC/FCUP

Aula Prática #13 - Filas de Prioridade
(guião extra)

Este pequeno guião extra serve apenas para dar alguma experiência prática no que toca a filas de prioridade. Pode começar por recordar o que foi dado nas teóricas:


Exercício 1) Filas de Prioridade (Heaps)

Um TAD fila de prioridade mantém uma coleção de elementos mantendo maneira de eficiente de inserir elementos e de retirar o elemento mais prioritário (vamos assumir que o mais prioritário é o menor).

Uma maneira de implementar filas de prioridade com operações eficientes em tempo logarítmico é usar um tipo especial de árvores chamadas de heaps. Numa (min)heap, qualquer nó deve sempre ser menor que os seus filhos (o que significa que o menor de todos está na raíz). Além disso, uma heap é uma árvore completa (todos os níveis cheios, excepto potencialmente o último, com os nós colocados o mais à esquerda possível - o que implica que é equilibrada e tem alura O(log n)) e é tipicamente implementada usando um array (onde o nó na posição i tem como filhos os nós nas posições i*2 e i*2+1) [pode espreitar os slides para relembrar]

  1. Compreendo heaps.
    Use a seguinte página para visualizar e interagir um pouco com uma (min)heap, tentando depois prever o que vai acontecer ao inserir e remover:
  2. Código de heaps.
    Faça download do código de dado nas teóricas e compile-o:

    Execute a classe de teste das filas de prioridade: $ java TestMinHeap, acompanhando a execução dos métodos, e espreitando também o ficheiro MinHeap.java para ver como é implementada a heap de mínimo.

  3. Um problema no Mooshak com filas de prioridade .
    Resolva e submeta o problema [ED215] Leilões.

Exercícios extra para consolidação de conhecimentos

  1. Para consolidar os seus conhecimentos sobre filas de prioridade, experimente resolver novamente o 215 mas desta vez usando um TAD do próprio Java, a PriorityQueue.
  2. Experimente implementar uma MaxHeap, usando como base de codigo a MinHeap.