Árvores - dainfdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da...

29
Árvores

Upload: others

Post on 13-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

S

Árvores

Page 2: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Árvores Auto-ajustadas

S  As árvores binárias de pesquisa são projetadas para um acesso rápido à informação.

S  A velocidade das operações de inserção, remoção e busca realizadas sobre as árvores é mais importante que sua forma.

S  O desempenho pode ser melhorado balanceando-se a árvore, mas esse não é o único método que pode ser usado.

S  Nem todos os elementos são usados com a mesma freqüência.

S  Se um elemento é constantemente acessado, faz diferença se esse elemento está próximo a uma folha ou está próximo a raiz.

S  A estratégia nas árvores auto-ajustadas é reestruturar as árvores movendo para cima os elementos usados freqüentemente.

S  As árvores auto-ajustadas são árvores de prioridades.

Page 3: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Árvores Auto-ajustadas

S  Nas árvores de prioridades a freqüência de acesso aos nós pode ser determinada de diferentes modos: S  Uma forma pode ser a utilização de um campo contador

S  que registra o número de vezes que o elemento foi usado para qualquer operação.

S  A árvore pode ser varrida para mover os elementos mais acessados em direção à raiz.

S  Outra abordagem mais simples assume que um elemento acessado tem uma boa chance de ser acessado uma segunda vez, assim ele é movido para cima na árvore.

Page 4: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Árvores Auto-ajustadas

S  A estratégia nas árvores auto-ajustadas é reestruturar as árvores movendo para cima os elementos usados freqüentemente.

S  Nenhuma reestruturação é realizada para os novos elementos.

S  Essa estratégia não funciona muito bem para árvores alongadas.

S  Nesse caso a árvore melhora vagarosamente, no entanto o custo de mover um nó para a raiz se aproxima do custo de acessar o nó numa árvore ótima por 3 vezes.

S  O esquema mostra a subida do elemento T para a raiz e em seguida do elemento S.

Page 5: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Árvores Auto-ajustadas P

Q

R

S

T

A

F

E

D

C

B

P

Q

R

T

A

F

E

D

S

B C

P

Q

T

A

F

E

R

S

B

D

C

P

T

A

F

Q

R

S

B

D

E

C

T

A P

Q

R

S

B

D

E

F

B

C

T

A P

Q

S

R

E

F

D C

T

A P

S

B

R

Q

F

D

E

C

T

A S

B

R

Q

P

D

E

F

C

S

T

B

R

Q

P

D

E

F A

Page 6: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Um tipo particular de árvores binárias são as Heaps.

S  No caso de heaps a propriedade a ser mantida não se resume ao balanceamento da árvore, mas também às seguintes definições: S  ser uma árvore completa

S  manter uma propriedade de ordem

Page 7: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Uma árvore completa é definida como sendo: S  uma árvore cheia,

S  elementos faltantes aparecem apenas no nível mais baixo e, sempre, na subárvore da direita.

Árvores completas Árvores incompletas

Page 8: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Para manter o heap ordenado e facilitar a localização do elemento de maior prioridade, o mesmo é colocado no nó raiz.

S  Com isso, a prioridade de um nó X qualquer será, sempre, maior ou igual a de seus dependentes.

S  A raiz é sempre o maior (ou o menor) elemento do heap.

S  Existem dois tipos de heaps: S  Heaps de máximo (max heap):

S  O valor de todos os nós são menores que os de seus respectivos pais;

S  Heaps de mínimo (min heap):

S  O valor de todos os nós são maiores que os de seus respectivos pais.

S  Em uma heap de máximo, o maior valor do conjunto está na raiz da árvore.

S  Na heap de mínimo a raiz armazena o menor valor existente.

Page 9: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Uma heap pode ser implementada como uma matriz unidimensional. S  O pai do elemento da posição i é a

parte inteira do elemento (i/2);

S  O filho esquerdo do elemento da posição i é o da posição (2 * i) ;

S  O filho direito do elemento da posição i é o da posição (2 * i)+1.

16

9 3

10

2 4 1

8 7

14

16 14 10 8 7 9 3 2 4 1

1 2 3 4 6 5 7 8 10 9

Page 10: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Para armazenar uma árvore de altura h precisamos de um array de 2h – 1 (número de nós de uma árvore cheia de altura h).

S  As operações mais comuns em heaps são: S  Inserção S  Remoção

S  Quando um elemento é adicionado a uma heap, pode ser adicionado de baixo para cima ou de cima para baixo.

S  Quando o elemento é removido, em geral remove-se o elemento mais à direita do nível da base.

Page 11: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Dois procedimentos de migração do nó são utilizados nas operações de inserção e remoção : “Subir” e “Descer”: S  Subir (i, n, H) migra o nó i para cima na heap H S  Descer (i,n,H) migra o nó i para baixo na heap H

S  (sendo n o número total de nós da árvore/heap)

S  Para inserir, pode-se colocar o novo valor na posição n+1 da heap e chamar Subir.

S  Para remover pode-se substituir a raiz pela folha da posição n (H [1]) por H (n) e chamar Descer.

Page 12: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

Subir (i, n, H [1 .. n]) { se i > 1 e H [Pai(i)] < H [i] então { H[i], H[Pai(i)] ← H[Pai(i)], H[i] Subir (Pai(i),n,H) } } Descer (i, n, H [1 .. n]) { se Dir(i) ≤ n e H [Dir(i)] > H [Esq(i)] então filho ← Dir(i) senão filho ← Esq(i) se filho ≤ n e H [filho] > H [i] então { H [i], H [filho] ← H [filho], H [i] Descer (filho, n, H) } }

Page 13: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Criação de heaps: S  inserção de elementos:

S  método de cima para baixo.

0 1 2 3 4 5 6 18 20 15 28 11 22 26

18

18

20

18 15

20

18

15 20 28

11 28 28 15

20

18

20 15

28

18

18

15 20

28

11 22 18

22 20

28

11 15 18

22 20

28

11 15 26 18

26 20

28

11 15 22

Page 14: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Criação de heaps: inserção de elementos: método de baixo para cima.

BuildHeap(data[ ])

for (i= n/2-1; i>=0; i--)

Descer (i,n-1,data) S  Quando um elemento é analisado, suas duas subárvores devem

ser convertidas em heaps.

S  Quando a propriedade de heap é desfeita, ela é reestabelecida movendo para baixo o elemento analisado.

Page 15: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Criação de heaps: S  inserção de elementos:

S  método de baixo para cima.

0 1 2 3 4 5 6 7 8 2 8 6 1 10 15 3 12 11

8

2

10 1

6

3 15

11 12

data

Page 16: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Criação de heaps: S  inserção de elementos:

S  método de baixo para cima.

S  Começa-se a partir do último nó não-folha que é dado por n/2-1, n é o tamanho da matriz. S  Último nó não-folha → data[3] =

1

S  Se o último nó não-folha é menor que um de seus filhos ele é trocado com seu maior filho.

0 1 2 3 4 5 6 7 8 2 8 6 1 10 15 3 12 11

data

1

11 12

12

11 1

Page 17: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Criação de heaps: S  inserção de elementos:

S  método de baixo para cima.

S  Considera-se o elemento n/

2-2 → data[2] = 6

0 1 2 3 4 5 6 7 8 2 8 6 12 10 15 3 1 11

data

6

3 15

15

3 6 12

11 1 12

11 1

Page 18: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Criação de heaps: S  inserção de elementos:

S  método de baixo para cima.

S  Considera-se o elemento n/

2-3 → data[1] = 8

0 1 2 3 4 5 6 7 8 2 8 15 12 10 6 3 1 11

data

12

11 1

15

3 6

8

10 8

11 1

12

10 11

8 1

15

3 6

12

10

Page 19: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Criação de heaps: S  inserção de elementos:

S  método de baixo para cima.

S  Considera-se o elemento n/2-4

→ data[0] = 2

0 1 2 3 4 5 6 7 8 2 12 15 11 10 6 3 1 8

data

11

8 1

15

3 6

12

10

2

11

8 1

2

3 6

12

10

15

Page 20: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Criação de heaps: S  inserção de elementos:

S  método de baixo para cima.

0 1 2 3 4 5 6 7 8 15 12 6 11 10 2 3 1 8

data

11

8 1

6

3 2

12

10

15

Page 21: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Heapify S  Reorganiza heaps

S  Supõe que as árvores binárias correspondentes a Esquerda(i) e Direita(i) são heaps, mas A[i] pode ser menor que seus filhos.

S  Exemplo:

16

9 3

10

2 1 8

7 14

4

16

9 3

10

2 1 8

7

14

4

16

9 3

10

2 1

8 7

14

4

Page 22: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Heaps

S  Algoritmo Heapify(A, i)

Esquerdo <- Filho Esquerdo(i)

Direito <- Filho Direito(i) Se Esquerdo > i (pai)

Maior <- Esquerdo Senão

Maior <- i Se Direito > que Maior

Maior <- Direito Se Maior != i(pai)

troca(A,i,Maior) Heapify Maximo(A, Maior)

Page 23: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Filas de prioridade

S  Em muitas aplicações, dados de uma coleção são acessados por ordem de prioridade.

S  A prioridade associada a um dado pode ser qualquer parâmetro específico como: tempo, custo, etc.

S  Numa fila de prioridade atribui-se um valor de prioridade a cada elemento e as operações de inserção e remoção passam a ser feitas em função dessa prioridade.

Page 24: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Filas de prioridade

S  Aplicações: S  Escalonamento de processos em um sistema multi-programável.

S  A fila de prioridade máxima mantém o controle dos processos a serem executados e de suas prioridades relativas.

S  Quando um processo termina ou é interrompido, o processo de prioridade mais alta é selecionado dentre os processos pendentes.

S  As chaves podem também representar o tempo em que eventos devem ocorrer.

S  Métodos numéricos iterativos são baseados na seleção repetida de um item com maior (menor) valor.

S  Sistemas de gerência de memória usam a técnica de substituir a página menos utilizada na memória principal por uma nova página.

Page 25: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Filas de prioridade

S  Nesse contexto, as operações que se costuma querer implementar eficientemente são: S  Seleção do elemento com maior (ou menor) prioridade S  Remoção do elemento de maior (ou menor) prioridade

S  Inserção de um novo elemento

S  As heaps são estruturas próprias para implementação de listas de prioridade.

S  A raiz de uma heap contém a chave (prioridade) de menor ou maior valor.

Page 26: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Filas de prioridade

S  Inserção de um novo elemento S  Para colocar um elemento na fila, o elemento é adicionado no

fim da heap como a última folha.

S  A restauração da propriedade de heap é obtida movendo-se a última folha em direção a raiz segundo o seguinte algoritmo: heapEnqueue(el)

colocar el no final da heap;

while el não é a raiz e el > ascendente(el);

troca (el, ascendente);

Page 27: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Filas de prioridade

S  Inserção de um novo elemento

8

20

10

2 5 7

6 13

15

14 8

20

10

2 5

7

6

13

15

14 16

8

20

10

2 5

16

6

13

15

14 7

8

20

16

2 5

10

6

13

15

14 7

Page 28: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Filas de prioridade

S  Remoção de um elemento S  Para remover um elemento da heap, deve-se remover a raiz da heap, pois

esse é o elemento com a maior prioridade. S  Coloca-se a última folha no lugar da raiz e restaura-se a propriedade de

heap movendo-se da raiz para baixo na árvore: heapDequeue(el) Extrai-se a raiz; Coloca-se a última folha (p) em seu lugar; Remove-se a última folha; while p não é folha e p < um dos descendentes troque p com o maior ascendente

Page 29: Árvores - DAINFdainf.ct.utfpr.edu.br/~maurofonseca/lib/exe/fetch... · resume ao balanceamento da árvore, mas também às seguintes definições: ! ser uma árvore completa ! manter

Filas de prioridade

S  Remoção de um elemento

8

20

10

2 5 7

6 13

15

14 8

6

10

2 5

7

20

13

15

14

8

15

10

2 5

7 13

6

14 8

15

16

2 5

10

6

13

14

6 7