Blog /

Árvores AVL: os fundamentos das árvores de busca binária balanceadas

Árvores de busca binária balanceada são estruturas de dados fundamentais na ciência da computação, garantindo operações eficientes como pesquisa, inserção e exclusão. Entre elas, as árvores AVL, introduzidas por Adelson-Velsky e Landis em 1962, são um exemplo clássico de auto-equilíbrio em árvores de busca binária. Este artigo explora a mecânica, a implementação e as aplicações das árvores AVL, fornecendo insights sobre sua importância na manutenção de estruturas de dados equilibradas.

O que é uma árvore AVL?

Uma árvore AVL é uma árvore de busca binária de equilíbrio, onde a diferença de altura entre as subárvores esquerda e direita (conhecido como fator de equilíbrio) de qualquer nó é no máximo 1.

Propriedades-chave das árvores AVL:

  • Equilíbrio da altura: garante altura logarítmica para operações O(log⁡n).
  • Rotações: utiliza rotações para restaurar o equilíbrio após as inserções ou exclusões.

Por que árvores AVL?

  • Operações eficientes: garante a complexidade do tempo logarítmico para pesquisa, inserção e exclusão.
  • Evita a degeneração: evita estruturas desbalanceadas de árvores que degradam o desempenho para O(n).

Como funcionam as árvores AVL

1. Fator de equilíbrio

O fator de equilíbrio de um nó é definido como:

Fator de equilíbrio = altura da subárvore esquerda − altura da subárvore direita

Se o fator de equilíbrio estiver fora do intervalo [-1, 1], a árvore precisa ser reequilibrada por meio de rotações.

2. Rotações em árvores AVL

As rotações são usadas para manter o equilíbrio da árvore. Existem quatro tipos:

  • Rotação à esquerda (caso LL): ocorre quando um nó é inserido na subárvore esquerda do filho esquerdo.
  • Rotação direita (caso RR): ocorre quando um nó é inserido na subárvore certa do filho direito.
  • Rotação esquerda-direita (caso LR): ocorre quando um nó é inserido na subárvore direita do filho esquerdo.
  • Rotação direita-esquerda (caso RL): ocorre quando um nó é inserido na subárvore esquerda do filho direito.

Exemplo:

<code lang="cpp" class="language-cpp">
struct Node {
  int key;
  Node* left;
  Node* right;
  int height;
};

int height(Node* n) {
  return n ? n->height : 0;
}

Node* rotateRight(Node* y) {
  Node* x = y->left;
  Node* T2 = x->right;

  x->right = y;
  y->left = T2;

  y->height = std::max(height(y->left), height(y->right)) + 1;
  x->height = std::max(height(x->left), height(x->right)) + 1;

  return x;
}

Node* rotateLeft(Node* x) {
  Node* y = x->right;
  Node* T2 = y->left;

  y->left = x;
  x->right = T2;

  x->height = std::max(height(x->left), height(x->right)) + 1;
  y->height = std::max(height(y->left), height(y->right)) + 1;

  return y;
}
</code>

3. Inserção em árvores AVL

As inserções envolvem:

  • Executando uma inserção de árvore de busca binária.
  • Atualizando a altura dos nós afetados.
  • Rebalanceamento da árvore se o fator de equilíbrio ficar externo [-1, 1].

4. Exclusão em árvores AVL

Semelhante à inserção, as deleções seguem estas etapas:

  • Execute uma exclusão da árvore de pesquisa binária.
  • Atualize as alturas dos nós.
  • Reequilibre a árvore.

Aplicações do mundo real de árvores AVL

  • Bancos de dados: Árvores AVL garantem uma indexação e recuperação eficientes.
  • Roteamento de rede: Usado em protocolos de roteamento hierárquicos para um pathfinding equilibrado.
  • Alocação de memória: Árvores equilibradas otimizam a alocação de blocos e a deslocação.

Comparação: árvores AVL versus outras árvores equilibradas

Funcionalidade Árvores AVL Árvores pretas vermelhas B-árvores
fator de equilíbrio rigoroso ([-1, 1]) menos rigoroso Saldo de vários níveis
hora da pesquisa o(log⁡n) o(log⁡n) o(log⁡n)
rotações mais frequente Menos frequente n/a

Programação e integridade do conteúdo: uma filosofia compartilhada

A precisão exigida na implementação de árvores AVL reflete a importância de manter a exatidão e a originalidade na redação profissional. Ferramentas como paper-checker.com garantem que o conteúdo atenda aos altos padrões de autenticidade e qualidade, assim como as árvores AVL mantêm equilíbrio e eficiência nas estruturas de dados.

Conclusão

As árvores AVL exemplificam a elegância de árvores de busca binárias de autoequilíbrio, garantindo operações eficientes e prevenindo a degradação do desempenho em estruturas desequilibradas. Ao dominar os conceitos da AVL Tree e sua implementação, os desenvolvedores podem criar aplicativos robustos e escaláveis em diversos domínios.

Seja em estruturas de dados ou redação profissional, a manutenção do equilíbrio, precisão e qualidade é essencial para o sucesso a longo prazo. Abrace esses princípios para alcançar a excelência em programação e criação de conteúdo.

Recent Posts