330 likes | 459 Views
INE 5384 Estruturas de Dados Prof a . Patrícia Vilain 2003.1. Árvores Binárias e Árvores AVL. Árvore de Busca Binária. Uma árvore binária é uma árvore de busca binária quando: todo elemento armazenado na subárvore esquerda é menor que a raiz r ;
E N D
INE 5384 Estruturas de Dados Profa. Patrícia Vilain 2003.1
Árvores Binárias e Árvores AVL
Árvore de Busca Binária Uma árvore binária é uma árvore de busca binária quando: • todo elemento armazenado na subárvore esquerda é menor que a raiz r; • nenhum elemento armazenado na subárvore direita é menor que a raiz r; • as subárvores esquerda e direita também são árvores de busca binária.
C G H F B A E D Árvore de Busca Binária
Árvore de Busca Binária 30 9 40 3 36 45 33 39
15 88 63 94 6 57 71 Pesquisa em uma Árvore de Busca Binária • Complexidade da pesquisa de um objeto O(h(A)) h(A) = log2 n O(h(A)) = O(log2 n) 42 > 42 < 42 h(A)
15 88 63 94 6 57 71 Inclusão em uma Árvore de Busca Binária • Navegação na subárvore ESQ ou DIR até encontrar a posição correta para inclusão • Complexidade da inclusão de um objeto O (log2 n) incluir chave 67 42
15 88 63 94 6 57 71 Inclusão em uma Árvore de Busca Binária • Navegação na subárvore ESQ ou DIR até encontrar a posição correta 42 > 42 incluir chave 67 < 88 > 63 < 71 67
15 88 63 94 6 57 71 Exclusão em uma Árvore de Busca Binária • Problema: manter a Árvore de Busca Binária correta após a exclusão de um nodo • Dois casos podem ocorrer: • caso 1: o nodo a ser retirado é folha excluir chave 57 • caso 2: o nodo a ser retirado não é folha excluir chave 42 42
Problema da Árvore de Busca Binária • O desbalanceamento progressivo de uma Árvore de Busca Binária tende a tornar linear a complexidade de pesquisa: O(log2 n) O(n) • Exemplo: • ordem de inclusão: 1,13, 24, 27, 56 • complexidade da pesquisa: O(n) Alternativa de solução:Árvore AVL
Árvore AVL • Uma árvore AVL A é uma Árvore de Busca Binária tal que: subárvore A’ A (h(A’.esq) – h(A’.dir) [-1,1]) • Uma árvore AVL é uma Árvore de Busca Binária Balanceada • AVL (Adelson-Velskii e Landis)
63 63 63 94 27 94 27 27 6 6 71 71 20 20 Exemplos 0 0 42 42 -2 +2 -1 +1 15 88 15 88 +1 +1 0 0 0 0 0 0 42 0 0 0 0 0 0 57 57 0 0 15 88 Não é árvore AVL! Árvore AVL 0 0 0 0 Árvore AVL
Operação de Rotação • Como manter uma árvore AVL sempre balanceada após uma inclusão ou exclusão? • através de uma operação de Rotação • Características da operação: • preserva a ordem das chaves • basta uma execução da operação de rotação para tornar a árvore novamente AVL
Operação de Rotação Tipos de rotação: Rotação simples: • para a direita • para a esquerda Rotação dupla: • para a direita • para a esquerda
Rotação Simples Executada toda vez que uma árvore fica desbalanceada com um fatorB: • positivo e sua subárvore ESQ também tem um fatorBpositivo (Rotação Simples para a Direita) ou • negativo e sua subárvore DIR também tem um fatorBnegativo (Rotação Simples para a Esquerda) Complexidade: O(1)
27 27 6 6 Exemplo - Rotação Simples para a Direita uma rotação simples para a direita é necessária +1 +2 42 42 incluir chave 4 0 0 +1 0 15 88 15 88 0 +1 0 0 0 4
Rotação Simples para a Direita +2 0 Y X Rotação para a Direita 0 +1 Y X AXEsq AYDir AYDir AXDir AXEsq AXDir
27 27 88 6 4 Exemplo - Rotação Simples para a Direita +2 42 0 Rotação para a Esquerda 15 +1 0 15 +1 88 0 6 42 +1 0 0 0 0 0 4
94 94 Exemplo - Rotação Simples para a Esquerda uma rotação simples para a esquerda é necessária -2 -1 42 42 incluir chave 90 0 0 0 -1 15 88 15 88 0 0 0 +1 67 67 0 90
Rotação Simples para a Esquerda -2 0 Y X Rotação para a Esquerda -1 0 X Y AYEsq AXDir AXDir AXEsq AYEsq AXEsq
67 90 94 Exemplo - Rotação Simples para a Esquerda -2 0 42 88 Rotação para a Esquerda 0 0 -1 +1 15 42 88 94 0 0 0 +1 0 67 15 0 90
Rotação Dupla Executada toda vez que uma árvore fica desbalanceada com um fatorB: • positivo e sua subárvore ESQ tem um fatorBnegativo (Rotação Dupla para a Direita) ou • negativo e sua subárvore DIR tem um fatorBpositivo (Rotação Dupla para a Esquerda) Complexidade: O(1)
27 6 6 Exemplo - Rotação Dupla para a Direita uma rotação dupla para a direita é necessária +1 +2 42 42 incluir chave 34 0 -1 0 0 15 15 88 88 0 0 0 -1 27 0 34
X Z Rotação Dupla para a Direita +2 +2 Rotação Dupla para a Direita Y Y 1o. Esq.Rotação para aEsquerda -1 +1 X -1 +1 Z AYDir AYDir AZDir AZEsq AXEsq AZEsq AZDir AXEsq
X X Y Z Z Rotação Dupla para a Direita Rotação Dupla para a Direita 0 +2 2o. Rotação para a Direita Y 0 +1 +1 +1 AZDir AZEsq AYDir AZDir AXEsq AYDir AZEsq AXEsq
6 6 Exemplo - Rotação Dupla para a Direita Rotação Dupla para a Direita +2 +2 42 42 1o. Esq.Rotação para a Esquerda -1 +1 0 0 15 27 88 88 0 +1 0 -1 15 27 34 0 0 34
6 6 Exemplo - Rotação Dupla para a Direita Rotação Dupla para a Direita +2 42 2o. Rotação para a Direita 0 27 +1 0 27 88 +1 0 +1 42 0 15 15 34 0 0 0 0 88 34
94 94 Exemplo - Rotação Dupla para a Esquerda uma rotação dupla para a esquerda é necessária -2 -1 42 42 incluir chave 51 0 +1 0 0 15 88 15 88 +1 0 0 0 67 67 0 51
Rotação Dupla para a Esquerda -2 -2 Rotação Dupla para a Esquerda Y Y 1o. Dir.Rotação para a Direita +1 -1 X Z -1 +1 Z X AYEsq AYEsq AZEsq AXDir AZDir AZEsq AZDir AXDir
Y X Z Rotação Dupla para a Esquerda Rotação Dupla para a Esquerda -2 0 2o. Rotação para a Esquerda Y -1 -1 0 Z -1 X AZDir AYEsq AZEsq AZEsq AXDir AYEsq AZDir AXDir
94 Exemplo - Rotação Dupla para a Esquerda Rotação Dupla para a Esquerda 1o. Dir.Rotação para a Direita -2 -2 42 42 0 0 -1 +1 15 15 67 88 0 +1 -1 0 51 67 88 0 0 51 94
Exemplo - Rotação Dupla para a Esquerda Rotação Dupla para a Esquerda 2o. Rotação para a Esquerda 0 -2 67 42 0 -1 0 -1 42 88 15 67 0 0 0 0 -1 15 94 51 51 88 0 94
Balanceamento Quando realizar o balanceamento de uma arvore AVL? • Sempre que a árvore apresentar um fatorB fora do intervalo [-1,1]. • O valor do fatorB deve ser testado sempre após uma operação de inclusão ou exclusão de nodo na árvore.