140 likes | 226 Views
Operações de Inserção e Remoção – BTree Resumo. Profa. Sandra de Amo BCC - UFU. Inserção de Registros nas Folhas. Caso a ocupação não fique acima da máxima : insere, não altera nada nos niveis superiores Caso a ocupação fique acima da máxima Tenta distribuição com vizinho à direita.
E N D
Operações de Inserção e Remoção – BTreeResumo Profa. Sandra de Amo BCC - UFU
Inserção de Registros nas Folhas • Caso a ocupação não fique acima da máxima : insere, não altera nada nos niveis superiores • Caso a ocupação fique acima da máxima • Tenta distribuição com vizinho à direita. • Caso não der: tenta distribuição com vizinho à esquerda • Caso não der: Divide folha com nó inserido, produzindo dois nós N1 e N2. • N2 precisa de um ponteiro vindo do nó acima !
Inserção: distribuição nas folhas • Não há aumento no número de folhas • Não há aumento de ponteiros vindo do nivel superior • Não há aumento de registros no nó pai • Não há modificações propagadas para os níveis superiores ao nível do nó pai. • Só há modificação de registro R no nó pai: • R = registro do lado esquerdo do ponteiro apontando para a folha da direita.
Inserção: Divisão de 1 folha em 2 folhas F1 e F2 • Número de folhas cresce de um. • Número de ponteiros saindo do nó pai cresce de um. • Número de registros no nó pai devecrescer de um. Caso nó pai não tenha ocupação máxima antes da alteração: • Primeiro registro de F2 sobe para nó pai em posição adequada. • Ponteiro à esquerda do novo nó deve apontar para F1 • Ponteiro à direita do novo nó deve apontar para F2
Inserção: Divisão de 1 folha em 2 folhas F1 e F2 Caso nó pai tenha ocupação máxima antes da alteração: • Subida de registro para o nó pai causa overflow no nó. • Nó pai fica com 2d+1 elementos após “subida” • Solução simples • Divide nó pai em dois nós N1 e N2 com d elementos cada (ocupação mínima) • Elemento do meio M sobe para nó pai do pai. • Ponteiros do nó pai para seus filhos não são alterados ! • Ponteiros à esquerda e à direita de M apontam para N1 e N2 respectivamente
Remoção de Registros nas Folhas • Caso a ocupação não fique abaixo da mínima : remove, não altera nada nos niveis superiores • Caso a ocupação fique abaixo da minima • Tenta distribuição com vizinho à direita. • Caso não der: tenta distribuição com vizinho à esquerda • Caso não der: Junta folha com nó removido com à direita ou, se não der, com a esquerda.
Remoção: distribuição nas folhas • Não há diminuição no número de folhas • Não há diminuição de ponteiros vindo do nivel superior • Não há diminuição de registros no nó pai • Não há modificações propagadas para os níveis superiores ao nível do nó pai. • Só há modificação de registro R no nó pai: • R = registro do lado esquerdo do ponteiro apontando para a folha da direita envolvida na distribuição
Remoção: Junção de 2 folhas • Número de folhas decresce de um. • Número de ponteiros decresce de um. • Número de registros no nó pai decresce de um. • Caso nó pai não fique abaixo da ocupação minima • Remove-se registro R à esquerda do ponteiro apontando para o nó do nível inferior, à direita. • Caso nó pai fique abaixo da ocupação minima • Tenta JUNTAR com nó irmão, à direita ou à esquerda. • Caso não der para juntar (pois o resultado teria ocupação maior do que a máxima), DISTRIBUI com um dos nós irmãos (tente primeiro o da direita, se não der, tente o da esquerda).
Remoção: Junção de nós N1 e N2 em um nível intermediário I • Há diminuição de nós no nível I. • Porém o número K de ponteiros saindo do nível I deve continuar o mesmo que antes da junção, pois o nível abaixo (I+1) necessita de K ponteiros ! • Logo, é necessário que apareça um novo registro no nível I. (1) • Há diminuição de ponteiros vindo do nível I-1 (pois houve diminuição de nós no nível I). • Logo, há diminuição de registros no nível I-1. (2) • De (1) e (2) conclui-se que • um registro do nível I-1 deve descer para o nível I • Qual é este nó que desce ? • Registro R à esquerda do ponteiro apontando para o nó N2 (da direita) DESCE para o novo nó juntado N1+N2. • Este ponteiro da esquerda é eliminado do nível I-1 Modificação se propaga recursivamente para o nível I-1, já que houve diminuição de nós neste nível
Remoção: Distribuição de elementos entre nós N1 e N2 em um nível intermediário I • Não há diminuição de nós no nível I. • Não há diminuição de ponteiros vindo do nível I-1. • Não há diminuição de registros no nível I-1
Entretanto, as coisas não são tão simples assim... Supondo que o último registro do nó N1 virou primeiro registro do nó N2 Nível I - 1 22 < 22 ≥ 22 Nível I ??? Nó N2 Nó N1 17 5 13 5 17 13 20 30 1 ponteiro para 2 nós ?? O ponteiro vermelho não pode ser eliminado. Logo, o preto será eliminado. O registro 17 deve sumir do nó N1! Nível I+1 1 nó para 2 ponteiros ?? ≥ 17 < 20 ≥30 20 ≤ chave < 22 22 ≤ chave < 30 É preciso mais um registro entre o 20 e o 30 para ganhar um ponteiro !
Ajuste final 22 < 17 ≥ 17 17 17 5 13 5 17 13 20 30 5 13 ≥ 13 < 17 ≥ 17 < 20 ≥30 20 ≤ chave < 22 22 ≤ chave < 30
Exercicio para entregar • Você acha que o ajuste final poderia ser feito “subindo” o 20 e descendo o 22 ao invés de “subir” o 17 e descer o 22 ? Explique sua resposta ! 20 17 17 5 13 5 17 13 22 30 5 13 ? ? ? Sugestão: para onde apontariam os ponteiros à direita de 17 e à esquerda de 22 ? E o ponteiro à direita do 22 ? Reveja slides 11, 12 e 13
Exercicio: Remove 34* 21 50 17 5 13 5 18 13 20 27 30 2* 3* 5* 7* 8* 14* 16* 18* 19* 20* 21* 22* 24* 27* 29* 33* 34*