Árvores b+ de busca mc202 - estrutura de dadosafalcao/mc202/aula19-arvoreb+.pdf · 2020. 9....
TRANSCRIPT
-
Árvores B+ de busca
MC202 - Estrutura de dados
Alexandre Xavier Falcão ([email protected])
Alan Zanoni Peixinho ([email protected])
Thiago Vallin Spina ([email protected])
1
-
Árvores B+
• Variante da á rvore B que permite acesso sequencial mais eficiente aos registros
• Desenvolvida pensando em buscas por range de elementos em bancos de dados
• Exemplo: retorne todos os registros com chave entre 20 e 100
• Bastante utilizada para implementação de sistemas de arquivo (e.g., NTFS)
2
-
Árvores B+: Características
3
• Mesmos princípios da ávore B, com as seguinte diferenças:1. Os nós internos não contém dados secundários dos registros, apenas as
chaves2. Apenas as folhas cont é m os dados dos registros ou ponteiros para os
mesmos em disco (RRNs) e, por consequência, as chaves em nós internos são replicadas nas folhas
3. As folhas s ã o interconectadas via uma lista (possivelmente duplamente) ligada
• Exemplo:
-
Árvores B+: Operações
4
• As operações de busca, inserção e remoção são efetuadas de modo similar à arvores B
• Uma busca por range de chaves é simplificada à encontrar a primeira chave de interesse, seguida por uma operação de busca linear na lista ligada de folhas
• Exemplo: Retorne todos os registros entre [4, 7]3 5
1 2 3 4 5 6 7
-
Árvores B+: Inserção
5
• Visto que todas as chaves devem existir tanto em nó interno quanto em nó folha, ao ocorrer uma divisão de nó a chave mediana deve ser copiada para o novo nó pai e mantida no novo nó folha
• Lembramos que inserções sempre ocorrem em folhas
• Exemplo:– Insira 4
1 2 3 3
3 41 2
-
Árvores B+: Remoção
6
• Durante remoções, temos dois casos básicos:1. A chave a ser removida está em um nó folha: basta executar a remoção
normalmente2. A chave a ser removida est á em um n ó interno: como ela deve ser
substituída por seu antecessor, basta buscá-lo em seu filho esquerdo, fazer a substituição e depois chamar a função de remoção recursivamente para a subárvore à direita, tratando underflow como em árvores B
• Exemplo: – Remova 3
1 2 43
3 41 2
2
3 41
-
Árvores B+: Exemplo
7
• Considere a seguinte á rvore B+ que guarda em disco registros cujas chaves s ão nomes
• Dado que v á rios nomes possuem um prefixo em comum (e.g., FOLK e FOLKS), podemos guardar a árvore de modo mais eficaz visando reduzir o espaço que ela ocupa
-
Exemplo: Árvores B+ com prefixo simples
8
• O conceito de separador do tipo prefixo simples permite aumentar o n ú mero de separadores (ponteiros) por nó da árvore, reduzindo sua altura
• O prefixo simples que separa um bloco do anterior é a cadeia de caracteres mais curta que diferencia a última chave do bloco anterior da primeira do bloco atual
-
Árvores B+ com prefixo simples: Remoção
9
• Se removermos os registros com chaves EMBRY e FOLKS, os separadores continuam válidos
-
Árvores B+ com prefixo simples: Remoção
10
• Ao remover FOLKS, o prefixo FR seria mais apropriado, contudo, se a á rvore for mantida em disco o custo de atualização da mesma pode não compensar
• Logo, vale a pena manter a chave FOLKS ainda que não esteja presente na árvore
-
Árvores B+ com prefixo simples: Exemplos com mudanças
11
• Mudan ç as nos separadores/prefixos podem acontecer sempre que ocorre divis ão durante inserções ou redistribuição/união durante remoções
• Exemplo: Inserção de registro com chave AYERS na árvore original causa criação de AY
-
Árvores B+ com prefixo simples: Exemplos com mudanças
12
• Mudan ç as nos separadores/prefixos podem acontecer sempre que ocorre divis ão durante inserções ou redistribuição/união durante remoções
• Exemplo: Remoção de registro com chave CAMP causa eliminação de CAM
-
Árvores B+ com prefixo simples: Estrutura dos nós
13
• Cada nó da árvore bem como os elementos do conjunto de sequências são blocos de tamanho fixo em disco
• Para facilitar a indexação em disco, os blocos devem ter o mesmo tamanho em ambas estruturas, porém os separadores são de tamanho variável
• Em vez de um vetor de chaves/separadores, usa-se uma única cadeira de caracteres para armazenar os separadores e um vetor de índices inteiros com a posição relativa dos separadores
• O n ú mero atual de separadores e o vetor de endere ç os dos filhos tamb é m s ão armazenados
• A busca (binária) é feita através do vetor de índices e como a única limitação é o tamanho do bloco, a árvore B tem ordem variável por nó
-
Árvores B e B+: Variantes
14
• Uma variante comum das á rvores B e B+, denominada á rvore B*, mantém cada nó com pelo menos 2/3 de chaves
• Logo, os tratamentos de overflow e underflow são executados assim que essa condição é violada, podendo até mesmo copiar mais de uma chave por vez dos n ó s irm ã os para manter a estrutura consistente, quando possível
• Exemplo:
-
Árvores B e B+: Variantes
15
• Uma possível mudança em todos os casos é guardar as chaves (e ponteiros para filhos) como uma árvore binária em cada nó, ao invés de utilizar um vetor, visando agilizar os tratamentos de overflow e underflow na hora de copiá-las/removê-las