Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva.

Slides:



Advertisements
Apresentações semelhantes
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,
Advertisements

Série de Exercícios.
Árvores.

David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
HeapSort Filas de Prioridade – Heap
Pesquisa em Memória Primária – Árvores de Busca
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
SEMINÁRIO DE ALGORITMOS
Classificação e Pesquisa de Dados
AED – Algoritmos e Estruturas de Dados
Métodos de Classificação por Seleção: HeapSort
Prof. Ernesto Lindstaedt
Algoritmos e Estruturas de Dados II
Pesquisa em Memória Primária
Árvores Binárias de Pesquisa
Heap Sort TPA – Prof. Mateus Costa
Algorítmos e estrutura de dados III Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Katia S. Guimarães Heaps Katia S. Guimarães
Listas de Prioridades Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade A prioridade associada a um dado pode ser qualquer.
NP-Completude Algoritmos e Estruturas de Dados – IF672
© Copyright 2007 Algoritmos e Estruturas de Dados - Todos os direitos reservados Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto.
Árvore Binária de Busca
Análise de Complexidade do Algoritmo de Dijkstra
Estruturas de Dados Aula 15: Árvores
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Revisão IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Allan Jefferson.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Conjuntos Algoritmos e Estruturas de Dados - IF672
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Grafos IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Adriana Libório.
Árvores AVL Algoritmos e Estruturas de Dados - IF672
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.
© Copyright 2007 Algoritmos e Estruturas de Dados - Todos os direitos reservados Estruturas de Dados Dinâmicas IF672 - Algoritmos e Estruturas de Dados.
© Copyright 2008 Algoritmos e Estruturas de Dados 1 IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Adriana Libório Fernandes Lins Arthur Cavalcanti.
IF672 cc Algoritmos e Estruturas de Dados
Heaps Katia S. Guimarães
Programação Dinâmica IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes.
Busca Sequencial Int pseq(int x, int n, int v[]){ for(i=0; i
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca em Grafos IF672 - Algoritmos e Estruturas de Dados CIn - UFPE ©
© Copyright 2007 Algoritmos e Estruturas de Dados - Todos os direitos reservados Ponteiros IF672 - Algoritmos e Estruturas de Dados CIn - UFPE Murilo Raphael.
Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo.
© Copyright 2003 Algoritmos e Estruturas de Dados - Todos os direitos reservados Busca Gulosa em Grafos IF672 - Algoritmos e Estruturas de Dados CIn -
Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva.
INE5408 Estruturas de Dados Aula 6b Listas Circulares.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Pilhas e Filas Cristiano Arbex Valle Vinicius Fernandes dos Santos
Matemática MDC e MMC.
Práticas Colaborativa de Programação Peterson Rodrigues Outubro de 2015.
Campus Pau dos Ferros Disciplina de Algoritmos Prof. Demétrios Coutinho INFORMÁTICA BÁSICA Algoritmos de Ordenação.
INE5408 Estruturas de Dados Introdução a Árvores - Conceitos - Árvores Binárias - Métodos e algoritmos de percurso - Métodos e algoritmos de balanceamento.
Pearson Education Sistemas Operacionais Modernos – 2ª Edição 1 Sistemas Operacionais FATEC-PB Professor: Gustavo Wagner
Método dos Elos – adequação de layout de processos
SISTEMAS OPERACIONAIS MEMÓRIA VIRTUAL. INTRODUÇÃO Memória Virtual é um técnica sofisticada e poderosa de gerenciamento de memória, onde a MP e a MS são.
Estruturas Lineares de Dados Revisão Wolley W. Silva.
CICLO BÁSICO GEOMETRIA OBJETIVOS Espera-se que o aluno:
INE5408 Estruturas de Dados Árvores Rubro- Características Algoritmos.
INE5408 Estruturas de Dados Estruturas de Dados básicas utilizando Vetores - Listas.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Listas Lineares Cristiano Arbex Valle Vinicius Fernandes dos Santos
Prof a Ana Carla Bittencourt Reis 1 Teoria das Filas.
1 Heap Sort Algoritmos e Estuturas de Dados Cátia Vaz.
INE5408 Estruturas de Dados Árvores Binárias de Busca - Características - Algoritmos - Inserção, deleção e pesquisa.
Administração de Banco de Dados José Antônio da Cunha.
Ordenação: Terminologia
Métodos de Pesquisa: Seqüencial e Binária
Capítulo VIII – Técnicas de Ordenação
Entrada e Saída de Dados com Arquivos – Java
Estruturas de Dados Dinâmicas
Árvores Binárias de Pesquisa e Balanceamento usando Árvores AVL
Ementário Noções de hardware e software. Conceitos Fundamentais.
Transcrição da apresentação:

Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva Botelho Matheus Bispo Arrais de Souza Murilo Raphael de Souza Lira Rafael Alberto Gomes Pereira Lima Rafael Brandão Lobo Rafael Loureiro de Carvalho Tiago Carneiro Pessoa Canto Vinicius Miranda Cesar

Fila Sugere espera por algum serviço Indica ordem de atendimento. Capta a noção de ordem de chegada. FIFO (First-In-First-Out). No processamento de tarefas, além da ordem de chegada é típico atender a prioridades.

Prioridade Sugere que o serviço não será fornecido com o critério FIFO. Representada por uma chave que possui um certo tipo como, por exemplo, um número inteiro. É um valor associado a cada elemento e é do tipo ordenado. A prioridade associada a um dado pode ser qualquer coisa: tempo, custo, etc.

Fila de Prioridade É uma fila de elementos onde o próximo elemento a sair é o que possui a maior prioridade. Objetos na fila tem um número indicativo da sua prioridade. Alguns usos: ° processamento de tarefas em sistemas operacionais ° sistemas de tempo compartilhado ° simulação baseada em eventos

Heaps Binários Estruturas próprias para implementação de listas de prioridades. Árvores binárias (não de busca) onde: O pai tem chave menor ou igual a chave dos seus filhos (Heap Mínimo). OU O pai tem chave maior ou igual a chave dos seus filhos (Heap Máximo).

Heaps Binários O menor elemento está na raiz. (Heap Mínimo) O maior elemento está na raiz. (Heap Máximo) Árvore binária semi-completa: Todos os níveis da árvore estão preenchidos, exceto o último. O último nível é preenchido da esquerda para a direita.

Representação de Heaps Binários Diferentemente de árvores binárias de busca, heaps são implementados usando arrays Filho esquerdo 2*i Filho direito 2*i +1 Pai |_(i)/2_|

Representação de Heaps Binários O elemento das filas de prioridades possui duas partes: O objeto que define a prioridade desse elemento, que é do tipo comparável. O objeto que representa o próprio elemento a ser guardado na fila com prioridade.

Representação de Heaps Binários class Element { Object key; Object value; } Chave que define prioridade Elemento struct Element { int key; int value; }; typedef struct Element no Chave que define prioridade Elemento

Operação sobre Heaps Binários Se um nó tem seu valor alterado, a manutenção da propriedade do Heap pode requerer que o nó migre na árvore para cima ou para baixo. Para cada uma dessas situações, utiliza-se um algoritmo de migração. Subir migra o nó i para cima do heap Descer migra o nó i para baixo do heap Heapify = Descer

Operação sobre Heaps Binários Subir (Heaps Máximos) Implementação mais simples: void subir (Element heap[], int ind, int tam) { if (ind>0 && ind<tam && heap[pai(ind)]<heap[ind]){ trocar (heap, ind, pai(ind)); subir (heap, pai(ind), tam); }

Operação sobre Heaps Binários Subir (Heaps Máximos) Implementação mais simples: void subir (no **heap, int ind, int tam) { if (ind > 0 && ind key key) { trocar (heap, ind, pai(ind)); subir (heap, pai(ind), tam); }

Operação sobre Heaps Binários Descer (Heaps Máximos) - Implementação mais simples: void descer (Element heap[], int ind, int tam) { int maior = 0; if (esq(ind)<tam){ if (dir(ind) heap[esq(ind)]) maior = dir(ind); else maior = esq(ind); } if (maior != 0 && heap[pai(ind)]<heap[maior]) { trocar (pai(ind), maior); descer (heap, maior, tam); }

Operação sobre Heaps Binários Descer (Heaps Máximos) - Implementação mais simples: void descer (no heap**, int ind, int tam) { int maior = 0; if (esq(ind) < tam){ if (dir(ind) heap[esq(ind)]) maior = dir(ind); else maior = esq(ind); } if (maior != 0 && heap[pai(ind)]<heap[maior]) { trocar (pai(ind), maior); descer (heap, maior, tam); }

Construção de Heaps O problema é: “Como fazer com que os elementos de um vetor desordenado passem a condição de heap?”. As folhas da árvore (elementos n/2 até n-1) não tem descendentes e portanto já estão ordenados em relação a eles. Se acertarmos todos os nós internos (elementos 0 até n/2-1) em relação aos seus descendentes (rotina descer), o heap estará pronto. É preciso trabalhar de trás para frente desde n/2-1 até 0 pois as propriedades do heap são observadas apenas nos níveis mais baixos.

Construção de Heaps ConstroiHeap Implementação mais simples: void constroiHeap (Element heap[], int tam) { for (int i=tam/2-1; i>=0; i--) { descer (heap, i, tam); }

Construção de Heaps ConstroiHeap Implementação mais simples: void constroiHeap (no heap**, int tam) { int i; for (i = tam/2; i>=1; i--) { descer (heap, i, tam); }

Construção de Heaps Heapify 6

Construção de Heaps Heapify

Construção de Heaps Heapify

Construção de Heaps Heapify

Construção de Heaps Heapify

Construção de Heaps Heapify

Construção de Heaps Heapify

Construção de Heaps Heapify

Construção de Heaps Heapify

Construção de Heaps Heapify

Construção de Heaps Heapify

Construção de Heaps Heapify

Construção de Heaps Heapify

Construção de Heaps Heapify

Construção de Heaps Heapify

Construção de Heaps Heapify

Inserção no Heap A inserção é feita na última posição do heap. Deve-se manter a propriedade do heap, ou seja, trocar o elemento inserido pelo pai se este for menor (em heaps mínimos) ou se este for maior (em heaps máximos). A inserção é bottom-up. Custo = O(log n), onde n é o número de elementos no heap.

Inserção no Heap

Inserção no Heap

Inserção no Heap

Inserção no Heap

Remoção no Heap A remoção é feita na primeira posição do heap. Coloca-se o último elemento na raiz. Deve-se manter a propriedade do heap, por isso, fazemos o heapify na raiz. A remoção é top-down. Custo = O(log n), onde n é o número de elementos no heap.

Remoção no Heap

Remoção no Heap

Remoção no Heap

Remoção no Heap

Sara Carvalho da Rocha Brito Tiago Carneiro Pessoa Canto Victor Barbosa de Oliveira Medeiros Vinícius Monteiro de Lira Átila Valgueiro Malta Moreira Juliana Medeiros de Lucena Rafael Alberto Gomes Pereira Lima Rafael Loureiro de Carvalho