34
1 Árvores Balanceadas (AVL)

Aula8 Trees AVL Splay

Embed Size (px)

Citation preview

Page 1: Aula8 Trees AVL Splay

1

Árvores Balanceadas (AVL)

Page 2: Aula8 Trees AVL Splay

2

Roteiro

Contextualização

Árvores Balanceadas (AVL)

Operações de Balanceamento

Page 3: Aula8 Trees AVL Splay

3

Roteiro

Contextualização

Árvores Balanceadas (AVL)

Operações de Balanceamento

Page 4: Aula8 Trees AVL Splay

4

Contextualização

As ABP estudadas têm uma séria desvantagem que podeafetar o tempo necessário para recuperar um itemarmazenado.

A desvantagem é que o desempenho da ABP depende da

ordem em que os elementos são inseridos.

1, 2, 3, 4, 5, 6, 7 4, 6, 2, 5, 1, 7, 3

1

2

3

4

5

6

7

2

4

6

1 3 5 7

Page 5: Aula8 Trees AVL Splay

5

Contextualização

Idealmente, deseja-se que a árvore estejabalanceada, para qualquer nó p da árvore.

Como saber se a árvore está balanceada ?

Para cada nó p da árvore a altura da sua sae éaproximadamente igual à altura da sua sad.

Page 6: Aula8 Trees AVL Splay

6

Roteiro

Contextualização

Árvores Balanceadas (AVL)

Operações de Balanceamento

Page 7: Aula8 Trees AVL Splay

7

Árvores Balanceadas (AVL)

O nome AVL vem de seus criadores Adelson Velsky e Landis(1962).

Uma árvore binária de pesquisa T é denominada AVL se:

Para todos nós de T, as alturas de suas duas sub-árvoresdiferem no máximo de uma unidade.

Operações de consulta, inserção e remoção de nós tem custoO(log2n).

130

100 150

120 20080

110

120

100

11080

130

200

150

Page 8: Aula8 Trees AVL Splay

8

Como reconhecer uma árvore desbalanceada? (1/2)

Como saber se a árvore está desbalanceada ?

Verificando se existe algum nodo “desregulado”.

Como saber se um nodo está desregulado ?

Subtraindo-se as alturas das suas sub-árvores.

Por questões de eficiência, estas diferenças sãopré-calculadas e armazenadas nos nóscorrespondentes, sendo atualizadas durante asoperações.

Page 9: Aula8 Trees AVL Splay

9

Como reconhecer uma árvore desbalanceada? (2/2)

Possíveis valores de diferença para cada nó em umaárvore balanceada: -1, 0, 1.

Fator de Balanceamento (FB) de cada nó da árvore

FB(p) = h(sad(p)) – h(sae(p))

Page 10: Aula8 Trees AVL Splay

10

Exemplos de cálculos de FB

1

2

3

4

5

6

7

+6

+5

+4

+3

+2

+1

0

Inserção: 1, 2, 3, 4, 5, 6 e 7

2

4

6

1 3 5 7

0 0

0

0 0

00

Inserção: 4, 2, 3, 6, 5, 1 e 7

4

1 6

3

2

5 7

-1

0

00

+2

-1

0

Inserção: 4, 1, 3, 6, 5, 2 e 7

Page 11: Aula8 Trees AVL Splay

11

Operação: Inserção

2

4

6

1 3 5 7

0 0

0

0 0

00

Op. de balanceamento

4

1 6

3

2

5 7

0

00

+2

-1

0

Inserção: 4, 6, 1, 7, 5, 3 e 2.-1

Page 12: Aula8 Trees AVL Splay

12

Operação: Remoção

4

6

7

+2

0

+1Remover nó 2

4

6

7

0

0

0

Op. de balanceamento4

2 6

7

+1

0

+10

Inserção: 4, 6, 2 e 7.

Page 13: Aula8 Trees AVL Splay

13

Roteiro

Contextualização

Árvores Balanceadas (AVL)

Operações de Balanceamento

Page 14: Aula8 Trees AVL Splay

14

Operações de Inserção e Remoção

A inserção ou remoção de um nó em uma árvore AVLpode ou não provocar seu desbalanceamento.

Se a árvore AVL ficar desbalanceada, a restauraçãodo seu balanceamento é realizado através deROTAÇÕES.

Page 15: Aula8 Trees AVL Splay

15

Tipos de Rotações

Rotação Simples:

Rotação a Esquerda

Rotação a Direita

Rotação Dupla:

Rotação a Esquerda

Rotação a Direita

Page 16: Aula8 Trees AVL Splay

Dicas:

a) Para identificar quando uma rotação é simplesou dupla deve-se observar os sinais do Fb:

• Sinal for igual, a rotação é simples• Sinal for diferente a rotação é dupla

b) Se Fb for positivo (+) a rotação para à esquerda

c) Se Fb for negativa (-) a rotação para à direita

Rotação:

Page 17: Aula8 Trees AVL Splay

17

Exemplos de Rotação Simples

Suponha que nós queiramos inserir o nó 3 na árvore inicial abaixo

3

08

4 10

2 6

0

0 0

-18

4 10

2 6

3

-1 0

+1 0

-2

0

Rotação a direita (nó 8)

0

0

0 0

4

2 8

1063

+1 0

A inserção do nó 3 produziu um desbalanço no nó 8 verificado pelo FB = -2 neste nó. Neste caso, como os sinais dos FB são os mesmos (nó 8 com FB = -2 e nó 4 com FB = -1) significa que precisamos fazer apenas uma ROTAÇÃO SIMPLES.

Page 18: Aula8 Trees AVL Splay

18

Exemplo de Rotação Dupla (1/2)

Suponha que queiramos inserir o nó 5 na árvore abaixo

08

4 10

2 6

0

0 0

-1

0

8

4 10

2 6

5

0

0

-1

+1

-2

(a)8

6 10

4

52

0

0

0

0-2

-2

Observe que o nó 8 tem FB = -2 e tem um filho com FB = +1 (sinais opostos).Neste caso, o balanceamento é alcançado com duas rotações. Primeiro: (a)rotação simples sobre o nó 4 (com FB = +1) para a esquerda.

Page 19: Aula8 Trees AVL Splay

19

Exemplo de Rotação Dupla (2/2)

8

6 10

4

52

0

0

0

0-2

-2

Logo após da rotação a esquerda: (b) rotaciona-se o nó 8 (FB = -2) na direção oposta (direita neste caso).

(b)6

4 8

2 105

0

0

0

00

+1

Page 20: Aula8 Trees AVL Splay

20

Pseudo-Código: Rotações Simples

Rotação Simples a Esquerdap aponta para o nó desbalanceado

q = right(p);

hold = left(q);

left(q) = p;

right(p) = hold;

p = q;

Rotação Simples a Direitap aponta para o nó desbalanceado

q = left(p);

hold = right(q);

right(q) = p;

left(p) = hold;p = q;

10

12

157

30

21

+2

0

+10

+10

10 15 12 7 21 30

2

10

1

154

7

0

0

0

-1

-1

-210 15 4 2 1 7

Page 21: Aula8 Trees AVL Splay

21

Conclusões

Balanceamento de árvores busca minimizar onúmero médio de comparações necessárias paralocalizar qualquer dado.

Operações de inserção e remoção de nós tendema tornar as árvores desbalanceadas.

Há um custo extra de processamento.

Compensado quando os dados armazenadosprecisam ser recuperados muitas vezes.

Page 22: Aula8 Trees AVL Splay

22

AVL Tree Applet

http://webpages.ull.es/users/jriera/Docencia/AVL/AVL%20tree%20applet.htm

Page 23: Aula8 Trees AVL Splay

Créditos

23

Prof. Alexandre Parra Carneiro da Silva

[email protected]

Page 24: Aula8 Trees AVL Splay

Árvore Splay

É uma árvore binária de pesquisa (BST)

É uma árvore auto-equilibrada.

Em qualquer operação (pesquisa, inserção, remoção) a árvore faz SPLAY.

Basicamente fazer SPLAY, é trazer um elemento x para a raiz da árvore (BTT- Bring To Top), utilizando sucessivas rotações e tantas quanto necessárias, chamadas ZIG, ZIGZIG e ZIGZAG.

Page 25: Aula8 Trees AVL Splay

Árvore Splay

Lema: “Tornar mais acessível o que é mais usado”

Ajusta a estrutura da árvore à freqüência de acesso aos dados

Junto à raiz estão os elementos

mais usados

mais recentes

Os mais inativos ficam mais “longe” da raiz

Cada vez que um elemento é pesquisado o nó respectivo é puxado para a raiz usando rotações duplas AVL

Page 26: Aula8 Trees AVL Splay

Exemplo de Uso

Consultas bancárias

Ao fazer uma consulta, o registro de um cliente será levado para o topo da árvore, diminuindo o tempo de acesso para as próximas consultas. Assim, clientes que fazem consultas freqüentemente terão acesso mais rápido. Os registros de clientes que não utilizam estes serviços, por sua vez, ficarão nos níveis mais inferiores da árvore.

Page 27: Aula8 Trees AVL Splay

Árvore Splay: zig e zag

Page 28: Aula8 Trees AVL Splay

Árvore Splay: zig-zig

Page 29: Aula8 Trees AVL Splay

Árvore Splay: zig-zag

Page 30: Aula8 Trees AVL Splay

Algoritmo de Pesquisa(x, A)

Início

Faz percurso BST até encontrar.

Se existe o elemento x na árvore A

Faz SPLAY do elemento x

Senão

Faz SPLAY do sucessor esquerdo mais próximo de x

FimExemplo de pesquisa(9, A):

1) Pesquisa tipo BST até encontrar, existe então, faz SPLAY do x (neste caso 9).Caso não existisse faria SPLAY do 8, que é o elemento menor mais próximo de 9.2) Neste caso para fazer SPLAY é utilizado o ZIGZAG(x).3) Árvore final com o x na raiz.

Page 31: Aula8 Trees AVL Splay

Algoritmo de Inserção(A, x)

Início

Faz SPLAY do elemento x .

Como não existe, o elemento menor mais próximo de x fica na raiz

Agora é só inserir x, que passa a ser a raiz da árvore

FimExemplo de inserção(8, A):

1) SPLAY(8)

2) 7 vai para a raiz

3) Inserir 8, 7 é o seu filho esquerdo,e 10 o seu filho direito.

Page 32: Aula8 Trees AVL Splay

Algoritmo de Remoção(A, x)

InícioSe existe o elemento x na árvore A.

Faz SPLAY do elemento x.Faz SPLAY do elemento x, na sua subárvore esquerda.Traz o elemento menor mais próximo de x para a raiz.Remove o x.

SenãoFaz SPLAY do elemento menor mais próximo de x.

Fim

Exemplo de remoção(12, A):

1) Pesquisa tipo BST

2) SPLAY (12,A)

3) SPLAY (12,A') onde A' é a subárvore esquerda do 12, assim temos a certeza que o 12 não vai ter filho esquerdo.

4) Elemento menor mais próximo de 12 na raiz e sem filho esquerdo podemos então remover.

5) Elimina-se o 12 e liga-se o pai de x (12) com seu filho direito (15)

Page 33: Aula8 Trees AVL Splay

Conclusão

Árvores Splay podem ficar desequilibradas mas garantem uma complexidade O(log n) ao longo do

tempo de utilização (complexidade amortizada)

Ajusta a árvore à freqüência de acesso aos dados Junto à raiz estão os elementos

mais usados mais recentes os mais inativos ficam mais longe da raiz

Page 34: Aula8 Trees AVL Splay

Referências

Bibliografia:Drozdek, Adam. Estrutura de Dados e Algoritmos em C++ (Árvores Auto-

Ajustadas)

Sites:http://www.cs.nyu.edu/algvis/java/SplayTree.htmlhttp://w3.ualg.pt/~hshah/ped/Aula%2011/A11/aula11.htmlhttp://inf.unisinos.br/~ari/estrut/splay.pdfhttp://dct.ual.pt/historial/2004_05/aed2/teoricas/Semana6.pdf

Demonstrações:http://webpages.ull.es/users/jriera/Docencia/AVL/AVL%20tree%20app

let.htm

http://www.ibr.cs.tu-bs.de/courses/ss98/audii/applets/BST/SplayTree-Example.html