A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Adriana Libório Fernandes Lins Arthur Cavalcanti Alem Átila Valgueiro Malta Moreira Flavio Juvenal da Silva Júnior Gustavo Cauê Silva."— Transcrição da apresentação:

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


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

Apresentações semelhantes


Anúncios Google