Árvores binárias balanceadas

15.570 visualizações

Publicada em

http://www.youtube.com/watch?v=xNyQ6F_1SbE

3 comentários
6 gostaram
Estatísticas
Notas
  • @djeico o fator se calcula fazendo a diferença entre as alturas da sub-árvore à direita menos a altura da sub-árvore à esquerda de um nó, nesta ordem. Por exemplo, na primeira árvore do slide 9, ela está desbalanceada, pois para o nó de número 10 o cálculo do fator excede o valor 1, e isto acontece pois a altura da sub-árvore à esquerda de 10 é zero (já que não há nenhum filho à esquerda dele) e a altura da sub-árvore à direita de 10 é 2. Fazendo a conta: 2 (direita) - 0 (esquerda) = 2, então o fator de balanceamento do 10 é +2 e isto quebra a propriedade da AVL que delimita esse fator a -1, 0 ou +1. Outra forma de calcular o fator de um nó é pensar da seguinte forma: quando um nó possui fator valendo -1, esse sinal NEGATIVO indica que, para o nó em questão, sua sub-árvore À ESQUERDA é 1 NÍVEL MAIOR que sua sub-árvore à direita; de forma análoga, quando o fator de um nó vale +1, ou seja, com sinal POSITIVO, significa que a sub-árvore À DIREITA é 1 NÍVEL MAIOR que a sub-árvore à esquerda desse nó. Voltando ao slide 9, na primeira árvore, observe que o nó 10 tem fator +2, ou seja, a sub-árvore à sua direita é 2 NÍVEIS MAIOR que sua sub-árvore à esquerda. Já ao lado, após a rotação, o fator do nó 10 passa a ser zero, pois as suas sub-árvores tem a mesma altura (0 para ambas, pois são nulas). O mesmo acontece com o nó 20 nesta mesma situação, pois seus filhos tem ambos altura igual a 1. Ficou um pouco extenso, mas espero que tenha dado para entender, qualquer coisa é só perguntar :)
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • @djeico recomendo essa aula do MIT sobre o assunto (ps.: está em inglês e sem legendas :\ ) https://www.youtube.com/watch?v=FNeL18KsWPc
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • Mas como calcula exatamente o fator de balanceamento? Eu vi na fórmula, mas não consegui aplicar na árvore. Precisaria de uma demonstração passo a passo. Tenha como base alguém que ainda não entendeu bem como isso funciona. Se pudesse representar no desenho cada passo para calcular facilitaria.
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
Sem downloads
Visualizações
Visualizações totais
15.570
No SlideShare
0
A partir de incorporações
0
Número de incorporações
7
Ações
Compartilhamentos
0
Downloads
378
Comentários
3
Gostaram
6
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Árvores binárias balanceadas

  1. 1. Também conhecidas como Árvores AVL
  2. 2.  Uma árvore é considerada AVL se, e somente se, para cada um de seus nós, as alturas das sub-árvores à direita e à esquerda forem iguais, ou difiram em apenas uma unidade.
  3. 3.  if ((Hd – He) < 2) { É AVL }
  4. 4.  if ((Hd – He) >= 2) { NÃO É AVL }
  5. 5.  Foi a primeira estrutura de dados a oferecer operações de inserção, remoção e busca em tempo logaritmo, ou seja, é um algoritmo muito rápido. Em uma árvore desbalanceada de 10.000 nós, são necessárias 5.000 comparações para efetuar uma busca, já numa árvore AVL, com o mesmo número de nós, essa média baixa para 14 comparações. Devemos sempre tentar manter o custo de acesso o menor possível, e o algoritmo da árvore avl busca exatamente isso, deixando a árvore sempre com a menor altura possível.
  6. 6.  Foi a primeira estrutura de dados a oferecer operações de inserção, remoção e busca em tempo logaritmo, ou seja, é um algoritmo muito rápido. Em uma árvore desbalanceada de 10.000 nós, são necessárias 5.000 comparações para efetuar uma busca, já numa árvore AVL, com o mesmo número de nós, essa média baixa para 14 comparações. Devemos sempre tentar manter o custo de acesso o menor possível, e o algoritmo da árvore AVL busca exatamente isso, deixando a árvore sempre com a menor altura possível.
  7. 7.  Para cada nó, defini-se um fator de balanceamento (FatBal), que deve ser -1, 0 ou 1. Ele é o responsável por avisar que a árvore está desbalanceada. FatBal = altura (sub-árvore direita) – altura (sub-árvore esquerda) FatBal = -1, quando a sub-árvore da esquerda é um nível mais alto que a direita. FatBal = 0, quando as duas sub-árvores tem a mesma altura. FatBal = 1, quando a sub-árvore da direita é um nível mais alto que a esquerda.  Toda folha tem FB = 0
  8. 8.  Quando inserimos um novo registro na árvore, ou removemos um registro já existente. Esta inserção/remoção pode ou não alterar as propriedades de balanceamento. Caso a inserção/remoção desse novo registro não viole nenhuma propriedade de balanceamento, podemos continuar inserindo/removendo registros. Se a inserção/remoção afetar as propriedades de balanceamento, devemos restaurar o balanço da árvore. Esta restauração é efetuada através de Rotações na árvore.
  9. 9.  Rotação simples à esquerda
  10. 10.  Rotação simples à direita
  11. 11.  Rotação dupla à esquerda (rotação simples à direita + rotação simples à esquerda)
  12. 12.  Rotação dupla à direita (rotação simples à esquerda + rotação simples à direita)
  13. 13.  Dicas a) Para identificar quando uma rotação é simples ou dupla deve-se observar os sinais do FB: - Se o sinal for igual, a rotação é simples - Se o sinal for diferente, a rotação é dupla b) Se FB for positivo (+), a rotação é para à esquerda c) Se FB for negativo (-), a rotação é para à direita
  14. 14.  Suponha que inserimos os números 50, 40 e 30 em uma árvore. Obteremos então:  A inserção produziu um desbalanceamento. Neste caso, como os sinais dos FB são os mesmos, significa que precisamos fazer apenas uma ROTAÇÃO SIMPLES à direita no nó com FB -2. No caso simétrico (nó com FB 2) faríamos uma rotação simples à esquerda.
  15. 15.  Após a rotação simples teremos: Agora a árvore está balanceada.
  16. 16.  Como podemos observar, a árvore está balanceada pelos FB de cada nó. São dois os possíveis casos de desbalanceamento.
  17. 17.  Ao inserir o número 5 na árvore, teremos a seguinte árvore:  O nó 8 fica com o FB -2 e tem um filho com FB +1. Neste caso para manter o balanceamento devemos aplicar duas rotações, também denominada ROTAÇÃO DUPLA.  Primeiro rotaciona-se o nó com FB 1 para a esquerda.
  18. 18.  Logo rotaciona-se o nó que possuía FB -2 na direção oposta, nesse caso a direita.
  19. 19.  Os FB dos nós voltaram a ficar dentro do esperado das árvores AVL. O caso simétrico ao explicado acima acontece com os sinais de FB trocados, ou seja, um nó com FB +2 com um filho com FB -1. Também utilizaríamos uma rotação dupla, mas nos sentidos contrários, ou seja, o nó com FB -1 seria rotacionado para a direita e o nó com FB +2 seria rotacionado para a esquerda.

×