1 TAD Fila com Prioridade -FCP ATAI. 2 TAD Fila com Prioridade (Priority Queue) TAD Fila com Prioridade armazena uma colecção de elementos com prioridade.

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
O TAD fila O TAD fila armazena objetos arbitrários
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
TAD Deque ATAI.
Estrutura de Dados e Algoritmos e Programação e Computadores II
INE 5384 Estruturas de Dados Prof a. Patrícia Vilain
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.

Pesquisa em Memória Primária
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
HeapSort Filas de Prioridade – Heap
Pesquisa em Memória Primária – Árvores de Busca
Medida do Tempo de Execução de um Programa
David Menotti Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
Medida do Tempo de Execução de um Programa
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
David Menotti Estruturas de Dados I DECOM – UFOP
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Classificação e Pesquisa de Dados
Walfredo Cirne walfredo.dsc.ufpb.br
AED – Algoritmos e Estruturas de Dados
Métodos de Classificação por Seleção: HeapSort
Robson Godoi / Sandra Siebra
Aula 12 Biblioteca padrão do C++ O que é? Composição
Algoritmos de Busca Parte II
Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Algorítmos e estrutura de dados III Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
Ordenação por inserção
Listas, Filas e Pilhas Katia Guimarães.
Estruturas de Dados Aula 9: Listas (parte 1)
Pilhas Profa. Nádia Félix.
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Algoritmos de Ordenação
Estruturas de Dados Aula 11: TAD Pilha
Árvore Binária de Busca
Módulo I Capítulo 5: Vetores
Listas Simplesmente Encadeadas
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Complexidade em Tempo de um Algoritmo
Tabela Hash Alunos : Gustavo Jorge Zanin nºUSP
Lista Linear Base para outras estruturas
Prof. Hilton Cardoso Marins Junior
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Como analisar um algoritmo
Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
CLASSIFICAÇÃO DE DADOS
JAVA – Fila ATAI.
ATAL – Prof. Jorge Figueiredo Ordenação AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação.
Estrutura de Dados Aula 3 - Listas
Estrutura de dados Pilhas e filas
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
Listas Duplamente Encadeadas Profs Prog2 e Lab2 Unisinos.
Ordenação (Sorting) Ordenar é dispor os elementos de um conjunto numa ordem ascendente ou descendente. Problema: Dados n números, arranjá-los em ordem.
Algoritmos de Pesquisa
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Transcrição da apresentação:

1 TAD Fila com Prioridade -FCP ATAI

2 TAD Fila com Prioridade (Priority Queue) TAD Fila com Prioridade armazena uma colecção de elementos com prioridade. Na Fila com Prioridade só é possível remover ou aceder ao elemento com a maior prioridade. Prioridade é o valor associado a cada elemento e é do tipo ordenado. Exemplo: Sala de emergência do hospital, onde o doente mais crítico é atendido primeiro. É diferente das estruturas de dados posicionais (pilhas, filas, sequencias, árvores,…), que armazenam elementos em posições específicas de acordo com inserção e remoção. Fila com Prioridade armazena elementos de acordo com suas prioridades e não tem noção de “posição”.

3 Chaves e relação de ordem total Uma Fila com Prioridade precisa de uma regra de comparação que defina uma relação de ordem total (  ). Essa ordem é definida para cada par de chaves e deve satisfazer as seguintes propriedades: Reflexiva: k  k Anti-simétrica: se k1  k2 e k2  k1, então k1 = k2 Transitiva: se k1  k2 e k2  k3, então k1  k3 Uma Fila com Prioridade (P) suporta os seguintes métodos fundamentais: min() insertItem(k, e) removeMin()

4 Ordenação através de uma FCP A Fila com Prioridade (P) pode ser usada para ordenar sequencia S: 1. Introdução elementos de S numa P através de uma série de operações insertItem (uma para cada elemento de S) 2. Remoção elementos de P em ordem crescente através de operaçõs removeMin colocando-os novamente em S em ordem Algoritmo PriorityQueueSort(S, P): Entrada: uma sequencia S que armazena n elementos para os quais uma relação de ordem total está definida, e a Fila com Prioridade P que compara chaves usando a mesma relação de ordem total. Saida: A sequencia S ordenada pela relação de ordem total. while !S.isEmpty() do e  S.removeFirst() P.insertItem(e, e) {a chave é o próprio elemento} while !P.isEmpty() do e  P.removeMin() S.insertLast(e)

5 TAD Fila com Prioridade Uma Fila com Prioridade suporta os seguintes métodos: size()Retorna o número de elementos em P Entrada: Nenhuma; Saída: Inteiro isEmpty() Testa se P esta vazia Entrada: Nenhuma; Saída: boolean insertItem(k,e) Insere um novo elemento e com chave k em P Entrada: objectos K (chave) e e (elemento); Saída: Nenhuma minElement() Retorna (sem remover) o elemento de P com menor chave. Um erro ocorre se o P está vazia. Entrada: Nenhuma; Saída: Objecto (elemento) minKey() Retorna o menor chave em P. Um erro ocorre se o P está vazia. Entrada: Nenhuma; Saída: Objecto (chave) removeMin() Remove de P e retorna o elemento com a menor chave. Um erro ocorre se o P está vazia. Entrada: Nenhuma; Saída: Objecto (elemento)

6 Elemento da TAD Fila com Prioridade O elemento da Fila com Prioridade é do tipo item Cada item possui duas partes:  O objecto que define a prioridade (chave) deste elemento (e que é do tipo comparavel)  O objecto que representa o próprio elemento a ser guardado na Fila com Prioridade

7 Implementações possíveis do TAD FCP Uma sequencia não ordenada Operação insertItem(k,e) permite inserir o elemento no conjunto. A operação removeMin() é mais complexa, requer a procura de elemento com a prioridade máxima. Uma sequencia ordenada (por valores de prioridade) O elemento com maior prioridade fica posicionado na cabeça da lista. Nesta abstracção a operação removeMin() é simples, a operação insertItem(k,e) é mais complexa porque o elemento deve ser inserido na posição correcta para a fila continuar ser ordenada. Heap Uma estrutura não linear, parecida com uma árvore binária.

8 Ordem de grandeza das Chaves Usamos objectos comparadores especiais para poder comparar chaves Objecto comparadore é externo. Quando a fila com prioridade precisa de comparar duas chaves, ela usa comparador que foi fornecido para comparar este tipo de chaves. Desta forma a fila com prioridade pode ser generica e guardar todo tipo de objectos. TAD Comparator inclui os seguintes metodos: -isLessThan(a, b) -isLessThanOrEqualTo(a,b) -isEqualTo(a, b) -isGreaterThan(a,b) -isGreaterThanOrEqualTo(a,b) -isComparable(a)

9 Implementação FCP sequencia não ordenada Os elementos de S são composição de dois elementos: k (chave) e e (elemento). Podemos implementar insertItem() usando insertLast() da sequencia. O tempo de execução é O(1). Como inserção é sempre feita no fim, a sequencia não esta ordenada.

10 Implementação FCP sequencia não ordenada Para os metodos minElement(), minKey(), e removeMin(), nos devemos procurar em todos os elementos da sequencia S. O pior caso é de O(n).

11 Implementação FCP sequencia ordenada Nesta implementação os métodos minElement(), minKey(), e removeMin() demoram O(1) A operação insertItem(), no pior caso vai demorar O(n) para encontrar o lugar de inserção do elemento.

12 Implementação FCP sequencia ordenada public class SequenceSimplePriorityQueue implements SimplePriorityQueue { protected Sequence seq = new NodeSequence(); protected Comparator comp; // auxiliary methods protected Object key (Position pos) { return ((Item)pos.element()).key(); } // note casting here protected Object element (Position pos) { return ((Item)pos.element()).element(); } // casting here too public SequenceSimplePriorityQueue (Comparator c) {comp = c; } public int size () {return seq.size(); }

13 Implementação FCP sequencia ordenada public void insertItem (Object k, Object e) throws InvalidKeyException { if (!comp.isComparable(k)) { throw new InvalidKeyException("The key is not valid");} else {if (seq.isEmpty()) { //se sequencia esta vazia, é o primeiro item a ser inserido seq.insertFirst(new Item(k,e)); } else { //verifica se pode ser inserido no final if (comp.isGreaterThan(k,key(seq.last()))) { seq.insertAfter(seq.last(),new Item(k,e)); } else { //procurar o citio certo para k Position curr = seq.first(); while (comp.isGreaterThan(k,key(curr))) { curr = seq.after(curr); } seq.insertBefore(curr,new Item(k,e)); }}}

14 Implementação FCP sequencia ordenada public Object minElement () throws EmptyContainerException { if (seq.isEmpty()) throw new EmptyContainerException("The priority queue is empty"); else return element(seq.first()); } public boolean isEmpty () { return seq.isEmpty(); }

15 Selection Sort Selection Sort é uma variante de Ordenação que utiliza FCP para ordenar a sequencia. FCP é implementado utilizando uma sequencia não ordenada.  Fase 1, inserção de item para a fila P (O(1) )  Fase 2, remoção do item de P demora tempo proporcional ao número de elementos da fila (O(n 2 ))

16 Selection Sort (cont.) Na fase 2 o tempo de execução é o seguinte: A primeira vez que é executada a operação removeMinElement demora O(n), a segunda vez demora O(n-1), etc. A ultima vez demora O(1). O tempo total na fase 2 é: Sabemos que: Logo a complexidade da fase 2 é O(n 2 ).

17 Insertion Sort Insertion sort é a ordenação que resulta quando utilizamos uma sequencia ordenada na implementação de uma PriorityQueueSort

18 Insertion Sort(cont.) A fase 2 é melhorada para O(n). A fase 1 existe um estrangulamento. A primeira chamada a insertItem demora O(1), a segunda demora O(2), a última demora O(n), o tempo total é O(n 2 ). Selection sort e insertion sort ambas são de ordem O(n 2 ). Selection sort executa sempre um número de operações proporcionais a n 2, independentemente da sequencia de entrada. O tempo de execução da insertion sort varia do tipo de sequencia de entrada.