![Page 1: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/1.jpg)
29.1
Aula 29: Manipulação delistas de prioridades
Remoção em listas de prioridades
Inserção em listas de prioridades
Construção de listas de prioridades e ordenação
![Page 2: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/2.jpg)
29.2
Operações básicas
Descrever métodos para as operações de
inserção
remoção
construção
em listas de prioridades
![Page 3: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/3.jpg)
29.3
Inserção em lista de prioridades
Inserir v, ao final do heap. Isto é, na posição n+1.
Seja v o nó a ser inserido, com uma dadaprioridade, num heap com n nós.
Na árvore completa T, equivalente ao heap, casoT seja cheia, o nó v será incluído como o filhomais à esquerda da folha mais à esquerda de T.Caso contrário, v se transformará em uma novafolha, imediatamente à direita da folha mais àdireita de T.
![Page 4: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/4.jpg)
29.4
Inserção em lista de prioridades
s1 sn
1 n
s1 sn sn+1
1 n n+1
v = sn+1
cheia
v
![Page 5: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/5.jpg)
29.5
Inserção em lista de prioridades
ou
![Page 6: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/6.jpg)
29.6
Inserção e aumentode prioridades
Após a inserção de v na posição n+1, é necessário verificar se a condição das prioridades do heap continua válida.
Em caso negativo, é necessário efetuar umareordenação.
Para tal, basta supor que o elemento n+1 do heapteve sua prioridade aumentada. Nesse caso, asolução é utilizar o procedimento de aumento deprioridade.
![Page 7: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/7.jpg)
29.7
Inserção e aumentode prioridades
Exemplo:
Inserir nó com prioridade 73
95
60 78
39 28 66 70
33
![Page 8: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/8.jpg)
29.8
Inserção e aumentode prioridades
95
60 78
39 28 66 70
33 73
95
60 78
73 28 66 70
33 39
![Page 9: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/9.jpg)
29.9
Inserção e aumentode prioridades
95
73 78
60 28 66 70
33 39
![Page 10: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/10.jpg)
29.10
Algoritmo de inserção
Algoritmo: inserção em uma lista de prioridades
se n < M então
T [n+1] := novo n := n+1 subir (n)senão overflow
![Page 11: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/11.jpg)
29.11
Algoritmo de inserção
M é o tamanho total da memória disponível
O heap está armazenado na tabela T
A variável novo representa o nó a ser inserido
Complexidade: O (log n)
![Page 12: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/12.jpg)
29.12
Algoritmo de inserção
Inserir um novo nó, com prioridade igual a 22no heap
33 32 28 31 29 26 25 30 27
Exercício
Tempo: 1 minuto
![Page 13: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/13.jpg)
29.13
Algoritmo de inserção
Solução
33
32 28
31 29 26 25
30 27
33
32 28
31 29 26 25
30 27 22
![Page 14: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/14.jpg)
29.14
Remoção em listasde prioridades
Remover o nó de maior prioridade, isto é, oprimeiro nó do heap.
Após a remoção, mover o último nó para aposição 1. A lista torna-se de tamanho n-1.
s1 sn
1 n
s2 sn-1
2 n-1
sn
1 n-1 n
s2 sn-1
2
sn sn-1
1 n-1 n
s2
2
![Page 15: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/15.jpg)
29.15
Remoção e diminuiçãode prioridades
Após a remoção do nó de prioridade maior e amudança do último elemento para a posição 1, énecessário verificar se a condição das prioridadesdos heaps continua válida.
Em caso negativo, é necessário efetuar umareordenação.
Para tal, basta supor que o elemento 1 do heapteve a sua prioridade diminuida. Nesse caso, asolução é utilizar o procedimento de diminuiçãode prioridade.
![Page 16: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/16.jpg)
29.16
Remoção e diminuiçãode prioridades
Exemplo
Remover elemento demaior prioridade
95
73 78
60 28 66 70
33 39
![Page 17: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/17.jpg)
29.17
Remoção e diminuiçãode prioridades
78
73 39
60 28 66 70
33
39
73 78
60 28 66 70
33
![Page 18: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/18.jpg)
29.18
Remoção e diminuiçãode prioridades
78
73 70
60 28 66 39
33
![Page 19: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/19.jpg)
29.19
Algoritmo de remoção
Algoritmo: remoção do elemento de maiorprioridade
O heap está armazenado na tabela T.
O procedimento agir consiste na utilização doelemento de maior prioridade, de acordo com aaplicação.
Complexidade: O (log n)
se n ≠0 então agir (T[1]) T [1] := T [n] n := n-1 descer (1, n)senão underflow
![Page 20: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/20.jpg)
29.20
Algoritmo de remoção
Remover o elemento de maior prioridade do heap
33 32 28 31 29 26 25 30 27
Exercício
Tempo: 2 minutos
![Page 21: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/21.jpg)
29.21
Algoritmo de remoção
Solução
33
32 28
31 29 26 25
30 27
27
32 28
31 29 26 25
30
![Page 22: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/22.jpg)
29.22
Algoritmo de remoção
32
27 28
31 29 26 25
30
32
31 28
27 29 26 25
30
![Page 23: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/23.jpg)
29.23
Algoritmo de remoção
32
31 28
30 29 26 25
27
![Page 24: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/24.jpg)
29.24
Construção de um heap
Objetivo: Descrever métodos para construirheaps.
Solução 1:
Uma lista ordenada constitui um heap.Logo, um heap pode ser construído, simplesmente,ordenando-se uma lista.
Complexidade: O (n log n)
![Page 25: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/25.jpg)
29.25
Construção de um heap
Solução 2:
Seja S uma lista dada, para a qual se desejaconstruir um heap. Para que S seja um heap,basta corrigir a posição de seus nós, isto é, consi-derar cada um de seus nós, como sendo uma novainserção.
Algoritmo: Construção de um heappara i = 2, ..., n faça subir (i)
Complexidade: O (n log n)
![Page 26: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/26.jpg)
29.26
Construção de um heap
Seja uma lista dada pelas prioridades a seguir:
18 25 41 34 14 10 52 50 48
Construir um heap para esta lista, utilizando o algoritmo da solução 2.
Exercício
Tempo: 8 minutos
![Page 27: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/27.jpg)
29.27
Construção de um heap
Solução
i 1 2 3 4 5 6 7 8 9 18 25 41 34 14 10 52 50 48
i=1
18 18
25
25
18
i=2
25
18 41
41
18 25
i=3
![Page 28: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/28.jpg)
29.28
Construção de um heap
41
18 25
34
41
34 25
18
i=4
41
34 25
18 14
i=5
41
34 25
18 14 10
i=6
![Page 29: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/29.jpg)
29.29
Construção de um heap
41
34 25
18 14 10 52
52
34 41
18 14 10 25
i=7
52
34 41
18 14 10 25
50i=8
![Page 30: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/30.jpg)
29.30
Construção de um heap
i=9
52
50 41
34 14 10 25
18
52
50 41
34 14 10 25
18 48
52
50 41
48 14 10 25
18 34
![Page 31: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/31.jpg)
29.31
Construção de um heap
Solução 3:
A propriedade das prioridades dos heaps ésempre, trivialmente, satisfeita pelas folhas.No caso, pelos nós alocados a partir da posição n/2 + 1.
Assim, na construção dos heaps, os únicos nós relevantes, sob o ponto de vista de análise, sãoos nós interiores. Estes devem ter suasprioridades verificadas e acertadas, a partirdos níveis mais baixos da árvore.
![Page 32: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/32.jpg)
29.32
Construção de um heap
Algoritmo: Construção de heaps
Complexidade: O (n)
procedimento arranjar (n) para i = n/2 , ..., 1 faça descer (i, n)
![Page 33: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/33.jpg)
29.33
Aplicação: ordenação por heaps
Construir um heap para T, tomando-se a priori-dade igual à chave de ordenação desejada.
Seja T uma lista que se deseja ordenar.
Iterativamente, remover o elemento de maior prioridade e corrigir o heap.
O método acima produzirá a ordenação da listaem ordem não decrescente de suas chaves deordenação.
![Page 34: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/34.jpg)
29.34
Algoritmo de ordenação
Algoritmo: Ordenação de uma lista T
arranjar ( n )m := nenquanto m > 1 faça T [1] ⇔ T [m] m := m - 1 descer ( 1, m )
Complexidade: O (n log n)
A notação T [1] ⇔ T [m] significa a troca deposição em T, entre T [1] e T [m].
O procedimento arranjar (n) constrói um heappara T, segundo a solução 3.
![Page 35: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/35.jpg)
29.35
Algoritmo de ordenação
Exemplo
Seja a lista: 40 37 95 42 23 51 27
O método da ordenação por heaps, aplicado a estalista, corresponderá às seguintes operações.
![Page 36: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/36.jpg)
29.36
Algoritmo de ordenação
27
42 51
2337 9540
trocar(TB[1],TB[7]) m = 6
descer(1,6)
51
42 40
2337 9527
![Page 37: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/37.jpg)
29.37
Algoritmo de ordenação
trocar(TB[1],TB[6]) m = 5
descer(1,5)
27
42 40
2337 9551
42
37 40
2327 9551
![Page 38: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/38.jpg)
29.38
Algoritmo de ordenação
trocar(TB[1],TB[5]) m = 4
descer(1,4)
23
37 40
4227 9551
40
37 23
4227 9551
![Page 39: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/39.jpg)
29.39
Algoritmo de ordenação
trocar(TB[1],TB[4]) m = 3
descer(1,3)
27
37 23
4240 9551
37
27 23
4240 9551
![Page 40: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/40.jpg)
29.40
Algoritmo de ordenação
trocar(TB[1],TB[3]) m = 2
descer(1,2)
23
27 37
4240 9551
27
23 37
4240 9551
![Page 41: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/41.jpg)
29.41
Algoritmo de ordenação
trocar(TB[1],TB[2]) m = 1
descer(1,1)
23
27 37
4240 9551
23
27 37
4240 9551
![Page 42: Aula 29: Manipulação de listas de prioridadesfabio/Aula-heaps-2.pdf · Inserção em lista de prioridades Inserir v, ao final do heap. Isto é, na posição n+1. Seja v o nó a](https://reader033.vdocuments.com.br/reader033/viewer/2022050508/5f993f10697274611c340435/html5/thumbnails/42.jpg)
29.42
Algoritmo de ordenação
Exercício Final
Provar que o algoritmo da solução 3, para aconstrução de um heap, termina em O (n) passos.