Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A...

24
SCE 182 – Algoritmos e Estruturas de Dados I Árvores AVL (Balanceadas) Profª.Drª. Roseli Ap. Francelin Romero Fonte: Profa. Patrícia Marchetti Revisão: Gedson Faria SCC122 – Estruturas de Dados

Transcript of Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A...

Page 1: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

SCE 182 – Algoritmos e Estruturas de Dados I

Árvores AVL (Balanceadas )

Profª.Drª. Roseli Ap. Francelin Romero

Fonte: Profa. Patrícia Marchetti

Revisão: Gedson Faria

SCC122 – Estruturas de Dados

Page 2: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL – (Balanceadas) Definição

� A altura de uma árvore binária é o nível máximo de suas folhas (profundidade)

� Uma árvore binária balanceada (AVL) é uma árvore binária na qual as alturas das duas subárvores de todo nó nunca difere em mais de 1.

� O balanceamento de um NÓ é definido como a altura de sua subárvore esquerda menos a altura de sua subárvore direita.

Page 3: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL – (Balanceadas) Definição

� Cada nó numa árvore binária balanceada (AVL) tem balanceamento de 1, -1 ou 0.

� Se o valor do balanceamento do nó for diferente de 1, -1 e 0. Essa árvore não é balanceada (AVL).

� Observe o exemplo a seguir:

Page 4: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

1

0

0 0

Árvores AVL (Balanceada) – Exemplo

0

0

0

1 -1

00

0 0 0 0

0

-1

Page 5: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL – (Balanceadas)� Se a probabilidade de pesquisar um

dado for a mesma para todos os dados, uma árvore binária balanceada determinará a busca mais eficiente.

� Mas os algoritmos de inserção e remoção já vistos até agora não garantem que essa árvore permanecerá balanceada.

Page 6: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceada) – Exemplo

B B

B B B BU1 U2 U3 U4

U5 U6 U7 U8U9 U10

U11 U12

B – inserções

que mantêm

a árvore

balanceada.

Un – inserções não

balanceadas.

Page 7: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores Balanceadas - AVL� O desbalanceamento ocorre quando:

� O NÓ é inserido é um descendente esquerdo de um nó que tinha balanceamento de 1 (U1 até U8)

OU

� Se ele for um descendente direito de um nó que tinha balanceamento de –1 (U9 até U12).

Page 8: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceadas)� Para manter uma árvore balanceada, é

necessário fazer uma transformação na árvore tal que:

1. o percurso em ordem da árvore transformada seja o mesmo da árvore original (isto é, a árvore transformada continue sendo um árvore de busca binária);

2. a árvore transformada fique balanceada.

Page 9: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceadas)� A transformação a ser feita na árvore tal que

ela se mantenha balanceada é chamada de rotação.

� A rotação poderá ser feita à esquerda ou à direita dependendo do desbalanceamento que tiver que ser solucionado.

� A rotação deve ser realizada de maneira que as regras 1 e 2 da transp. Anterior sejam respeitadas.

� Dependendo do desbalanceamento a ser solucionado, apenas uma rotação não será suficiente para resolvê-lo.

Page 10: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL – Rotação DIREITA

D

C

F G

A

B

M

E

J K LH I

P QN OR

DESBALANCEOU!

SOLUÇÃO: ROTAÇÃO DIREITA

Percurso

em Ordem:

RHDIBEANJ

OFKCLGPMQ

Page 11: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL – Rotação DIREITA

C

F G

A

ME

J K L

H

I

P QN O

R

ROTAÇÃO DIREITACONCLUÍDA

B

D

ÁRVORE ESTÁ NOVAMENTE BALANCEADA!!!

Percurso

em Ordem:

RHDIBEANJ

OFKCLGPMQ

Page 12: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL – Rotação ESQUERDA

D

C

F G

A

B

M

E

J K LH I

P QO

R

DESBALANCEOU!

ROTAÇÃO ESQUERDA

N

Percurso

em Ordem:

HDIBEAJFRN

KOCLGPMQ

Page 13: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceadas)� Nos 2 exemplos anteriores de rotação a

esquerda e a direita as duas regras foram mantidas:

� o percurso em ordem da árvore transformada deve ser o mesmo da árvore original (isto é, a árvore transformada continue sendo um árvore de busca binária);

� a árvore transformada continua balanceada.

Page 14: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceadas)� Para o rebalanceamento da árvore é

necessário calcular o Fator de Balanceamentopara verificar qual rotação deve ser efetuadaafim de rebalanceá-la.

� FB = h da subárvore direita - h da subárvoreesquerda

� Se FB é negativo, as rotações são feitas à direita

� Se FB é positivo, as rotações são feitas à esquerda

Page 15: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceadas)� Há dois tipos de ocorrências nos casos

de balanceamento:

� Caso1 : Nó raiz com FB 2 ou –2 com um filho (na direção de onde houve a inserção) com FB 1 ou –1 com o mesmo sinal, neste caso a solução é uma rotação simples.

Page 16: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceadas)

4

8

10

9 15

12

FB(raiz)= Hd - He 4 - 2 = 2

FB(10)= Hd – He 3 - 2 = 1

Nó inserido

Solução: rotação à esquerda do nó 8, ou raiz.

Page 17: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceadas)

4

8

10

9

15

12

Nó inserido

Solução: rotação à esquerda do nó 8, ou raiz.

Page 18: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceadas)

� Caso 2: Nó raiz com FB 2 ou –2 com um filho(na direção de onde houve a inserção) com FB -1 ou 1 os quais possuem sinais trocados, neste caso a solução é uma rotação dupla.

� Primeiro rotaciona-se o nó com fator de balanceamento 1 ou –1 na direção apropriadae depois rotaciona-se o nó cujo fator de balanceamento seja 2 ou –2 na direção oposta

Page 19: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceadas)

4

8

10

2 6

5

FB(raiz)= 2 - 4 = -2

FB(4)= 2 - 1 = 1

Nó inserido

Solução: rotação do nó 4 à esquerda Rotação do nó 8 à direita.

Page 20: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceadas)

Solução: rotação do nó 4 à esquerda Rotação do nó 8 à direita.

4

8

10

2 6

5

Nó inserido4

8

10

2

6

5

4 8

102

6

5

Page 21: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceadas)

Algoritmo de Rotação à direita:

void rot_dir(NODEPTR p){NODEPTR q, temp;q = p->esq;temp = q->dir;q->dir = p;p->esq = temp;p = q;

}

4

8

10

2 6

5

4

2

5

p

q

temp

106

8

p

Page 22: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceadas)

Algoritmo de Rotação à esquerda:

void rot_esq(NODEPTR p){NODEPTR q, temp;q = p->dir;temp = q->esq;q->esq = p;p->dir = temp;p = q;

}

15

8

2

209

17

p

q

temp

15

20

172 9

8

p

Page 23: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceadas)

4

8

10

2 6

5

p

Algoritmo de Rotação a direita no caso 2:

void rot_esq_dir(NODEPTR p){rot_esq(p->esq);rot_dir(p);

}

Page 24: Árvores AVL (Balanceadas)wiki.icmc.usp.br/images/f/f0/AVL.pdf · Árvores AVL (Balanceadas) A transformação a ser feita na árvore tal que ela se mantenha balanceada é chamada

Roseli A. F. Romero

Árvores AVL (Balanceadas)

Algoritmo de Rotação à esquerda no caso 2:

void rot_dir_esq(NODEPTR p){rot_dir(p->dir);rot_esq(p);

} 15

8

2

209

17

p