Você está na página 1de 19

EDII

Aula 7
Árvores B. Armazenamento em disco com uso de índices.

Caála, 28 de Abril de 2022


Árvores balanceadas:
 Árvores de pesquisa devem manter uma simetria entre as subárvores
da direita e esquerda de sua raiz e assim sucessivamente para cada
nó. Isso possibilita uma maior eficiência na procura de uma chave.
 Uma árvore que possua um dos lados muito maior que o outro
(desbalanceada) perde sua eficiência na pesquisa, pois, temos que
percorrer muitos nós, em sequência, para encontrar uma chave
posicionada nas folhas.
 Uma árvore é dita balanceada se a diferença entre a altura da
subárvore à direita e a altura da subárvore à esquerda for no
máximo 1. A esta condição damos o nome de fator de
balanceamento (FB).
Árvores B:
 Árvores B (criada por Rudolf Bayer e Edward Meyers McCreight) são
árvores de pesquisa balanceadas especialmente projetadas para
trabalharem em memória secundária, pesquisa de informações
em discos magnéticos, pois tornam mínima a quantidade de
operações de movimentação de dados (escrita/leitura) numa
pesquisa ou alteração.
 Elas não necessitam ser balanceadas frequentemente como as
árvores de busca binária. Possuem vantagens em relação a outros
tipos de implementações quanto ao tempo de acesso e pesquisa aos
nós.
 Os nós em árvores B, também conhecidos como páginas,
geralmente são representados por um conjunto de elementos
(chaves) apontando para seus filhos, que por sua vez também
podem ser conhecidos como folhas.
 Cada elemento dos nós contém um ponteiro para uma subárvore
com chaves menores e um ponteiro para uma subárvore com
chaves maiores.
Estrutura árvore B:

Árvore B de ordem "m" (máximo de filhos para cada nó) é uma árvore

que possui as seguintes propriedades:

a) cada nó tem no máximo "m" filhos;

b) cada nó (excepto a raiz e as folhas) tem pelo menos "m/2" filhos;

c) a raiz tem pelo menos dois filhos, se ela mesma não for uma folha;

d) todas as folhas aparecem no mesmo nível e carregam informação; e

e) um nó não-folha com "k" filhos deve ter k-1 chaves.


 A árvore B é uma árvore balanceada em que o número de nós acessados em
uma busca/inserção/remoção é muito pequeno se comparado às outras
árvores estudadas. Outro ponto importante é que a árvore B garante que as
folhas se encontrem todas em um mesmo nível, independente da ordem em
que os dados serão inseridos.
 Um elemento inserido em uma árvore B é sempre colocado em uma
folha. Assim como nas outras árvores e, de acordo com a necessidade,
as redistribuições são feitas a fim de garantir que a árvore fique
sempre balanceada.

Busca
 A busca realizada em uma árvore B é semelhante à busca em
uma árvore AVL e, conseqüentemente, a de uma árvore binária
de busca. Como é possível armazenar mais de um elemento em
um nó, é necessário adicionar testes a serem realizados em cada
nó para indicar qual o próximo passo.
Inserção
 Na inserção, devemos nos preocupar com a definição enquanto à ordem da
árvore, porque um nó interno (diferente da raiz) deve possuir entre é n/2 e n
subárvores. Temos de garantir isso.
 O primeiro passo da inserção é buscarmos a folha na qual será
inserido o novo elemento. Em seguida, como segundo passo, devemos
verificar se a folha está ou não completa e, se não estiver completa,
basta incluir o elemento em sua posição correta dentro do nó. Se o nó
estiver cheio, devemos dividir o nó cheio. Para isso, o valor central do
nó que será dividido sobe para a posição do pai, repetindo
recursivamente por toda árvore até a raiz (se necessário).
 E se a raiz estourar? Nesse caso, um novo nó raiz será criado e poderá ter
somente um elemento se necessário.
 A partir da árvore B inicial, devemos proceder às inserções dos
seguintes elementos, respectivamente: B, N, F.
Remoção
Para a remoção de um elemento, existem dois casos que merecem atenção: o
elemento a ser inserido estar ou não em uma folha; ao remover, um nó
não atingir a quantidade mínima de elementos que devem estar
armazenados no nó, de acordo com a ordem a árvore.
1. Aplicar o procedimento de buscar, verificando a existência do elemento a
ser removido na árvore.
2. Se o elemento a ser removido se encontrar em uma folha, o elemento é
simplesmente retirado.
3. Se o elemento a ser removido não se encontrar em uma folha (se
localizar em um nó interno), é substituído pelo elemento imediatamente
maior ou imediatamente menor. Observe que o elemento
imediatamente maior ou menor pertence, por definição, a uma folha.
Com isso, reduzimos para o caso de remover o elemento da folha.
4. Se o nó continuar com o número mínimo de elementos, fim.
5. Se não, a folha obrigatoriamente tem uma chave a menos que o mínimo.
Assim verifique os nós irmãos (imediatamente à esquerda e direita):
5.1 se um dos nós irmãos tiver mais do que o número mínimo de elementos,
aplique redistribuição. Lembre-se de que um nó interno deve possuir um
mínimo de n/2 –1 elementos. A redistribuição consiste em concatenar o nó
folha do elemento removido com o do irmão adjacente, o que resulta em um
nó maior do que o aceito pela definição. Em seguida, efetue a divisão do nó em
dois e suba em um nível o elemento central, igual à divisão da inserção;
5.2 se não, concatene o nó com um dos irmãos e o elemento separador do pai.
6. Se ocorrer concatenação, volte ao passo 4 com o nó pai, porque remover um
elemento do pai pode acarretar de o pai não ter mais o número mínimo de
elementos.

Você também pode gostar