Algoritmos e Estruturas de Dados 2006/2007

Documentos relacionados
Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

Algoritmos de Pesquisa e Ordenação em Vectores

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

INF 1010 Estruturas de Dados Avançadas

Algoritmos e Estruturas de Dados 2005/2006

Listas de Prioridade. Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC.

Lista de Prioridades. Estrutura de Dados II Prof. Erinaldo

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2008/2009

Algoritmo de Dijkstra Estudo e Implementação

Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura

Algoritmos de ordenação Heapsort

DAINF - Departamento de Informática

Algoritmos e Estruturas de Dados

Tipos de Dados Abstractos Estruturas Lineares Listas

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof Márcio Bueno. / Material da Prof a Ana Eliza

Ordenação. Insertion Sort

Métodos de Ordenação Parte 3

Árvores binárias de pesquisa

INF111 Programação II Aulas 11, 12, 13 Ordenação

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Árvore Binária de Busca. Prof. César Melo

Análise de algoritmos

Um exercício (pilhas, BST,...)

Algoritmos e Estruturas de Dados

Árvores Binárias de Busca

Carlos Eduardo Batista. Centro de Informática - UFPB

Estruturas de Dados Filas

Árvores Binária de Busca. Prof. César Melo DCC/ICE/UFAM

Tabelas de dispersão

Árvores Binárias de Busca

Algoritmos de Ordenação: HeapSort

Ordenação de Dados (III) HeapSort

Análise de algoritmos

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

Estruturas de Dados Encadeadas

Listas Lineares Ordenadas

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Árvores Binárias de Busca (ABB) 18/11

Tipo de Dados Abstractos: Pilha (stack)

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 7-10

Ordenação de Vectores

Prof. Marco Antonio M. Carvalho

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Filas de prioridade e heapsort

Algoritmos e Estruturas de Dados

Árvores Binárias de Busca

Aula 7 e 8 Filas e suas Aplicações. Prof. Leticia Winkler

Algoritmos e Estruturas de Dados 2005/2006

Árvores de Pesquisa. A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar informação.

Filas. Nesta aula veremos o ADT fila Em um computador existem muitas filas esperando pela impressora, acesso ao disco ou, num sistema timesharing,

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

BCC202 - Estrutura de Dados I

Ordenação e Busca em Arquivos

3. Conteúdo de um vértice v é conteúdo dos filhos de v.

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

Filas Exemplo de Aplicação

Carlos Eduardo Batista. Centro de Informática - UFPB

Árvores Binárias. 9/11 e 11/11 Conceitos Representação e Implementação

Estruturas de Dados. Filas em que a prioridade de remoção não é cronológica. Maior prioridade não é do elemento que ingressou primeiro

Ordenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec

Aula 16: Pesquisa em Memória Primária - Árvores de Busca. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Splaying Tree (Árvore espalhada) Estrutura de Dados II Jairo Francisco de Souza

Algoritmos e Estruturas de Dados 2005/2006. Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema

INF 1010 Estruturas de Dados Avançadas

Estruturas de Dados 2

Filas com prioridade - Introdução (1)

ESTRUTURA DE DADOS CIÊNCIA E TECNOLOGIA DO RIO. Curso de Tecnologia em Sistemas para Internet

ÁRVORE BINÁRIA DE BUSCA

Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 05 Pag.: 1

Estrututas de Dados e Algoritmos. Estrutura de Dados e Algoritmos

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores de Pesquisa (Parte I)

GGI026 - Árvore rubro-negra - Remoção

Árvores AVL e Árvores B. Jeane Melo


Processamento Cosequencial: Ordenação Interna e Externa. Thiago A. S. Pardo Leandro C. Cintra M.C.F. de Oliveira Cristina D. A.

2. Listas 3. Listas ligadas simples 4. Operações dentro das listas 5. Listas Circulares 6. Listas Duplamente Ligadas 7. Pilhas 8.

ESTRUTURAS DE DADOS E ALGORITMOS II ANTONIO RAMOS DE CARVALHO JÚNIOR PILHAS

ESTRUTURA DE DADOS (TCC )

Árvores binárias de busca

Listas Lineares. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.1

Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional

Estrutura de Dados. ! Listas lineares. ! Como manipulá-las: ! estática. ! dinâmicas. ! pilhas. ! filas

Pesquisa em Memória Secundária. Prof. Jonas Potros

Estruturas de Dados Pilhas, Filas, Listas

Complexidade de Algoritmos

Árvores Binárias de Busca (ABB) 18/11

Universidade Federal do Espírito Santo Centro de Ciências Agrárias CCA UFES Departamento de Computação. Ordenação

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6

Transcrição:

Filas de prioridade Algoritmos e Estruturas de Dados 2006/2007 Filas de prioridade Uma fila de prioridade permite, pelo menos, duas operações sobre um conjunto de valores comparáveis: inserção de um elemento remoção do menor elemento Operações adicionais facultativas: diminuir, de um determinado valor, o elemento que se encontra numa determinada posição aumentar, de um determinado valor, o elemento que se encontra numa determinada posição remover o elemento de uma determinada posição Implementação: Listas ligadas Árvores binárias de pesquisa Heaps binários 2 1

Filas de prioridade Implementação por listas ligadas Características de uma implementação por listas ligadas: inserção no início da lista: complexidade temporal O(1) pesquisa, para obtenção do menor elemento: O(N) Alternativa: manter a lista ordenada inserção : O(N) obtenção do menor elemento: O(1) Qual a melhor alternativa? 3 Filas de prioridade Implementação baseada em árvores binárias de pesquisa Características de uma implementação baseada em árvores de pesquisa: inserção: O(log N) obtenção do mínimo: O(log N) em média, e O(N) no pior caso Ambas as operações podem ser realizadas em O(log N) no pior caso, usando árvores equilibradas. Árvores binárias completas: todos os níveis estão completamente preenchidos, com possível excepção do último que estará preenchido a partir da esquerda. Uma árvore binária completa pode ser representada num vector (e assim não é necessário usar apontadores) 4 2

Heaps binários Propriedades do heap binário (min-heap) É uma árvore binária completa Para todos os nós, com excepção da raiz, o valor do pai é menor ou igual ao valor do nó. 13 78 21 45 60 24 31 21 42 51 55 65 26 32 min-heap 15 11 40 max-heap Vantagens em relação às árvores binárias: acesso ao valor mínimo em tempo constante, O(1): mínimo está sempre na raiz 5 Filas de prioridade: implementação Heap inserção de um elemento 1. Inserir elemento na primeira posição livre 2. Enquanto não for respeitada a restrição de ordem: trocar elemento e seu pai 21 13 21 13 24 31 24 14 65 26 32 14 65 26 32 31 6 3

Filas de prioridade: implementação Heap remoção do mínimo 14 31? 31? 14 24 21 65 26 32 31 24 21 65 26 32 14 21 31? 24 31 65 26 32 7 Filas de prioridade: implementação Heap: construção de um heap Uma inserção tem complexidade O(log N) no pior dos casos, mas apenas O(1) em média Uma sequência de N inserções (sem remoções) permite construir um heap em O(N log N), no pior dos casos É possível construir um heap a partir de um vector desordenado em tempo O(N) no pior dos casos 8 4

Filas de prioridade Ordenação com heaps 1. Criar um heap binário a partir de um vector : O(N) 2. Executar N operações deletemin(), e guardar os elementos sucessivamente em um outro vector. Os elementos são retirados por ordem crescente. Cada operação tem complexidade O(log N) O tempo total é portanto O(N log N) Problema (desvantagem): Necessidade de usar outro vector. Solução: Usar o mesmo vector. Quando se retira um elemento, o heap também liberta uma posição; essa posição pode ser usada para guardar o elemento retirado. O vector fica ordenado por ordem decrescente. 9 Heapsort: implementação Heapsort : ordenação de vectores template <class Comparable> void heapsort(vector<comparable> & a) for ( int i = a.size()/2; i >= 0; i--) percdown(a, i, a.size()); for ( int j = a.size() - 1; j > 0; j--) Comparable t = a[0]; a[0] = a[j]; a[j] = t; percdown(a, 0, j); 10 5

Heapsort: implementação Heapsort : ordenação de vectores template <class Comparable> void percdown(vector<comparable> & a, int i, int n) int child; Comparable tmp; for ( tmp = a[i]; (2*i + 1) < n; i = child ) child = 2 * i + 1; if ( child!= n-1 && a[child] < a[child+1] ) child ++; if ( tmp < a[child] ) a[i] = a[child]; else break; a[i] = tmp; 11 Filas de prioridade (Standard Template Library - STL) class priority_queue (max-heap) Alguns métodos: bool empty() const int size() const const T & top() const void push(const T &) void pop() 12 6

Filas de prioridade : aplicação Afectação de recursos Implementar um programa que distribui um conjunto de tarefas por diversas máquinas (todas iguais), de modo a minimizar o tempo que demora a executar todas as tarefas. Estratégia LPT ( longest processing time first ) As tarefas são afectadas às máquinas por ordem decrescente do seu tempo de processamento As tarefas vão sendo afectadas às máquinas à medida que estas últimas ficam livres Para determinar a primeira máquina livre, usa-se uma fila de prioridade, ordenada segundo o instante em que as máquinas ficam livres A cada máquina retirada da fila é afectada a tarefa seguinte, e calculado o isntante em que a máquina estará de novo livre. A máquina é então inserida de novo na fila 13 Filas de prioridade: aplicação (usa a classe priority_queue STL) struct Maquina bool operator < (const Maquina & m) const return disp > m.disp; int ID, disp; struct Tarefa bool operator < (const Tarefa & t) const return duracao < t.duracao; int ID, duracao; void main() vector<tarefa> tarefas; le_tarefas(tarefas); int nmaq; cin >> nmaq; LPT(tarefas, nmaq); 14 7

Filas de prioridade: aplicação (usa a classe priority_queue STL) template <class T> void LPT(vector<T> & a, int nm) heapsort(a); priority_queue<maquina> h; Maquina m1; for ( int i = 1; i <= nm; i++ ) m1.disp = 0; m1.id = i; h.push(m1); for ( int i = a.size() - 1; i >= 0; i-- ) m1 = h.top(); h.pop(); cout << Tarefa << a[i].id << na máquina << m1.id << de << m1.disp << até << (m1.disp+a[i].duracao) << endl; m1.disp += a[i].duracao; h.push(m1); 15 8