Baixe o app para aproveitar ainda mais
Prévia do material em texto
Árvore-B Wirth, N. Algoritmos e Estruturas de Dados, Prentice Hall, 1986. Cormen, T.H.; Leiserson, C. E. Rivest, R. L. Stein, C. Algoritmos: Teoria e Prática. 2a. ed. Editora Campus, 2002 (Caps. 18) 2 Árvore de Multivias Árvore de multivias T de ordem n: (1) É uma árvore em que cada nó possui n ou menos sub-árvores e contém uma chave a menos do que o número sub-árvores. (2) Se T1,T2,…,Tm são m sub-árvores de um nó, este contém m-1 chaves k1,k2,…,km-1 em ordem ascendente (descendente), k1≤k2 ≤ … ≤ km-1. 12 50 85 6 10 37 100 120 150 60 70 80 25 62 65 69 110 Árvore de Multivias de ordem 4 3 Árvore - B Árvore – B: Árvore de pesquisa balanceada projetada com objetivos: (1) Indexação em grandes índices para armazenamento em memória secundária (2) manter a árvore balanceada após operações de inserção e de remoção (3) Utilizar melhor espaço dentro de um nó, à custa de maior complexidade nos algoritmos de inserção e deleção Introduzida por R. Bayer e E. McCreight: “Organization and Maintenance of Large Ordered Indexes”, Acta Informatica, 1(3), Feb 1972 4 Árvore - B Árvore B de ordem n: É uma árvore de multivias de ordem n que satisfaz as seguintes condições: (1) Todo nó possui n ou menos sub-árvores (árv. multivias) (2) Todo nó, exceto a raiz, possui ou mais sub-árvores (3) A raiz possui, no mínimo, duas sub-árvores não vazias, exceto no caso em que é uma folha (4) Todas as folhas estão no mesmo nível (e todas as suas sub- árvores são vazias) (5) Um nó com k sub-árvores armazena k-1 registros (árv. multivias) (6) Todo os nós de derivação (não-folhas) possuem exclusivamente sub-árvores não vazias 2 n 5 Exemplo de uma Árvore B – Ordem 4 P D M T A B C G I N U W R S 6 Exemplo Árvore – B (cont.) Ordem # sub-arv. Raiz # sub-arv. Outros nós # elem. Raiz #elem. Outros nós 3 2..3 2..3 1..2 1..2 4 2..4 2..4 1..3 1..3 5 2..5 3..5 1..4 2..4 Tamanho de um nó (sua ordem) é escolhido para preencher um bloco do disco Árvore-B é uma generalização de árvore 2-3, i.e, árvore 2-3 é uma árvore-B de ordem 3 7 Altura de uma Árvore - B O número de acessos a disco requeridos nas operações em uma árvore-B é proporcional a altura da árvore 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1 nó, 1.000 chaves 1.001 nós, 1.001.000 chaves 1.002.001 nós, 1.002.001.000 chaves Árvore-B de ordem 1.001 e altura 2 Árvore-B de ordem 1.001 e altura 2 Mais de um bilhão de chaves 8 Representação: Estrutura encadeada - alocação dinâmica Estrutura da Árvore-B de ordem n: ponteiro para um nó Nó - composto por: (1) Vetores [1..q-1..n-1] de chaves de pesquisa (2) Vetores [1..q..n] de ponteiros para as sub-árvores (3) contador: [q-1]: número de chaves no nó Árvore-B: ponteiro tipono tipono: contador: inteiro K[1..n-1]: tipochave P[1..n]: ponteiro tipono 9 Exemplo da Representação 10 20 5 7 12 30 cnt k1 k2 p1 p2 p3 1 12 -1 -1 Árvore-B: ponteiro tipono tipono: contador: inteiro K[1..n-1]: tipochave P[1..n]: ponteiro tipono Árvore-B ordem 3 10 Operações Básicas Busca Inserção Remoção 11 Algoritmo Busca em Árvore B Algoritmo BuscaArvoreB (k, v) se v = nulo então imprimir(“chave não existe”) senão i ← 1; eqto (i ≤ cnt ˄ v.K[i] < k ) i ← i + 1 se (i ≤ cnt ˄ k = v.K[i]) então return(v,i) senão BuscaArvoreB(k, v.P[i]) 12 Busca em uma Árvore-B •Problema 1: Buscar L •Problema 2: Buscar S P D M T A B C G I N U W R S Busca retorna um ponteiro x para um nó com chave k se existir algum senão retorna NULL 13 Inserção em Árvore - B Inserção em Árvore-B: (1) Pesquisa o registro com chave k (2) Caso não se encontre (1) Inserir x na folha (2) Se o nó NÃO excedeu o limite → FIM (3) Senão (overflow) o nó é dividido em 2 e o nó pai tem que acomodar o registro excedente (4) Se o pai tb. estiver cheio então o processo de divisão é aplicado novamente (5) No pior caso, propaga-se até a raiz da árvore e ela aumenta sua altura com a divisão da raiz 14 Inserção em Árvore – B - Exemplo Árvore-B de ordem 3. Inserção: 10 20 5; 7 12 30; 15 40 17 10 10 20 5 10 20 10 5 20 10 5 7 20 10 5 7 12 20 10 5 7 12 20 30 10 20 5 7 12 30 10 20 5 7 12 15 30 10 20 5 7 12 15 30 40 15 Inserção em Árvore – B – Exemplo (cont.) Árvore-B de ordem 3. Inserção: 10 20 5; 7 12 30; 15 40 17 10 20 5 7 12 15 30 40 10 20 5 7 12 15 17 30 40 10 15 20 5 7 12 30 40 17 10 5 7 12 30 40 17 20 15 16 Notação da Árvore-B Notação da árvore-B em níveis {[(15)] [(10) (20)] [(5, 7) (12) (17) (30,40)]} {} – árvore-B [] – nível () = nó 10 5 7 12 30 40 17 20 15 17 Remoção em Árvore B Remoção em Árvore-B: (1) Eliminação normal: remoção de um item em um nó folha e esse permanece com o nro. mínimo de sub- árvores (2) Eliminação com rotação: se a remoção de um item torna o nó com menos que a sua capacidade mínima, ocorre – (1) rotação à esquerda (com o máximo de sua sub- árvore à esquerda) (2) rotação à direita (com o mínimo de sua sub- árvore à direita) 18 Remoção em Árvore B Remoção em Árvore-B: (3) Remoção com aglutinação: (caso a remoção normal e com rotação não sejam possíveis). Nesse caso as sub-árvores à esquerda e à direita já estão com o nro. mínimo de elementos – (3.1) aglutinação usando a sub-árvore da esquerda (3.2) aglutinação usando a sub-árvore da direita (3.3) o nó aglutinado é formado no nível inferior, e se ainda ficarem nós com menos que a capacidade mínima, aglutinações recursivas são necessárias podendo a árvore diminuir sua altura de um. 19 Remoção em Árvore – B – Exemplo Árvore-B de ordem 3. Remoção: 58 65 55 50 40 30 10 40 65 55 58 60 70 50 75 80 30 10 40 65 55 60 70 50 75 80 30 10 40 70 55 60 75 50 80 30 10 40 60 70 75 50 80 20 Remoção em Árvore – B – Exemplo Árvore-B de ordem 3. Remoção: 58 65 55 50 40 30 10 40 60 70 75 50 80 30 10 40 70 75 60 80 10 30 70 75 60 80 10 30 70 60 75 80 21 Implementação Estrutura de Dados: #define ORDEM 5 typedef struct no { int cnt, chave[ORDEM-1]; struct no *ptr[ORDEM]; } no; no *raiz; 22 Exercícios 1. Considere o seguinte grupo de chaves: (50) (80 10 60 20) (70 7 56 48 52) (57) a) Ilustre graficamente como fica uma árvore B de ordem 4 após a inserção (na mesma seqüência) de cada grupo de chaves (um desenho após a inserção de cada grupo). b) Ilustre graficamente como fica a mesma árvore B após a remoção (nessa seqüência, e após a remoção de cada grupo) dos seguintes grupos de chaves (7) (70 57) (60) (52) 2. Executar o programa btree.c para um conjunto de elementos escolhidos entre 1..1.000. Teste as operações de inclusão e exclusão de forma que ocorram ações de divisão e concatenação de páginas, bem como alteração da altura da árvore (aumento e diminuição). Mostrar os resultados das simulações realizadas.
Compartilhar