Organização de Dados-Arvore B, Notas de estudo de Informática
arnaldo-araujo-11
arnaldo-araujo-11

Organização de Dados-Arvore B, Notas de estudo de Informática

125 páginas
50Números de download
1000+Número de visitas
100%de 0 votosNúmero de votos
Descrição
Material sobre Estrutura de Dados Avançadas Árvores B
50 pontos
Pontos de download necessários para baixar
este documento
Baixar o documento
Pré-visualização3 páginas / 125
Esta é apenas uma pré-visualização
3 mostrados em 125 páginas
Esta é apenas uma pré-visualização
3 mostrados em 125 páginas
Esta é apenas uma pré-visualização
3 mostrados em 125 páginas
Esta é apenas uma pré-visualização
3 mostrados em 125 páginas
Árvores B

Árvores B

MO637 – Complexidade de Algoritmos II

14 de setembro de 2007

MO637 – Complexidade de Algoritmos II Árvores B

Overview

MO637 – Complexidade de Algoritmos II Árvores B

Overview

São árvores balanceadas, desenvolvidas para otimizar o acesso a armazenamento secundário

MO637 – Complexidade de Algoritmos II Árvores B

Overview

São árvores balanceadas, desenvolvidas para otimizar o acesso a armazenamento secundário

Os nós da árvore B podem ter muitos filhos. Esse fator de ramificação é determinante para reduzir o número de acessos a disco. Árvores B são balanceadas, ou seja, sua altura é O(lg(n))

MO637 – Complexidade de Algoritmos II Árvores B

Overview

São árvores balanceadas, desenvolvidas para otimizar o acesso a armazenamento secundário

Os nós da árvore B podem ter muitos filhos. Esse fator de ramificação é determinante para reduzir o número de acessos a disco. Árvores B são balanceadas, ou seja, sua altura é O(lg(n))

Árvores B são generalizações de árvores binárias balanceadas

MO637 – Complexidade de Algoritmos II Árvores B

Armazenamento Secundário

MO637 – Complexidade de Algoritmos II Árvores B

Armazenamento Secundário

Atualmente o armazenamento estável é feito em discos magnéticos, e o custo de cada acesso (da ordem de mili segundos) é muito alto quando comparado ao acesso à memória RAM (ordem de nano segundos)

MO637 – Complexidade de Algoritmos II Árvores B

Armazenamento Secundário

Atualmente o armazenamento estável é feito em discos magnéticos, e o custo de cada acesso (da ordem de mili segundos) é muito alto quando comparado ao acesso à memória RAM (ordem de nano segundos)

Toda vez que um acesso é feito, deve-se aproveita-lo da melhor maneira posśıvel, trazendo o máximo de informação relevante

MO637 – Complexidade de Algoritmos II Árvores B

Armazenamento Secundário

MO637 – Complexidade de Algoritmos II Árvores B

Armazenamento Secundário

A quantidade de dados utilizados numa árvore B óbviamente não cabem na memória de uma só vez, por isso é necessário paginá-la

MO637 – Complexidade de Algoritmos II Árvores B

Armazenamento Secundário

A quantidade de dados utilizados numa árvore B óbviamente não cabem na memória de uma só vez, por isso é necessário paginá-la

Especializações são feitas de acordo com as necessidades da aplicação. O fator de ramificação, por exemplo, pode variar de 3 a 2048 por exemplo (dependendo do buffer dos discos e do tamanho das páginas de memória alocados pelo SO)

MO637 – Complexidade de Algoritmos II Árvores B

Armazenamento Secundário

MO637 – Complexidade de Algoritmos II Árvores B

Armazenamento Secundário

Na grande maioria dos sistemas, o tempo de execução de um algoritmo de árvore-B é determinado pelas leituras e escritas no disco

MO637 – Complexidade de Algoritmos II Árvores B

Armazenamento Secundário

Na grande maioria dos sistemas, o tempo de execução de um algoritmo de árvore-B é determinado pelas leituras e escritas no disco

Um fator de ramificação alto reduz drasticamente a altura da arvore. Tomemos o exemplo:

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

Consideraremos que o os dados dos registros sejam guardados junto com a chave da árvore. Se estivéssemos usando uma árvore B+, os registros ficariam todos nas folhas:

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

Seja T uma árvore-B com raiz (root[T ]). Ela possuirá então as seguintes propriedades: 1. Todo o nó X tem os seguintes campos:

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

Seja T uma árvore-B com raiz (root[T ]). Ela possuirá então as seguintes propriedades: 1. Todo o nó X tem os seguintes campos:

a. n[x ], o número de chaves atualmente guardadas no nó x,

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

Seja T uma árvore-B com raiz (root[T ]). Ela possuirá então as seguintes propriedades: 1. Todo o nó X tem os seguintes campos:

a. n[x ], o número de chaves atualmente guardadas no nó x,

b. As n[x ] chaves, guardadas em ordem crescente, tal que key1[x ] ≤ key2[x ] ≤ ··· ≤ keyn[x][x ],

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

Seja T uma árvore-B com raiz (root[T ]). Ela possuirá então as seguintes propriedades: 1. Todo o nó X tem os seguintes campos:

a. n[x ], o número de chaves atualmente guardadas no nó x,

b. As n[x ] chaves, guardadas em ordem crescente, tal que key1[x ] ≤ key2[x ] ≤ ··· ≤ keyn[x][x ],

c. leaf [x ], Um valor booleano, TRUE se x é uma folha e FALSE se x é um nó interno

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

2. Cada nó interno x também contém n[x ] + 1 apontadores c1[x ], c2[x ], ...,cn[x]+1[x ] para os filhos. As folhas tem seu apontador nulo

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

2. Cada nó interno x também contém n[x ] + 1 apontadores c1[x ], c2[x ], ...,cn[x]+1[x ] para os filhos. As folhas tem seu apontador nulo

3. As chaves keyi [x ] separam os intervalos de chaves guardadas em cada sub-árvore: se ki é uma chave guardada numa sub-árvore com raiz ci [x ], então: k1 ≤ key1[x ] ≤ k2 ≤ key2[x ] ≤ ... ≤ keyn[x][x ] ≤ kn[x]+1

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

2. Cada nó interno x também contém n[x ] + 1 apontadores c1[x ], c2[x ], ...,cn[x]+1[x ] para os filhos. As folhas tem seu apontador nulo

3. As chaves keyi [x ] separam os intervalos de chaves guardadas em cada sub-árvore: se ki é uma chave guardada numa sub-árvore com raiz ci [x ], então: k1 ≤ key1[x ] ≤ k2 ≤ key2[x ] ≤ ... ≤ keyn[x][x ] ≤ kn[x]+1

4. Todas as folhas têm a mesma profundidade, que é a altura da árvore: h

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

5. Existem limites superiores e inferiores para o número de chaves num nó. Estes limites podem ser expressados em termos de um inteiro fixo t ≥ 2 chamado grau ḿınimo:

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

5. Existem limites superiores e inferiores para o número de chaves num nó. Estes limites podem ser expressados em termos de um inteiro fixo t ≥ 2 chamado grau ḿınimo:

a. Todo nó que não seja raiz deve ter pelo menos t− 1 chaves. Todo nó interno que não a raiz tem portanto t filhos. Se a árvore for não vazia, a raiz deve ter pelo menos uma chave

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

5. Existem limites superiores e inferiores para o número de chaves num nó. Estes limites podem ser expressados em termos de um inteiro fixo t ≥ 2 chamado grau ḿınimo:

a. Todo nó que não seja raiz deve ter pelo menos t− 1 chaves. Todo nó interno que não a raiz tem portanto t filhos. Se a árvore for não vazia, a raiz deve ter pelo menos uma chave

b. Cada nó pode conter no máximo 2t − 1 chaves. Portanto, um nó interno, pode ter no máximo 2t filhos. O nó é considerado cheio quando ele contém exatamente 2t − 1 chaves

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

Podemos ver o poder da árvore-B quando comparada a outros tipos de árvores balanceadas com altura O(log2(n)). No caso da árvore-B a base do logaritmo é proporcional ao fator de ramificação

MO637 – Complexidade de Algoritmos II Árvores B

Definição da árvore-B

Podemos ver o poder da árvore-B quando comparada a outros tipos de árvores balanceadas com altura O(log2(n)). No caso da árvore-B a base do logaritmo é proporcional ao fator de ramificação

Por exemplo, se tivermos um fator de ramificação 1000 e aproximadamente 1 milhão de registros, precisaremos de apenas log1000(10

6) ∼= 3 idas ao disco

MO637 – Complexidade de Algoritmos II Árvores B

Busca por Elemento

MO637 – Complexidade de Algoritmos II Árvores B

Busca por Elemento

A busca em uma árvore-B é similar à busca em uma árvore binária, só que ao invés de uma bifurcação em cada nó, temos vários caminhos a seguir de acordo com o número de filhos do nó

MO637 – Complexidade de Algoritmos II Árvores B

Busca por Elemento

A busca em uma árvore-B é similar à busca em uma árvore binária, só que ao invés de uma bifurcação em cada nó, temos vários caminhos a seguir de acordo com o número de filhos do nó

O algoritmo de busca na árvore é uma generalização da busca em uma árvore binária

MO637 – Complexidade de Algoritmos II Árvores B

Busca por Elemento

MO637 – Complexidade de Algoritmos II Árvores B

Busca por Elemento

A função B-TREE-SEARCH recebe o apontador para o nó raiz (x) e a chave k sendo procurada

MO637 – Complexidade de Algoritmos II Árvores B

Busca por Elemento

A função B-TREE-SEARCH recebe o apontador para o nó raiz (x) e a chave k sendo procurada

Se a chave k pertencer à árvore o algoritmo retorna o nó ao qual ela pertence e o ı́ndice dentro do nó correspondente à chave procurada, caso contrário, retorna NIL

MO637 – Complexidade de Algoritmos II Árvores B

B-TREE-SEARCH

B-TREE-SEARCH(x, k)

1 i ← 1 2 while i ≤ n[x ] and k > keyi [x ] do 3 i ← i + 1 4 if i ≤ n[x ] and k = keyi [x ] then 5 return (x, i) 6 if leaf [x ] then 7 return NIL 8 else DISK-READ(ci [x ]) 9 return B-TREE-SEARCH(ci [x ], k)

MO637 – Complexidade de Algoritmos II Árvores B

Busca por Elemento

MO637 – Complexidade de Algoritmos II Árvores B

Busca por Elemento

Como dito anteriormente, o número de acessos a disco é O(logt(n)) onde n é o número de chaves na árvore

MO637 – Complexidade de Algoritmos II Árvores B

Busca por Elemento

Como dito anteriormente, o número de acessos a disco é O(logt(n)) onde n é o número de chaves na árvore

Como em cada nó, é feita uma busca linear, temos um gasto de O(t) em cada nó. Sendo assim, o tempo total é de O(t ∗ logt(n))

MO637 – Complexidade de Algoritmos II Árvores B

Busca por Elemento: Exemplo

MO637 – Complexidade de Algoritmos II Árvores B

Busca por Elemento: Exemplo

MO637 – Complexidade de Algoritmos II Árvores B

Busca por Elemento: Exemplo

MO637 – Complexidade de Algoritmos II Árvores B

Busca por Elemento: Exemplo

MO637 – Complexidade de Algoritmos II Árvores B

Busca por Elemento: Exemplo

MO637 – Complexidade de Algoritmos II Árvores B

Inserção de Elemento

MO637 – Complexidade de Algoritmos II Árvores B

Inserção de Elemento

A inserção nas árvores-B são relativamente mais complicadas, pois, precisamos inserir a nova chave no nó correto da árvore, sem violar suas propriedades

MO637 – Complexidade de Algoritmos II Árvores B

Inserção de Elemento

A inserção nas árvores-B são relativamente mais complicadas, pois, precisamos inserir a nova chave no nó correto da árvore, sem violar suas propriedades

Como proceder se o nó estiver cheio?

MO637 – Complexidade de Algoritmos II Árvores B

Inserção de Elemento

A inserção nas árvores-B são relativamente mais complicadas, pois, precisamos inserir a nova chave no nó correto da árvore, sem violar suas propriedades

Como proceder se o nó estiver cheio?

Caso o nó esteja cheio, devemos separar (split) o nó ao redor do elemento mediano, criando 2 novos nós que não violam as definições da árvore

MO637 – Complexidade de Algoritmos II Árvores B

Inserção de Elemento

MO637 – Complexidade de Algoritmos II Árvores B

Inserção de Elemento

O elemento mediano é promovido, passando a fazer parte do nó pai daquele nó

MO637 – Complexidade de Algoritmos II Árvores B

Inserção de Elemento

O elemento mediano é promovido, passando a fazer parte do nó pai daquele nó

A inserção é feita em um único percurso na árvore, a partir da raiz até uma das folhas

MO637 – Complexidade de Algoritmos II Árvores B

Separação de Nó (Split)

MO637 – Complexidade de Algoritmos II Árvores B

Separação de Nó (Split)

O procedimento B-TREE-SPLIT-CHILD recebe como parâmetros um nó interno (não cheio) x um ı́ndice i e um nó y tal que Y = ci [x ] é um filho de x que está cheio

MO637 – Complexidade de Algoritmos II Árvores B

Separação de Nó (Split)

O procedimento B-TREE-SPLIT-CHILD recebe como parâmetros um nó interno (não cheio) x um ı́ndice i e um nó y tal que Y = ci [x ] é um filho de x que está cheio

O procedimento então, separa o nó ao redor do elemento mediano, copiando os elementos maiores que ele em z , deixando os menores em y , ajusta o contador de elementos de z e y para t − 1, e promove o elemento mediano

MO637 – Complexidade de Algoritmos II Árvores B

B-TREE-SPLIT-CHILD

B-TREE-SPLIT-CHILD(x, i, y) 1 z ← ALLOCATE-NODE() 2 leaf [z ]← leaf [y ] 3 n[z ]← t − 1 4 for j ← 1 to t − 1 do 5 keyj [z ]← keyj+t [y ] 6 if not leaf [y ] then 7 for j ← 1 to t do 8 cj [z ]← cj+t [y ] 9 n[y ]← t − 1 10 for j ← n[x ] + 1 downto i + 1 do 11 cj+1[x ]← cj [x ] (continua)

MO637 – Complexidade de Algoritmos II Árvores B

B-TREE-SPLIT-CHILD

B-TREE-SPLIT-CHILD(cont.) 12 ci+1[x ]← z 13 for j ← n[x ] downto i do 14 keyj+1[x ]← keyj [x ] 15 keyi [x ]← keyt [y ] 16 n[x ]← n[x ] + 1 17 DISK-WRITE(y) 18 DISK-WRITE(z) 19 DISK-WRITE(x)

MO637 – Complexidade de Algoritmos II Árvores B

Separação de Nó (Split): Exemplo

MO637 – Complexidade de Algoritmos II Árvores B

Separação de Nó (Split): Exemplo

MO637 – Complexidade de Algoritmos II Árvores B

Separação de Nó (Split): Exemplo

MO637 – Complexidade de Algoritmos II Árvores B

Separação de Nó (Split): Exemplo

MO637 – Complexidade de Algoritmos II Árvores B

Separação de Nó (Split): Exemplo

MO637 – Complexidade de Algoritmos II Árvores B

Separação de Nó (Split): Exemplo

MO637 – Complexidade de Algoritmos II Árvores B

Inserção com Split

MO637 – Complexidade de Algoritmos II Árvores B

Inserção com Split

Dessa maneira, em uma única passagem pela árvore, da raiz às folhas, inserimos uma determinada chave, dividindo (splits) cada nó da árvore que encontrarmos no caminho, caso o nó esteja cheio

MO637 – Complexidade de Algoritmos II Árvores B

Inserção com Split

Dessa maneira, em uma única passagem pela árvore, da raiz às folhas, inserimos uma determinada chave, dividindo (splits) cada nó da árvore que encontrarmos no caminho, caso o nó esteja cheio

O código a seguir faz uso de B-TREE-INSERT-NONFULL:

MO637 – Complexidade de Algoritmos II Árvores B

B-TREE-INSERT

B-TREE-INSERT(T, k) 1 r ← root[T ] 2 if n[r ] = 2t − 1 then 3 s ← ALLOCATE-NODE() 4 root[T ]← s 5 leaf [s]← FALSE 6 n[s]← 0 7 c1[s]← r 8 B-TREE-SPLIT-CHILD(s, 1, r) 9 B-TREE-INSERT-NONFULL(s, k) 10 else B-TREE-INSERT-NONFULL(r, k)

MO637 – Complexidade de Algoritmos II Árvores B

Inserção com Split

B-TREE-INSERT-NONFULL insere a chave k no nó x , caso este seja uma folha, caso contrário, procura o filho adequado e desce à ele recursivamente até encontrar a folha onde deve inserir k

MO637 – Complexidade de Algoritmos II Árvores B

B-TREE-INSERT-NONFULL

B-TREE-INSERT-NONFULL(x, k) 1 i ← n[x ] 2 if leaf [x ] then 3 while i ≥ 1 and k < keyi [x ] do 4 keyi+1[x ]← keyi [x ] 5 i ← i − 1 6 keyi+1[x ]← k 7 n[x ]← n[x ] + 1 8 DISK-WRITE(x) 9 else while i ≥ 1 and k < keyi [x ] do 10 i ← i − 1 11 i ← i + 1 12 DISK-READ(ci [x ]) (continua)

MO637 – Complexidade de Algoritmos II Árvores B

B-TREE-INSERT-NONFULL

B-TREE-INSERT-NONFULL(cont.) 13 if n[ci [x ]] = 2t − 1 then 14 B-TREE-SPLIT-CHILD(x , i , ci [x ]) 15 if k > keyi [x ] then 16 i ← i + 1 17 B-TREE-INSERT-NONFULL(ci [x ], k)

MO637 – Complexidade de Algoritmos II Árvores B

Inserção com Split

MO637 – Complexidade de Algoritmos II Árvores B

Inserção com Split

Logo, o procedimento de inserção leva O(t ∗ logt(n)), onde t é o tamanho da página da árvore e n é o número total de elementos

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

A remoção de uma chave é análoga à inserção, porém com alguns complicadores, já que uma chave pode ser removida de qualquer nó, seja ele raiz ou não

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

A remoção de uma chave é análoga à inserção, porém com alguns complicadores, já que uma chave pode ser removida de qualquer nó, seja ele raiz ou não

Assim como na inserção, precisamos garantir que, ao removermos a chave as propriedades da árvore-B não sejam violadas

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

A remoção de uma chave é análoga à inserção, porém com alguns complicadores, já que uma chave pode ser removida de qualquer nó, seja ele raiz ou não

Assim como na inserção, precisamos garantir que, ao removermos a chave as propriedades da árvore-B não sejam violadas

Da mesma maneira que tivemos de garantir que um nó não se tornasse grande demais na inserção, devemos garantir que ele não torne-se pequeno demais, ou seja, deve sempre ter pelo menos t − 1 elementos

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Sendo assim, seguiremos para os casos de remoção de chaves

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Sendo assim, seguiremos para os casos de remoção de chaves

Existem 6 casos posśıveis para a remoção de uma chave de uma árvore-B:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Sendo assim, seguiremos para os casos de remoção de chaves

Existem 6 casos posśıveis para a remoção de uma chave de uma árvore-B:

Caso 1. Se a chave k estiver numa folha da árvore e a folha possui pelo menos t chaves,remove-se a chave da árvore

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso1:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso1:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso1:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso1:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso1:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso 2. Se a chave k está num nó interno x o seguinte deve ser feito:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso 2. Se a chave k está num nó interno x o seguinte deve ser feito:

a. Se o filho y que precede k no nó x possui pelo menos t chaves, encontre o predecessor k ′ de k na sub-árvore com raiz em y . Remova k ′ do nó filho e substitua k por k ′ no nó atual

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso 2. Se a chave k está num nó interno x o seguinte deve ser feito:

a. Se o filho y que precede k no nó x possui pelo menos t chaves, encontre o predecessor k ′ de k na sub-árvore com raiz em y . Remova k ′ do nó filho e substitua k por k ′ no nó atual

b. Simetricamente, se o filho z que sucede k no nó x possui pelo menos t chaves, encontre o sucessor k ′ de k na sub-árvore com raiz em z . Remova k ′ do nó filho e substitua k por k ′ no nó atual

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso2 A/B:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso2 A/B:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso2 A/B:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso2 A/B:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso2 A/B:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso 2(cont.) Se a chave k está num nó interno x o seguinte deve ser feito:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso 2(cont.) Se a chave k está num nó interno x o seguinte deve ser feito:

c. Caso ambos y e z possuem somente t − 1 chaves, copie todos os elementos de z em y , libere a memória ocupada por z e remova o apontador em x e remova k de x .

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso2 C:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso2 C:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso2 C:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso2 C:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso 3 Se a chave k não está presente no nó interno x , determine a sub-árvore ci [x ] apropriada que deve conter k . Caso ci [x ] possuir somente t − 1 chaves, proceder da seguinte maneira:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso 3 Se a chave k não está presente no nó interno x , determine a sub-árvore ci [x ] apropriada que deve conter k . Caso ci [x ] possuir somente t − 1 chaves, proceder da seguinte maneira:

a. Se ci [x ] possui pelo menos t − 1 chaves mas possui um irmão adjascente com pelo menos t chaves copie para ci [x ] uma chave extra, movendo uma chave de x para ci [x ] em seguida movendo uma chave de um dos irmãos adjascentes a ci [x ] de volta para x e ajustando o apontador para o nó correspondente

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso3 A:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso3 A:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso3 A:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso3 A:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso3 A:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso 3(cont.) Se a chave k não está presente no nó interno x , determine a sub-árvore ci [x ] apropriada que deve conter k . Caso ci [x ] possuir somente t − 1 chaves, proceder da seguinte maneira:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso 3(cont.) Se a chave k não está presente no nó interno x , determine a sub-árvore ci [x ] apropriada que deve conter k . Caso ci [x ] possuir somente t − 1 chaves, proceder da seguinte maneira:

b. Se ci [x ] e ambos os seus irmãos esquerdo e direito possuem t − 1 chaves, una ci [x ] com um dos irmãos o que envolve mover uma chave de x para o novo nó que acabou de ser formado, sendo que x é o elemento mediano daquele nó

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso3 B:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso3 B:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso3 B:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso3 B:

MO637 – Complexidade de Algoritmos II Árvores B

Remoção de Chaves

Caso3 B:

MO637 – Complexidade de Algoritmos II Árvores B

Complexidade da Remoção

MO637 – Complexidade de Algoritmos II Árvores B

Complexidade da Remoção

Sabemos que antes da remoção, é feita uma busca por elemento na árvore, o que gasta O(t ∗ logt(n)), onde t é o tamanho da página da árvore e n é o número total de elementos

MO637 – Complexidade de Algoritmos II Árvores B

Complexidade da Remoção

Sabemos que antes da remoção, é feita uma busca por elemento na árvore, o que gasta O(t ∗ logt(n)), onde t é o tamanho da página da árvore e n é o número total de elementos

No pior caso, teremos todas as páginas da árvore com t-1 elementos pois esse é o limite inferior para cada página. Dáı teremos o seguinte:

MO637 – Complexidade de Algoritmos II Árvores B

Complexidade da Remoção

Somente os casos 2c e 3b poderão ocorrer e para qualquer um deles teremos o seguinte cenário:

MO637 – Complexidade de Algoritmos II Árvores B

Complexidade da Remoção

Somente os casos 2c e 3b poderão ocorrer e para qualquer um deles teremos o seguinte cenário:

Se o caso 2c ocorrer, teremos o nó que perdeu a chave com t − 2 chaves e t − 1 filhos pois já ocorreu um merge. Se for o caso 3c o pai terá t − 2 chaves e o elemento que perdeu o nó terá t chaves por causa do merge

MO637 – Complexidade de Algoritmos II Árvores B

Complexidade da Remoção

Somente os casos 2c e 3b poderão ocorrer e para qualquer um deles teremos o seguinte cenário:

Se o caso 2c ocorrer, teremos o nó que perdeu a chave com t − 2 chaves e t − 1 filhos pois já ocorreu um merge. Se for o caso 3c o pai terá t − 2 chaves e o elemento que perdeu o nó terá t chaves por causa do merge

Em qualquer um dos dois a reação disparada para corrigir a árvore será a mesma pois isso encaixa o nó com t − 2 chaves na situação do caso 3b. Ou seja, uma chave será rebaixada da página pai para ele, e um merge dele com um dos irmãos será feito

MO637 – Complexidade de Algoritmos II Árvores B

Complexidade da Remoção

MO637 – Complexidade de Algoritmos II Árvores B

Complexidade da Remoção

Agora, o nó pai é que possui t − 2 chaves repetindo a situação anterior. Ou seja a operação propaga-se num determinado subconjunto de páginas até chagar à raiz

MO637 – Complexidade de Algoritmos II Árvores B

Complexidade da Remoção

Agora, o nó pai é que possui t − 2 chaves repetindo a situação anterior. Ou seja a operação propaga-se num determinado subconjunto de páginas até chagar à raiz

Como os merge copiam t − 1 elementos a cada ńıvel da árvore teremos uma complexidade de O((t − 1) ∗ logt(n)) para os merge onde logt(n) é a altura da árvore

MO637 – Complexidade de Algoritmos II Árvores B

Complexidade da Remoção

Agora, o nó pai é que possui t − 2 chaves repetindo a situação anterior. Ou seja a operação propaga-se num determinado subconjunto de páginas até chagar à raiz

Como os merge copiam t − 1 elementos a cada ńıvel da árvore teremos uma complexidade de O((t − 1) ∗ logt(n)) para os merge onde logt(n) é a altura da árvore

Dessa maneira a complexidade da remoção é dada por: O(t ∗ logt(n)) + O((t − 1) ∗ logt(n)) = O(t ∗ logt(n))

MO637 – Complexidade de Algoritmos II Árvores B

Endereço das Animações

MO637 – Complexidade de Algoritmos II Árvores B

Endereço das Animações

Vivio B-Tree (necessita do plug-in vivio): https://www.cs.tcd.ie/Jeremy.Jones/vivio/trees/B-tree.htm Busca no Google: vivio b tree animation

MO637 – Complexidade de Algoritmos II Árvores B

Endereço das Animações

Vivio B-Tree (necessita do plug-in vivio): https://www.cs.tcd.ie/Jeremy.Jones/vivio/trees/B-tree.htm Busca no Google: vivio b tree animation

slady: Java B-Tree applet animation http://slady.net/java/bt/view.php Busca no Google: b tree animation java

MO637 – Complexidade de Algoritmos II Árvores B

Até o momento nenhum comentário
Esta é apenas uma pré-visualização
3 mostrados em 125 páginas