Você está na página 1de 104

Universidade Federal do Rio de Janeiro

Trabalho de Organizao de Dados 2


Grupo:
DANILO SILVA DE CARVALHO - 107390588 ROBERTA SANTOS LOPES - 107362886 TASA LOPES MARTINS - 107362828 VINICIUS BASTOS BITTENCOURT 107362983

rvore AVL

Motivao: Por que foi criada essa estrutura?

Vamos analisar uma estrutura de dados muito comum: a rvore Binria de Busca

rvore Binria de Busca


Estrutura de dados onde todos os ns so chaves, todos ns esquerda contm uma sub-rvore com os valores menores ao n raiz da sub-rvore e todos os ns da sub-rvore direita contm somente valores maiores ao n raiz desta ltima sub-rvore.

rvore Binria de Busca


Tal fato nos permite fazer buscas, inseres e remoes e exibir os resultados de forma ordenada com muita exibilidade.

rvore Binria de Busca


Exemplo: Vamos inserir os nmeros 5, 8, 3, 2, 4, 6, 7, 1, 9, nessa ordem.

rvore Binria de Busca


Exemplo: Vamos inserir os nmeros 5, 8, 3, 2, 4, 6, 7, 1, 9, nessa ordem. 5

rvore Binria de Busca


Exemplo: Vamos inserir os nmeros 5, 8, 3, 2, 4, 6, 7, 1, 9, nessa ordem. 5 8

rvore Binria de Busca


Exemplo: Vamos inserir os nmeros 5, 8, 3, 2, 4, 6, 7, 1, 9, nessa ordem. 5 3 8

rvore Binria de Busca


Exemplo: Vamos inserir os nmeros 5, 8, 3, 2, 4, 6, 7, 1, 9, nessa ordem. 5 3 2 8

rvore Binria de Busca


Exemplo: Vamos inserir os nmeros 5, 8, 3, 2, 4, 6, 7, 1, 9, nessa ordem. 5 3 2 4 8

rvore Binria de Busca


Exemplo: Vamos inserir os nmeros 5, 8, 3, 2, 4, 6, 7, 1, 9, nessa ordem. 5 3 2 4 6 8

rvore Binria de Busca


Exemplo: Vamos inserir os nmeros 5, 8, 3, 2, 4, 6, 7, 1, 9, nessa ordem. 5 3 2 4 6 7 8

rvore Binria de Busca


Exemplo: Vamos inserir os nmeros 5, 8, 3, 2, 4, 6, 7, 1, 9, nessa ordem. 5 3 2 1 4 6 7 8

rvore Binria de Busca


Exemplo: Vamos inserir os nmeros 5, 8, 3, 2, 4, 6, 7, 1, 9, nessa ordem. 5 3 2 1 4 6 7 8 9

rvore Binria de Busca


Exemplo: Vamos agora inserir a chave de valor 10. 5 3 2 1 4 6 7 8 9

rvore Binria de Busca


Exemplo: Vamos agora inserir a chave de valor 10. 5 3 2 1 4 6 7 8 9 10

rvore Binria de Busca


Note que tivemos que fazer um pequeno percurso, com poucas comparaes e a insero ocorreu de forma bem rpida. 5 3 2 1 4 6 7 8 9 10

rvore Binria de Busca


Agora vamos inserir os mesmos nmeros, porm em outra ordem: 2,1,3,4,5,6,7,8,9

2 1

2 1 3

2 1 3 4

2 1 3 4 5

2 1 3 4 5 6

2 1 3 4 5 6 7

2 1 3 4 5 6 7 8

2 1 3 4 5 6 7 8 9

2 1 3 4 5 6 Se nesse momento desejarmos inserir a chave de valor 10, ser que teremos a mesma rapidez? 7 8 9

2 1 3 4 5 6 7 8 9 10

5 3 2 1 4 6 7 8 9 10

Nesta rvore, que est balanceada, tivemos que dar poucos passos para chegar na posio desejada.

2 1 3 4 5 6 7 Nesta outra, que no est balanceada, tivemos que fazer um percurso muito maior. 8 9 10

Concluso:

rvores binrias so mais ecientes quando balanceadas.

Problema: Como garantir o balanceamento de uma rvore?

a que surge a nossa incrvel rvore AVL!!!

O termo AVL vem de seus criadores, Adelson Velsky e Landis.

Denio
uma rvore binria de busca autobalanceada onde as alturas das duas subrvores a partir de cada n difere no mximo em uma unidade. As operaes de busca, insero e eliminao de elementos possuem complexidade O(log n).

Denio
Ao inserir ou eliminar elementos, a rvore ter de ser vericada para que, caso necessrio, seja feito um rebalanceamento, que ocorre por meio de rotaes.

Vamos ver um pouco da implementao em Java...

Entendendo as rotaes
Vejamos essa rvore: 6 4 2 3 5 7

Entendendo as rotaes
Rotao Simples A altura da sub-rvore de raiz 4 difere de mais de 1 unidade da de chave 7. 6 4 2 3 5 7

Entendendo as rotaes
Como a altura da sub-rvore esquerda de 6 difere de 2 em relao sua sub-rvore direita, rotaciona-se em torno do 4. 4 nveis 2 3
lado esquerdo desbalanceado -> rotao para direita

6 4 5 7

2 nveis

Entendendo as rotaes
4 passa a ser a nova raiz 6 4 2 3 5 7

Entendendo as rotaes
sub-rvore enraizada em 6 vira lho direito de 4 6 4 2 3 5 7 2 3 5 4 6 7

Entendendo as rotaes
5 passa a ser lho esquerdo de 6 6 4 2 3 5 7 2 3 5 4 6 7 2 3 5 4 6 7

Entendendo as rotaes
Resultado Final 4 2 3 5 6 7

Balanceada!

Entendendo as rotaes
Uma rotao esquerda segue o mesmo algoritmo porm invertendo direita com esquerda.

Entendendo as rotaes
A altura da sub-rvore de raiz 7 difere de mais de 1 unidade da de chave 3. 5 3 6 8 7 9 3 5 6 8 7 9 3 5 6 8 7 9

Entendendo as rotaes
Generalizando... Rotao Direita Seja Y o lho esquerda de X Torne X o lho direita de Y Torne o lho direita de Y o lho esquerda de X. Rotao Esquerda Seja Y o lho direita de X Torne X lho esquerda de Y Torne o lho esquerda de Y o lho direita de X.

Entendendo as rotaes

Mas nem sempre apenas uma rotao suciente para balancear a rvore...

Entendendo as rotaes
Como balancear essa rvore ?

7 3 2 4 5 6 8

Entendendo as rotaes
Rotao Dupla Se um n estiver desbalanceado e seu lho estiver inclinado no sentido inverso ao pai, teremos a ocorrncia de uma rotao dupla. Na verdade, trata-se apenas de duas rotaes simples seguidas.

Entendendo as rotaes

7 3 2 4 6 5 6 5 8

Entendendo as rotaes
Se um n estiver desbalanceado e seu lho estiver inclinado no sentido inverso ao pai, teremos a ocorrncia de uma rotao dupla. 7 3 2 4 5 6 8

Entendendo as rotaes
Se um n estiver desbalanceado e seu lho estiver inclinado no sentido inverso ao pai, teremos a ocorrncia de uma rotao dupla. 7 desbalanceado 3 2 5 6 4 8

Entendendo as rotaes
Se um n estiver desbalanceado e seu lho estiver inclinado no sentido inverso ao pai, teremos a ocorrncia de uma rotao dupla. 7 desbalanceado 3 8 seu lho, o 6, est no 2 5 4 6 sentido inverso do 7, seu pai

Rotao Dupla direita 7 5 3 2 4 6 8 Rotao Simples esquerda

5 3 2 4 6 7 8 Rotao Simples direita

Rotao Dupla direita 5 ser a nova raiz da sub-rvore enraizada em 7 7 3 2 4 5 6 8

Rotao Dupla direita Como a nova raiz passa a ser o 5, o n 3 passa a no ser mais lho de 7 7 5 3 8 7 3 2 5 8 2 4 6 6 4

Alm disso, as arestas de 4 e 6 com 5 so desfeitas

Rotao Dupla direita As sub-rvores de raizes 3 e 7 se ligam a 5 7 3 2 4 5 6 8 2 3 4 6 5 7 8 2 3 4 6 5 7 8

Rotao Dupla direita 4 se liga a 3 e 6 se liga a 7 7 3 2 4 5 6 5 3 2 4 6 7 8 rvore Balanceada! 8 2 3 4 6 5 7 8 2 3 4 6 5 7 8

Vamos ver agora as rotaes em Java...

Insero
A insero em uma rvore AVL ocorre da mesma forma que a insero na rvore binria, porm, levando em conta o balanceamento da rvore, ou seja, realizando as operaes de rotao quando necessrias.

Exemplos
Insere 5
5

Exemplos
Insere 3 - balano correto - difere 1
5 3

Exemplos
Insere 7 - balano correto - difere 0
5 3 7

Exemplos
Insere 10 - balano correto - difere 1
5 3 7 10

Exemplos
Insere 33 - balano errado - difere 2
5 3 7 10 33 Neste caso, realizar rotao simples esquerda

Exemplos
balano correto - difere 1
5 3 10 7 33

Exemplos
Insere 15 - balano incorreto - difere 2
5 3 10 7 33 15 Neste caso, realizar rotao simples esquerda

Exemplos
Agora o balano est correto - difere 1.
10 5 3 7 15 33

Exemplos
Insere 17 - balano incorreto - difere 2
10 5 3 7 15 17 Neste caso, realizar rotao dupla direita 33

Exemplos
balanceada - diferena de zero nas alturas
10 5 3 7 15 17 33

Exemplos
10 5 3 7 15 17 33

Isto uma AVL balanceada.

Vamos ver o algoritmo de insero em nosso programa em Java...

Continuando...
10 5 3 7 15 17 33

Agora vamos brincar com a remoo...

Remoo
Remover um n de uma rvore AVL consiste em remover diretamente o n caso ele seja uma folha e vericar o balanceamento realizando as rotaes quando necessrias. Caso o n no seja uma folha troca-se ele pelo maior n menor que ele (uma folha) e ento prossegue como explicado acima.

Exemplos
Remove 3
10 5 3 7 15 17 33

Exemplos
OK, balanceada (fcil)
10 5 7 15 17 33

Exemplos
Agora vamos remover o 17...
10 5 7 15 17 33

Exemplos
Agora vamos remover o 17...
10 5 7 17 15 33

Exemplos
Foi trocado pela chave mais direita do seu lho esquerdo.

10 5 7 15 33

Vamos complicar um pouco... Voltando a rvore balanceada antes das remoes...

Exemplos
Remover o 10!
10 5 3 7 15 17 33

Exemplos
7 o n mais direita do lho esquerdo de 10
10 5 3 7 15 17 33

Exemplos
Invertemos as posies e excluimos a folha 10
7 5 3 10 15 17 33

Exemplos
7 vira raiz e a rvore est balanceada.
7 5 3 15 17 33

Exemplos
Agora vamos remover o 3
7 5 3 15 17 33

Exemplos
Balanceada - difere de 1
7 5 15 17 33

Exemplos
Agora vamos remover o 5
7 5 15 17 33

Exemplos
Agora vamos remover o 5
7 5 15 17 33

Note que agora teremos que fazer rotaes, pois car desbalanceada.

Exemplos
Balanceamento errado - difere 2
7 17 15 33

Faremos uma rotao simples esquerda.

Exemplos
Balanceamento correto - difere 1
17 7 15 Agora est novamente balanceada. 33

E por m, o algoritmo de remoo...

O desempenho das operaes numa rvore pode ser medido pela sua altura.

rvore A.Bin.Busca Rubro-Negra AVL

Altura Mxima n 2 * log2(n) 1.44 * log2(n)

rvore A.Bin.Busca Rubro-Negra AVL

Complexidade O(n) O(log2(n)) O(log2(n))

Vantagens
rvores AVL so mais rpidas nas operaes de busca.

Desvantagens
Perde-se tempo quando necessitamos fazer um rebalanceamento. Isso pode ocorrer nas inseres e remoes.

Concluso
rvores AVL so bastante ecientes. Vamos agora ver mais exemplos no programa que desenvolvemos...

Você também pode gostar