Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouNelson Carvalhal da Rocha Alterado mais de 8 anos atrás
1
if672.ufpe@gmail.com 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
2
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.
3
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.
4
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
5
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).
6
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.
7
Representação de Heaps Binários Diferentemente de árvores binárias de busca, heaps são implementados usando arrays. 89 921 22 2634 41 74 8 15 32 4 85 74328922411542193426885 23145678910111213 Filho esquerdo 2*i Filho direito 2*i +1 Pai |_(i)/2_|
8
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.
9
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
10
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
11
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); }
12
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); }
13
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); }
14
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); }
15
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.
16
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); }
17
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); }
18
8 921 74 4134 26 22 89 15 32 4 223287426154219344189 Construção de Heaps 231456789101112 Heapify 6
19
8 921 74 4134 26 22 15 89 32 4 223287426894219344115 Construção de Heaps Heapify 6 231456789101112
20
8 921 74 4134 26 22 15 89 32 4 223287426894219344115 Construção de Heaps Heapify 5 231456789101112
21
8 921 74 2634 41 22 15 89 32 4 223287441894219342615 Construção de Heaps Heapify 5 231456789101112
22
8 921 74 2634 41 22 15 89 32 4 223287441894219342615 Construção de Heaps Heapify 4 231456789101112
23
8 921 74 2634 41 22 15 89 32 4 223287441894219342615 Construção de Heaps Heapify 4 231456789101112
24
8 921 74 2634 41 22 15 89 32 4 223287441894219342615 Construção de Heaps Heapify 3 231456789101112
25
8 921 74 2634 41 22 15 32 89 4 228987441324219342615 Construção de Heaps Heapify 3 231456789101112
26
8 921 74 2634 41 22 15 32 89 4 228987441324219342615 Construção de Heaps Heapify 3 231456789101112
27
8 921 74 2634 41 22 15 32 89 4 228987441324219342615 Construção de Heaps Heapify 2 231456789101112
28
8 921 22 2634 41 74 15 32 89 4 74 82241324219342615 Construção de Heaps Heapify 2 231456789101112
29
8 921 22 2634 41 74 15 32 89 4 748982241324219342615 Construção de Heaps Heapify 2 231456789101112
30
8 921 22 2634 41 74 15 32 89 4 748982241324219342615 Construção de Heaps Heapify 1 231456789101112
31
89 921 22 2634 41 74 15 32 8 4 748892241324219342615 Construção de Heaps Heapify 1 231456789101112
32
89 921 22 2634 41 74 15 8 32 4 743289224184219342615 Construção de Heaps Heapify 1 231456789101112
33
89 921 22 2634 41 74 8 15 32 4 743289224115421934268 Construção de Heaps Heapify 1 231456789101112
34
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.
35
89 921 22 2634 41 74 8 15 32 4 85 74328922411542193426885 Inserção no Heap 231456789101112 13
36
89 921 22 2634 41 74 8 85 32 4 15 74328922418542193426815 Inserção no Heap 13 231456789101112
37
89 921 22 2634 41 74 8 32 85 4 15 74858922413242193426815 Inserção no Heap 13 231456789101112
38
89 921 22 2634 41 74 8 32 85 4 15 74858922413242193426815 Inserção no Heap 13 231456789101112
39
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.
40
15 921 22 2634 41 74 8 32 85 4 89 748515224132421934268 Remoção no Heap 13 231456789101112
41
85 921 22 2634 41 74 8 32 15 4 89 741585224132421934268 Remoção no Heap 13 231456789101112
42
85 921 22 2634 41 74 8 15 32 4 89 743285224115421934268 Remoção no Heap 13 231456789101112
43
85 921 22 2634 41 74 8 15 32 4 89 743285224115421934268 Remoção no Heap 13 231456789101112
44
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 if672.ufpe@gmail.com
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.