A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

INE5408 Estruturas de Dados Árvores B Exemplos de inserção e deleção segundo a interpretação de Alan Tharp do algoritmo de Bayer.

Apresentações semelhantes


Apresentação em tema: "INE5408 Estruturas de Dados Árvores B Exemplos de inserção e deleção segundo a interpretação de Alan Tharp do algoritmo de Bayer."— Transcrição da apresentação:

1 INE5408 Estruturas de Dados Árvores B Exemplos de inserção e deleção segundo a interpretação de Alan Tharp do algoritmo de Bayer

2 Definição (interpretação de Alan Tharp) Uma árvore B de ordem mínima t >= 1 é uma árvore com as seguintes propriedades: Cada nodo possui os seguintes campos:, P 1,,...,,P q > Descrição dos campos: NChaves – número de chaves armazenadas no nodo; Folha – flag indicando se o nodo é folha ou não; P i – ponteiro para o nodo filho i; K – chaves; Info i – ponteiro para o elemento de dados na memória ou para um registro em disco onde se encontra a chave K i ; Nº de chaves t <= q <= 2t + 1. –A situação q = 2t + 1 é instável e provoca a explosão do nodo no ajuste subseqüente da árvore. –A situação 0 < q < t é estável somente na raiz. Quando é forçada por uma deleção fora da raiz, provoca a imediata rotação de uma chave ou fusão do nodo com um irmão.

3 Inserção em uma árvore B (Alan Tharp) Algoritmo de inserção em uma árvore B: desça a árvore em busca da chave; a inserção é sempre feita nas folhas; ao retornar da inserção: verifique se o nodo está cheio (se contém 2t+1 chaves); se o nodo estiver cheio: –dividir o nodo ao meio; –colocar a chave do meio no nodo pai (se este também encher, repetir o processo recursivamente).

4 Inserção em uma árvore B (Alan Tharp) insere_B_tharp(nodoB raiz, infoB dado) variaveis nodoB filho = nulo; /* inicializa p/folha */ inicio SE raiz->folha ENTÃO /* insira na folha */ insere_folha_B(raiz, dado); SENÃO /* continua descendo */ filho <- selecionaRamoDescida_B(raiz, dado); insere_B(filho, dado); FIM SE /* retorna ajustando */ SE nodo_cheio_B(filho) ENTÃO /* se nodo possuir 2t+1 chaves, divida, lembrando de passar a raiz que se altera */ divide_nodo_B (raiz, filho); FIM SE fim

5 Exemplo: Criação de uma árvore-B de Ordem t=2 e inserção do 80 k 2t+1. Neste modelo você tem de prever uma área no nodo para a chave k 2t+1 e o ponteiro p 2t+1 para armazenar o dado de overflow. Esta posição não é mostrada na animação.

6 Inserção do 50: 80 move-se uma posição

7 Inserção do 95: inserção no fim

8 Inserção do 90: 95 move-se uma posição

9 Inserção do 60: Overflow. Valor central é 80 e dois novos nodos são gerados. 50. 60. 80. 90. 95. Área de Overflow do Nodo: q = 2t + 1

10 Inserção do 65

11 Inserção do 70

12 Inserção do 75: Overflow. Nodo dividido. Valor central é 65: sobe e desloca 80 uma posição.

13 Inserção do 55 e do 64: Só provocam reposicionamentos dentro da folha.

14 Inserção do 51: Overflow. Nodo dividido: 50 e 55 permanecem, 60 e 64 vão para o nodo novo. Valor central é 55: sobe e desloca 65 e 80 uma posição.

15 Inserção do 76 e 77.

16 Inserção do 78: Overflow. Nodo dividido: 70 e 75 permanecem, 77 e 78 vão para o nodo novo. Valor central é 76: sobe e desloca 80 uma posição Raiz finalmente está completa.

17 Inserção do 98 e 99.

18 Inserção do 96: Overflow. Nodo dividido: 90 e 95 permanecem, 98 e 99 vão para o nodo novo. Valor central é 96: sobe e provoca novo Overflow na raiz. Nodo-raiz dividido: 55 e 65 permanecem. 80 e 96 vão para o novo nodo. 76 sobre para nova raiz que é criada.

19 Deleções na mesma árvore (c/base na interpretação de Alan Tharp)

20 Deleção em uma árvore B (Alan Tharp) Regra 1 at : se a chave k está no nodo X e X é folha, então remova.

21 Deleção em uma árvore B (Alan Tharp) Regra 2 at : se a chave k está no nodo X e X é um nodo interno: a)se a subárvore Y predecessora inordem de X possui pelo menos t + 1 chaves: determine a chave predecessora inordem k' em Y substitua k por k' recursivamente exclua k' da subárvore Y b)se a subárvore Z sucessora inordem de X possui pelo menos t + 1 chaves: determine a chave sucessora inordem k' em Z substitua k por k' recursivamente exclua k' da subárvore Z c)se as subárvores Y e Z possuem apenas t chaves: funda k e todo o nodo Z em Y retire k e o apontador para Z de X libere o nodo Z recursivamente exclua k da subárvore Y

22 Deleção em uma árvore B (Alan Tharp) Regra 3 at : se a chave k não está em X e X é um nodo interno. 1.determine a raiz P i [X] da subárvore onde K deve estar 2.exclua recursivamente k de P i [X] 3.SE P i [X] tem apenas t-1 chaves: a)Rotação de chaves - se um dos vizinhos de P i [X] tem pelo menos t + 1 chaves : mova uma chave de X descendo para P i [X] mova uma chave do vizinho de P i [X] subindo para X mova o apontador apropriado do vizinho para P i [X] b)Fusão de nodos: se P i [X] e seus vizinhos têm apenas t chaves: funda P i [X] com um dos seus vizinhos e com a chave k i de X remova o par k i e p i de X libere o nodo apontado por Info i

23 Algoritmo de Deleção em Árvore B (o ajuste de nodo é que é diferente) deleta_B(nodoB pai, nodoB nodo, infoB dado) variaveis nodoB filho; inicio SE contem_chave_B(nodo, dado) ENTÃO SE raiz->folha ENTÃO /* caso 1 */ deleta_folha_B(nodo, dado); SENÃO /* caso 2 */ deleta_interno_B(pai, nodo, dado); FIM SE SENÃO /* desce recursivamente */ filho <- selecionaRamoDescida_B(nodo, dado); deleta_B(nodo, filho, dado); /* caso 3 depois de fazer tudo */ ajusta_nodo_B_tharp(nodo, filho, dado); FIM SE fim

24 Inserção de 62, 79, 91, 93 e 97 são realizadas nas folhas com apenas deslocamentos intra-nodais de posição de chaves.

25 Deleção do 90: deletamos de um nodo folha que não viola a condição de capacidade mínima (underflow).

26 Deleção do 76: Seu sucessor inordem (77) sobe da folha para ocupar seu lugar raiz sem causar underflow na folha.

27 Deleção do 79: deletamos de um nodo-folha: underflow. Rearranjamos: descendo seu sucessor inordem (80) do nodo-pai e subindo o sucessor inordem do pai (90) de seu nodo-irmão da direita. Recursivamente deletamos 90 do nodo-irmão da direita.

28 Deleção do 77: underflow provoca seqüência de junções de nodos. Ao deletar 77 seu, sucessor inordem 78 sobe da folha para a raiz: underflow nessa folha. Desce o sucessor inordem da folha (80): 91. Como a subida do sucessor inordem de 91 para repô-lo provoca underflow na folha-irmã, temos de fundir essa folha com o 91 (que desce) e a folha com (93,95). Isso provoca underflow no nodo interno (96), de onde o 91 saiu. Temos de fundir com a raiz e seu irmão da esquerda (55,65).


Carregar ppt "INE5408 Estruturas de Dados Árvores B Exemplos de inserção e deleção segundo a interpretação de Alan Tharp do algoritmo de Bayer."

Apresentações semelhantes


Anúncios Google