Árvores B Disciplina de Algoritmos e Estrutura de Dados III Prof. Marcos Antonio Schreiner 24/04/2015 1 Introdução ● ● ● Quando trabalhamos com muitos dados nos obrigamos a utilizar a memória secundária. O acesso aos dados em memória secundária é muito lento. Precisamos de meios eficientes de acesso aos dados. Introdução ● ● Para que serve as Árvores AVL ou Rubro Negras? Elas são úteis para recuperar dados na memória principal ou na memória secundária? Introdução ● ● ● Por exemplo se usarmos uma AVL para armazenar dados de motoristas (+/- 20 milhões de registros) Teríamos uma árvore alta ● Lg 20.000.000 = 24,25 acessos a disco. Isso pode ser melhorado? Introdução ● Árvores binárias são o caso extremo: ● ● ● Máxima profundidade. Se os acessos são caros (armazenamento secundário) o desempenho cai. Além disso, cada acesso a disco trás um bloco de dados, ou seja, um conjunto de bytes. ● A árvore B é uma alternativa as árvores binárias. Árvore B Uma árvore B é uma árvore N-nária de ordem N, que satisfaz as seguintes condições: A raíz é uma folha ou tem no mínimo dois filhos; ● Cada nó tem no máximo N filhos e no mínimo N div 2 filhos. ● O número de chaves d é igual ao número de filhos do nó menos 1. ● Todas as folhas estão no mesmo nível. ● A ordem N da árvore deve ser impar. ● Árvores B - Exemplo 10 20 30 40 d<10 10<d<20 20<d<30 30<d<40 40<d Árvores B - Exemplo ● Uma árvore binária pode ser dividida em Páginas. ● ● No exemplo, cada página contém 9 registros. Árvore B – Capacidade Máxima ● Nós com no máximo 1000 elementos: Árvore com altura 1: 1000 ● Árvore com altura 2: 1000 + 1001*1000 = 1.002.000. ● Árvore com altura 3: ~1 Bilhão ● ● Árvore com altura n: ~elementosn Árvore B – Capacidade Mínima ● Nós com no máximo 1000 elementos: Árvore com altura 1: 500 ● Árvore com altura 2: 500 + 501*500 = 251.000. ● Árvore com altura 3: 500 + 501*500 + 251.001*500 = ~125000000 ● Árvore com altura n: ~elementosn ● Árvore B – Inserção 1)As chaves são inseridos nos nós folhas. 2)Se o nó ficar cheio, divida a folha em duas partes e suba o elemento central para o nó pai. 3)Se o pai fique cheio repita o processo, no pior caso até a raiz. 4)Se necessário o nó raiz deverá ser divido e o elemento central será transformado em nova raiz. Árvore B – Inserção - Exemplo ● ● Vamos construir uma árvore B de ordem 5. Suponha as chaves devem ser inseridas na seguinte ordem: 1, 12, 8, 2, 25, 6, 14, 28, 17, 7, 52, 16, 48, 68, 3, 26, 29, 53, 55, 45 ● Os 4 primeiros elementos são simples: 1 2 8 12 O 25 (quinto elemento) estoura o tamanho do nó. ● O que fazer? ● Árvore B – Inserção - Exemplo 8 1 2 12 25 25 6 14 28 17 7 52 16 48 68 3 26 29 53 55 45 Árvore B – Inserção - Exemplo Em seguida inserimos 6, 14 e 28 : 8 1 2 6 12 14 25 28 6 14 28 17 7 52 16 48 68 3 26 29 53 55 45 Árvore B – Inserção - Exemplo Adicionando 17 à árvore teremos outro split 8 1 2 6 12 14 25 28 17 17 7 52 16 48 68 3 26 29 53 55 45 Árvore B – Inserção - Exemplo 8 1 2 6 17 12 14 25 28 17 7 52 16 48 68 3 26 29 53 55 45 Árvore B – Inserção - Exemplo Continuando com 7, 52, 16 e 48 8 17 1 2 6 7 12 14 16 25 28 48 52 7 52 16 48 68 3 26 29 53 55 45 Árvore B – Inserção - Exemplo E agora, inserindo o 68 8 1 2 6 7 17 12 14 16 25 28 48 52 68 68 3 26 29 53 55 45 Árvore B – Inserção - Exemplo Quando inserimos o 3 o “split” é na folha mais à esquerda e o 3 sobe. 26, 29, 53, 55 vão para as folhas: 3 1 2 6 7 8 17 48 12 14 16 25 26 28 29 3 26 29 53 55 45 52 53 55 68 Árvore B – Inserção - Exemplo Por fim o 45: 3 1 2 6 7 8 17 48 12 14 16 25 26 28 29 45 45 52 53 55 68 Árvore B – Inserção - Exemplo Por fim, quando inserimos o 45, isso forçará com que o 28 suba para a raiz, mas a raiz também esta cheia. 28 3 1 2 6 7 8 17 48 12 14 16 25 26 29 45 52 53 55 68 Árvore B – Inserção - Exemplo O 17 tem que subir para se tornar a nova raiz. 17 3 1 2 6 7 8 28 48 12 14 16 25 26 29 45 52 53 55 68 Árvore B* É uma variante da árvore B posterga a divisão de nós até que as folhas adjacentes estejam completamente cheias. ● Redistribuição de chaves. Árvore B* – Inserção - Exemplo 8 1 6 14 28 17 7 2 12 25 Árvore B* – Inserção - Exemplo 8 1 2 6 14 28 17 7 6 12 14 25 28 Árvore B* – Inserção - Exemplo REDISTRIBUIÇÃO 8 1 2 6 12 14 25 17 17 7 28 Árvore B* – Inserção - Exemplo REDISTRIBUIÇÃO 12 1 17 7 2 6 8 14 17 25 28 Árvore B* – Inserção - Exemplo 12 1 2 6 8 7 7 14 17 25 28 Árvore B* – Inserção - Exemplo 7 1 7 2 6 17 8 12 14 25 28 Árvore B – Inserção - Exercício 1) Insira os seguintes números em uma árvore B e B* de ordem 5: 3, 7, 9, 23, 45, 1, 5, 14, 25, 24, 13, 11, 8, 19, 4, 31, 35, 56, 2, 6, 7, 10, 12, 15, 16, 17 Árvore B – Busca Como é o algoritmo de busca? 17 3 1 2 6 7 8 28 48 12 14 16 25 26 29 45 52 53 55 68 Árvore B – Remoção ● Na remoção é conveniente sempre remover da folha. Assim: 1 – Chave está na folha: ● Se a remoção não faz com que o nó fique com poucos elementos, remova a chave. 2 – Se a chave não é folha: ● Seu predecessor ou sucessor está em um folha. ● Se a remoção do substituto não faz com que o nó fique com poucos elementos, substitua a chave. Árvore B – Remoção ● Se (1) ou (2) faz com que uma folha tenha um número menor que o mínimo então temos que observar os irmãos adjacentes ao nó: 3 - Se um irmão tem número de chaves maior que o mínimo então: ● ● Troca-se um chave deste nó com o nó pai Uma chave do nó pai vai para posição da chave removida. 4 - Se os irmãos têm número de chaves menor que o mínimo, então: ● ● Suas chaves devem ser combinadas com a chave do nó pai. Este processo é recursivo. Árvore B – Remoção - Exemplo Assumindo uma árvore de ordem 5. Remover o 2: 12 29 52 2 7 9 15 22 31 43 56 69 72 Árvore B – Remoção - Exemplo Há chaves suficientes 12 29 52 7 9 15 22 31 43 56 69 72 Árvore B – Remoção - Exemplo Remover o 52 12 29 52 7 9 15 22 31 43 56 69 72 Árvore B – Remoção - Exemplo Substitui pelo sucessor 56 56 12 29 52 7 9 15 22 31 43 56 69 72 Árvore B – Remoção - Exemplo Remover o 72 56 12 29 52 7 9 15 22 31 43 69 72 Árvore B – Remoção - Exemplo Poucas chaves 12 29 56 7 9 15 22 Combina 31 43 69 Árvore B – Remoção - Exemplo Remover o 22 12 29 7 9 15 22 31 43 56 69 Árvore B – Remoção - Exemplo Descer chave do nó pai e subir chave na folha 12 29 7 9 15 22 31 43 56 69 Árvore B – Remoção - Exemplo 12 31 7 9 15 29 43 56 69 Árvore B – Remoção - Exercício 2) Seja a árvore produzida pelos seguintes números do exercício anterior: 3, 7, 9, 23, 45, 1, 5, 14, 25, 24, 13, 11, 8, 19, 4, 31, 35, 56, 2, 6, 7, 10, 12, 15, 16, 17 Remova os seguintes números: 1, 3, 2, 7, 8, 9, 10, 15, 16, 17, 23, 24, 25, 31, 35, 45, 56, 5, 6, 11, 12, 4 Árvore B+ Problemas da Árvore B Como percorrer sequencialmente os índices e consequentemente os registros em uma árvore B? 17 3 1 2 6 7 8 28 48 12 14 16 25 26 29 45 52 53 55 68 Problemas da Árvore B Como podemos mudar a estrutura para facilitar o acesso sequencial? 17 3 1 2 6 7 8 28 48 12 14 16 25 26 29 45 52 53 55 68 Árvore B+ A árvore B+ é uma variação da estrutura básica da árvore B. Características: ● Todas as chaves e endereço dos dados são mantidas em folhas; ● As chaves são repetidas em nós não-folha para formar índices; ● As folhas são ligadas oferecendo um caminho sequencial para percorrer as chaves. Árvore B+ - Exemplo Árvore B+ - Inserção Semelhante a inserção em uma árvore B: - Ocorre sempre em um nó folha. Passos: ● Localizar a folha para inserir a chave; • Inserir a chave; • Se, após a inserção, a folha estiver completa, realizar a divisão da página. Árvore B+ - Inserção - Exemplo Inclusão do 85, 60, 52 e 70 52 60 85 Árvore B+ - Inserção - Exemplo Inclusão do 85, 60, 52 e 70 60 52 60 70 85 Árvore B+ - Busca Como é o algoritmo de busca? Árvore B+ - Remoção ● As chaves são sempre removidas nas folhas. ● ● Os nós internos devem ser atualizados caso necessário Se após a remoção o número de chaves for menor que o mínimo, deve-se: Redistribuir chaves de folhas adjacentes. ● Concatenar folhas adjacentes (possuem o mesmo pai). ● Árvore B+ - Remoção - Exemplo Remover o 68, 52, 7, 45 7 2 1 2 6 7 7 26 52 12 14 16 25 26 29 45 52 53 55 68 Árvore B+ - Remoção - Exemplo Remover o 68, 52, 7, 45 7 2 1 2 6 7 7 26 45 12 14 16 25 26 29 45 52 55 Árvore B+ - Remoção - Exemplo Remover o 7, 45 (REDISTRIBUIÇÃO) 12 2 12 1 2 6 12 14 16 26 45 25 26 29 45 53 55 Árvore B+ - Remoção - Exemplo Remover o 45 (CONCATENAÇÃO) 12 2 12 1 2 6 12 14 16 26 25 26 29 52 55 Árvore B+ – Inserção - Exercício 3) Insira os seguintes números em uma árvore B+ de ordem 5: 3, 7, 9, 23, 45, 1, 5, 14, 25, 24, 13, 11, 8, 19, 4, 31, 35, 56, 2, 6, 7, 10, 12, 15, 16, 17 Árvore B+ – Remoção - Exercício 4) Seja a árvore produzida pelos seguintes números do exercício anterior: 3, 7, 9, 23, 45, 1, 5, 14, 25, 24, 13, 11, 8, 19, 4, 31, 35, 56, 2, 6, 7, 10, 12, 15, 16, 17 Remova os seguintes números: 1, 3, 2, 7, 8, 9, 10, 15, 16, 17, 23, 24, 25, 31, 35, 45, 56, 5, 6, 11, 12, 4 Referências SZWARCFITER, J. L., MARKENZON, L. Estruturas de Dados e seus Algoritmos. 3a ed. Rio de Janeiro: LTC, 2010. TENENBAUM, A. M., LANGSAM, Y., AUGENSTEIN, M. J. Estruturas de Dados Usando C. São Paulo: Makron, 1995. LEISERSON, C. E., RIVEST, R. L., CORMEN, T. H., STEIN, C. Algoritmos – Teoria e prática. Rio de Janeiro: Campus, 2002.