E Essttrr u uttuurraass ddee D D
Dicionários: B-Trees
Dicionários: B-Trees
Estruturas de Dados
2003/04
Aula teórica de 2003.11.12 (T9)
©2003 Salvador Abreu
E Essttrr u uttuurraass ddee D D
Motivação
Motivação
●
Grandes quantidades de informação
Grandes quantidades de informação
– Requer armazenamento externo (disco)Requer armazenamento externo (disco) – Acesso a disco lento (várias ordens de Acesso a disco lento (várias ordens de
grandeza pior que memória) grandeza pior que memória)
– Procurar organização que minimize acessos Procurar organização que minimize acessos a disco talvez desprezando quantidade de a disco talvez desprezando quantidade de processamento?
processamento?
●
Organização em árvore
Organização em árvore
– Árvore de grau KÁrvore de grau K
E Essttrr u uttuurraass ddee D D
Exemplo
Exemplo
●
Registo Civil
Registo Civil
– Bilhetes de IdentidadeBilhetes de Identidade
– Cerca de 10.000.000 registos diferentesCerca de 10.000.000 registos diferentes – Cada registo:Cada registo:
● Nomes (próprio, pai, mãe): 128 bytes cadaNomes (próprio, pai, mãe): 128 bytes cada
● Datas, locais, etc.: 128 bytesDatas, locais, etc.: 128 bytes
● => Total => Total 1K byte por registo1K byte por registo
●
Servidor
Servidor
– 1 IPC @ 2GHz, 1000 APS1 IPC @ 2GHz, 1000 APS
– 100 utilizadores simultâneos100 utilizadores simultâneos
E Essttrr u uttuurraass ddee D D
Exemplo: árvore binária
Exemplo: árvore binária
●
Supondo AVL (ou outra binária
Supondo AVL (ou outra binária
equilibrada)
equilibrada)
– Profundidade: logProfundidade: log22(10(1077) ~ ) ~ 2727
– Pesquisa feita em média em 27 acesso, a 10 Pesquisa feita em média em 27 acesso, a 10 APS = 2.7s
APS = 2.7s
●
Se variarmos o grau (N) da árvore
Se variarmos o grau (N) da árvore
– N=5N=5: P=log: P=log55(10(1077) ~ ) ~ 1111; GD = ; GD = 60%60% – N=10N=10: P=log: P=log1010(10(1077) ~ 7) ~ 7; GD = 75%; GD = 75%
E Essttrr u uttuurraass ddee D D
Exemplo
Exemplo
●
Grau suficientemente alto:
Grau suficientemente alto:
– Limite superior sobre o número de acessos a disco: Limite superior sobre o número de acessos a disco: objectivo valor pequeno (3-5 acessos.)
objectivo valor pequeno (3-5 acessos.)
●
Resta saber como fazer...
Resta saber como fazer...
– Ideia geral: árvore N-ária.Ideia geral: árvore N-ária.
– Cada nó contém K=O(N) chaves.Cada nó contém K=O(N) chaves.
– Busca envolve fazer uma pesquisa (p/ex binária) Busca envolve fazer uma pesquisa (p/ex binária) sobre cada nó.
sobre cada nó.
E Essttrr u uttuurraass ddee D D
B-Tree: Esquema
B-Tree: Esquema
k1 k2 k3 ki <k1 k1<k<k2 k>kiE Essttrr u uttuurraass ddee D D
O que são: B-Trees
O que são: B-Trees
●
Definição (“Propriedade BT”):
Definição (“Propriedade BT”):
– B-Tree de ordem MB-Tree de ordem M
● Nós interiores:Nós interiores:
– Entre ceil(M/2) e M filhosEntre ceil(M/2) e M filhos
– Se tiver N<=M filhos, terá exactamente N-1 chavesSe tiver N<=M filhos, terá exactamente N-1 chaves
● Folhas: todas à mesma profundidadeFolhas: todas à mesma profundidade
– Por construçãoPor construção
– Têm entre 1 e M-1 chavesTêm entre 1 e M-1 chaves
● Raíz: folha ou tem no máximo M filhosRaíz: folha ou tem no máximo M filhos
– Nós interiores:Nós interiores:
● Referências aos filhos (F[i], i=1..M)Referências aos filhos (F[i], i=1..M)
● Chaves contidas (K[i], i=1..M-1)Chaves contidas (K[i], i=1..M-1)
– FolhasFolhas
E Essttrr u uttuurraass ddee D D
Exemplos simples
Exemplos simples
●
Ex: B-tree de ordem 3, tb designada por árvore
Ex: B-tree de ordem 3, tb designada por árvore
2-3
2-3
– 3: grau máximo dos nós3: grau máximo dos nós
– 2: número máximo de chaves nos nós2: número máximo de chaves nos nós
E Essttrr u uttuurraass ddee D D
B-Tree: Exemplo
B-Tree: Exemplo
15 0 7, 8 12, 13 17, 18 2, 5 10 3E Essttrr u uttuurraass ddee D D
B-Tree: Pesquisa
B-Tree: Pesquisa
●
Simples, semelhante a pesquisa binária
Simples, semelhante a pesquisa binária
– em cada nó interiorem cada nó interior
● Se X=K[i], encontramosSe X=K[i], encontramos
● Se K[i-1]<X<K[i], procurar no filho F[i]Se K[i-1]<X<K[i], procurar no filho F[i]
– nas folhasnas folhas
E Essttrr u uttuurraass ddee D D
B-Tree: Inserção
B-Tree: Inserção
●
Inicialmente igual à pesquisa, obtemos a
Inicialmente igual à pesquisa, obtemos a
folha onde seria para inserir
folha onde seria para inserir
– Forçosamente numa folhaForçosamente numa folha
●
Caso não haja violação da propriedade
Caso não haja violação da propriedade
BT (i.e. há menos que M valores na
BT (i.e. há menos que M valores na
folha):
folha):
– Inserimos e pronto.Inserimos e pronto.
– Possivelmente há que ajustar os valores de Possivelmente há que ajustar os valores de mj nos no caminho até à folha
mj nos no caminho até à folha
●
Caso não caiba: temos de repor a
Caso não caiba: temos de repor a
"legalidade"...
"legalidade"...
E Essttrr u uttuurraass ddee D D
B-Tree: Re-equilibrar (insersão)
B-Tree: Re-equilibrar (insersão)
●
Dá-se mais um irmão à folha onde se iria
Dá-se mais um irmão à folha onde se iria
inserir:
inserir:
● Transita-se uma chave Km (mediana) da antiga folha Transita-se uma chave Km (mediana) da antiga folha
(aumentada com a chave a inserir) para o pai (aumentada com a chave a inserir) para o pai
● Divide-se os valores (<Km, >Km) entre as novas folhasDivide-se os valores (<Km, >Km) entre as novas folhas
●
Caso não seja possível (pai já tem M filhos)
Caso não seja possível (pai já tem M filhos)
– Dividir o pai em dois:Dividir o pai em dois:
● cada um com a metade dos filhos (que ficam na mesma)cada um com a metade dos filhos (que ficam na mesma)
● Transitando uma chave (mediana) do antigo pai para o Transitando uma chave (mediana) do antigo pai para o
avô avô
●
Caso não seja possível, repetir operação ao
Caso não seja possível, repetir operação ao
nível do avô, etc... até à raíz
nível do avô, etc... até à raíz
E Essttrr u uttuurraass ddee D D
B-Tree: Re-equilibrar (insersão)
B-Tree: Re-equilibrar (insersão)
●
Chegando à raíz, e esta estando cheia…
Chegando à raíz, e esta estando cheia…
– Cria-se uma Cria-se uma nova raíznova raíz..
● Com a mediana (Km) da antigaCom a mediana (Km) da antiga
– Parte-se a antiga raíz em doisParte-se a antiga raíz em dois
● Dividindo os valores da raíz anterior (<Km, >Km)Dividindo os valores da raíz anterior (<Km, >Km)
●
Mantém-se os filhos e fica-se com uma árvore
Mantém-se os filhos e fica-se com uma árvore
mais profunda
mais profunda
E Essttrr u uttuurraass ddee D D
B-Tree: Exemplo (1)
B-Tree: Exemplo (1)
●
Inserção dos inteiros
Inserção dos inteiros
0, 5, 10, 15, 2, 7, 12, 17, 3, 8, 13, 18 0, 5, 10, 15, 2, 7, 12, 17, 3, 8, 13, 18 0 0,5 0,5,10 5 0 10 5 0 10, 15 5 0, 2 10, 15 5 0, 2 7, 10, 15 5, 10 0, 2 7 15
E Essttrr u uttuurraass ddee D D
B-Tree: Exemplo (2)
B-Tree: Exemplo (2)
5, 10 0, 2 7 12, 15 5, 10 0, 2 7 12, 15, 17 5, 10, 15 0, 2 7 12 17 15 5 10E Essttrr u uttuurraass ddee D D
B-Tree: Exemplo (3)
B-Tree: Exemplo (3)
15 0 7, 8 12, 13 17, 18 2, 5 10 3E Essttrr u uttuurraass ddee D D
B-Tree: remoção
B-Tree: remoção
• Semelhante à inserção
Semelhante à inserção
• Se número de elementos da folha resultante
Se número de elementos da folha resultante
>1, não precisa fazer mais nada.
>1, não precisa fazer mais nada.
• Se número de elementos da folha = 1
Se número de elementos da folha = 1
– Combinar elemento restante com um irmãoCombinar elemento restante com um irmão
– Se passou a ser filho único, repetir operação ao Se passou a ser filho único, repetir operação ao nível superior
nível superior
– Se se chegar à raíz, toma-se como nova raíz o seu Se se chegar à raíz, toma-se como nova raíz o seu filho único
E Essttrr u uttuurraass ddee D D
B-Tree: análise
B-Tree: análise
• Profundidade máx. duma B-Tree de ordem M
Profundidade máx. duma B-Tree de ordem M
– ceil(logceil(logfloor(M/2)floor(M/2) N) N)
• Pesquisa
Pesquisa
– Em cada nó, fazemos O(log M) trabalho para Em cada nó, fazemos O(log M) trabalho para
determinar por onde vamos (c/ pesquisa binária) determinar por onde vamos (c/ pesquisa binária)
– pior caso: O(log N)pior caso: O(log N)
• Inserção e remoção
Inserção e remoção
– Como pesquisa, mas podemos ter de fazer O(M) Como pesquisa, mas podemos ter de fazer O(M) para repor as condições
para repor as condições
E Essttrr u uttuurraass ddee D D
B-Tree: usos
B-Tree: usos
• Uso principal: Bases de dados
Uso principal: Bases de dados
– Árvore mantida em disco, não em memóriaÁrvore mantida em disco, não em memória
– Número de acessos a nós = número de acessos a Número de acessos a nós = número de acessos a disco
disco
• Operação sempre muito lentaOperação sempre muito lenta
• Convem que sejam poucos (e grandes)Convem que sejam poucos (e grandes)
• O(logO(logMM N) N)
– Na prática, usam-se valores de M que:Na prática, usam-se valores de M que:
• sejam “grandes”sejam “grandes”
• permitam que um nó inteiro caiba num permitam que um nó inteiro caiba num blocobloco de disco de disco (p/ex uma página de VM, tipicamente 8K)
(p/ex uma página de VM, tipicamente 8K)