Escolar Documentos
Profissional Documentos
Cultura Documentos
rvore AVL
Vamos analisar uma estrutura de dados muito comum: a rvore Binria de Busca
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:
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.
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 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
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
Continuando...
10 5 3 7 15 17 33
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
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
Exemplos
Balanceamento correto - difere 1
17 7 15 Agora est novamente balanceada. 33
O desempenho das operaes numa rvore pode ser medido pela sua altura.
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...