O que são indices em Árvore?
- São índices baseados em famílias de árvores que permitem armazenamento e busca de dados com relativa facilidade.
- O objetivo dessas estruturas é obter uma performance média bem melhor que aquela obtida com listas sequenciais.
- O mecanismo básico utilizado nas árvores de busca é o de, numa procura, comparar o argumento de busca com determinada chave de determinado nó da árvore.
- Se a chave for maior, a busca prossegue pela subárvore da direita
- Se for menor, pela subárvore da esquerda.
O que é ABB e AVL?
ABB
- Árvore Binária de Busca (ABB) é uma árvore binária onde as chaves dos nós da subárvore direita de cada nó são maiores que as chaves desse nó e as chaves da subárvore esquerda são menores que a mesma.
- Uma árvore binária que não é ABB é aquela cuja chave A está na raiz e existem chaves maiores que A na subárvore esquerda. Um exemplo de ABB é mostrado a seguir:
- Propriedades:
- Propriedade 1: O percurso em ordem simétrica de uma ABB fornece as chaves ordenadas.
- Essa propriedade decorre diretamente da definição da árvore e é base para um método de Ordenação (TreeSort) que consiste em criar uma ABB com as chaves e depois percorrer a ABB em ordem simétrica. A análise deste método fica como exercício.
- Na árvore usada como exemplo, esse percurso fornece em ordem simétrica:
- 1 3 4 6 7 8 10 13 14
- Algoritmo em C:
- Propriedade 1: O percurso em ordem simétrica de uma ABB fornece as chaves ordenadas.
void emOrdem(struct No *pNo) {
if(pNo != NULL) {
emOrdem(pNo→pEsquerda);
visita(pNo);
emOrdem(pNo→pDireita);
}
}
- Em pré-ordem:
- 8 3 1 6 4 7 10 14 13
- Algoritmo em C:
- 8 3 1 6 4 7 10 14 13
void preOrdem(Struct No *pNo){
if(pNo != NULL){
visita(pNo);
preOrdem(pNo→pEsquerda);
preOrdem(pNo→pDireita);
}
}
- Outra propriedade importante ( na verdade, mais um resumo da análise do algoritmo feita) diz respeito à altura da árvore:
- Propriedade 2: A altura de uma ABB com n chaves varia entre log2n e n.
- Esse foi um resultado mostrado na análise do algoritmo de busca. A melhor árvore que pode ser obtida é uma árvore com o mesmo parâmetro de uma árvore completa. Essa árvore corresponde à Pesquisa Binária em um vetor. Já a pior árvore corresponde a uma árvore de altura n, correspondendo à Busca sequencial. Entretanto, o caso médio deste tipo de estrutura é razoável ( árvore com altura = 1.4 log2n.
- A possibilidade de termos árvores degeneradas é que levará à introdução de árvores balanceadas, árvores AVL, por exemplo.
- Propriedade 2: A altura de uma ABB com n chaves varia entre log2n e n.
- Propriedade 3: A estrutura de uma ABB depende da ordem de entrada das chaves.
- A nomeação desta propriedade serve para chamar a atenção para o fato explicitado. Se, por exemplo, as chaves forem inseridas em ordem ascendente ou descendente, a árvore resultante é degenerada.
AVL
- Árvore AVL é um tipo de árvore de busca binária balanceada.
- Em tal árvore, a altura de dois nós folha difere no máximo em uma unidade.
- As operações de busca, inserção e eliminação de elementos possuem complexidade O(logn) no qual n é o número de elementos da árvore. Inserções e eliminações podem também requerer o rebalanceamento da árvore, exigindo uma ou mais rotações.
- Balanceamento
- Uma árvore AVL é dita balanceada quando, para cada nó da árvore, a diferença entre as alturas das suas sub-árvores (direita e esquerda) não é maior do que um.
- Caso a árvore não estiver balanceada é necessário seu balanceamento através da rotação simples ou rotação dupla.
- O balanceamento é requerido para as operações de adição e exclusão de elementos.
- Para definir o balanceamento é utilizado um fator específico para nós.
- O fator de balanceamento de um nó é dado pelo seu peso em relação a sua sub-árvore.
- Um nó com fator balanceado pode conter 1, 0, ou -1 em seu fator.
- Um nó com fator de balanceamento -2 ou 2 é considerado um árvore não-AVL e requer um balanceamento por rotação ou dupla-rotação.
Vantagens
- AVL:
- Algoritmo muito rápido
- Acesso mais rápido aos elementos já que estão organizados pois tem maior eficiência nas operações de busca, pois, sendo a altura da AVL bem menor, o número necessário de comparações diminui sensivelmente.
- Exemplos: Em um árvore desbalanceada de 10.000 nós são necessárias 5.000 comparações para efetuar uma busca. Já na AVL, são necessárias apenas 14 comparações.
- ABB:
- A grande utilidade da árvore binária de busca é armazenar dados contra os quais outros dados são freqüentemente verificados (busca!)
- Em uma ABB é possível encontrar qualquer chave existente caminhando na árvore:
- A escolha da direção de busca só depende da chave que se procura e da chave que o nó atual possui
Desvantagens
- AVL
- A codificação de uma AVL necessita que o cálculo da altura seja constante caso contrário será eficiente nas buscas e ineficiente nas inserções e remoções
- ABB:
- O desempenho depende da ordem com que os elementos foram inseridos
- Inserções (como folhas) e Eliminações (mais complexas) causam desbalanceamento.
Referências bibliográficas
- [1] Oliveira, Karina. Algoritmos e Estrutura de Dados II. Unicap. PE.
- [2] Maldonado, Yandre e Costa, Gomes da. Árvores. UEM. Maringá.

