You are on page 1of 22

Estruturas de Dados

Prof. Ricardo J. G. B. Campello

Árvores B – Partes I e II
Motivação & Construção Bottom-Up

Adaptado e Estendido dos Originais de:

Leandro C. Cintra
Maria Cristina F. de Oliveira

A Invenção da B-Tree
 Bayer and McGreight, 1972, publicaram o
artigo: "Organization and Maintenance
of Large Ordered Indexes"

 Em 1979, o uso de árvores-B para


manutenção de arquivos de índice de bases
de dados já era praticamente padrão em
sistemas de arquivos de propósito geral

1
Problema
 Acesso a disco é muito custoso (lento)
 Se um arquivo de índice é grande e não cabe
em memória RAM, pode exigir muitos acessos
 Por exemplo, via busca binária:
 1.000 itens podem requerer log2(1000) ≅ 10 acessos
 Número muito alto para relativamente poucos itens
 Ainda pior, exige manter o arquivo de índice ordenado...

 Solução ?
3

Arquivos Paginados

 A busca (seek) por uma posição específica do


disco é lenta

 Mas uma vez encontrada a posição, pode-se ler


seqüencialmente uma grande quantidade de itens
do arq. de índice a um custo relativamente baixo

 Esta combinação de busca lenta e transferência


rápida sugere a noção de página

2
Arquivos Paginados

 Página:
 Um conjunto de itens fisicamente contíguos passíveis
de serem recuperados em um único acesso
 p. ex. ocupando um setor ou cluster

 se o próximo item a ser recuperado estiver na mesma página


do anterior, evita-se um novo acesso ao disco

 página acessada pode ser mantidas em RAM

 Pode conter um número grande de itens

Árvores Binárias Paginadas

3
Árvores Binárias Paginadas
 Na ABB da figura anterior:
 qq. dos 63 itens é recuperado em, no máximo, 2 acessos !
 Com um nível adicional:
 ter-se-ão 64 novas páginas
 o que representa 64 x 7 = 448 itens adicionais
 qq. dos 511 itens é recuperado em, no máximo, 3 acessos !
 Com outro nível adicional:
 qualquer dos 4095 itens pode ser recuperado em no máx. 4 acessos !
 busca binária de 4095 itens pode demandar até 12 acessos

Árvores Binárias Paginadas


 Outro Exemplo:
 páginas com 511 itens

 cada página contém uma árvore completamente balanceada

 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 = 511 itens

 ABB com 3 níveis pode armazenar 134.217.727 itens


 511 + 512*511 + 5122*511 = 134.217.727

 qq. item é recuperado em, no máximo, 3 acessos !!!

4
Árvores Binárias Paginadas

 Desempenho de Pior Caso:


 ABB paginada: logk+1(n+1) acessos

 k = no. de itens por página (k=1 para a versão não paginada)

 n = no. de itens na árvore

 Exemplo anterior:
 k = 511: log511+1(134.217.728) = 3 acessos

 ABB não paginada (k=1): log2 (134.217.728) = 27 acessos

Árvores Binárias Paginadas

 É simples construir uma árvore paginada


se todo o conjunto de chaves é conhecido
antes de iniciar a construção
 Toma-se a chave mediana para obter uma
divisão balanceada, de forma recursiva
 Porém, é complicado se as chaves são
recebidas em uma seqüência aleatória
10

5
Árvores Binárias Paginadas
 Exemplo: C S D T A M P I B W N G U R K E H O L J Y Q Z F X V

11

Árvores Binárias Paginadas


 No exemplo anterior:
 Construção top-down, a partir da raiz

 Sempre que uma chave é inserida, a árvore dentro da


página é reajustada para manter o balanceamento interno

 Problema:
 Chaves pequenas no topo, como C e D, podem acabar
desbalanceando a árvore de forma definitiva
 A árvore do exemplo não está tão ruim, mas o que aconteceria se as
chaves fossem fornecidas em ordem alfabética?

12

6
Árvores Binárias Paginadas

 Problema:
 É necessário manter o balanceamento após inserções e remoções
 com a restrição dos itens estarem agrupados em páginas...

 Questões :
 como garantir que as páginas formem uma árvore balanceada ?
 p. ex., como impedir o agrupamento de chaves como C, D e S no exemplo anterior ?

 como garantir que cada página contenha um no. mínimo de chaves ?


 para evitar fragmentação do arquivo / disco

13

Árvores Binárias Paginadas

 Em resumo, como garantir:


 que as páginas formem uma árvore balanceada ?
 que cada página contenha um no. mínimo de chaves ?
 Rotações AVL não satisfazem as necessidades acima
 não se pode rotar páginas inteiras como se fossem itens individuais
 páginas contêm múltiplas chaves e múltiplos descendentes
 rotações tradicionais implicariam a modificação de várias páginas
 não possuem apenas efeitos locais

 Solução: Árvores B !
14

7
Árvores B
 Características
 paginadas
 balanceadas
 bottom-up para a criação
 nós folhas → nó raiz
 Inovação
 não é necessário construir a árvore a partir
da raiz, como é feito para ABBs e AVLs
15

Construção Bottom-Up
 Conseqüências
 não mais se aloca chaves inadequadas na raiz
 chaves na raiz da árvore “emergem” naturalmente

 não é mais necessário tratar o problema de


desbalanceamento após este ocorrer
 como rebalancear uma árvore paginada não é
mais uma questão a resolver a posteriori
 balanceamento ocorre naturalmente
16

8
Características
 Nó = Página em Disco:
 Contém uma seqüência de itens ordenados por
chave
 item = (chave, endereço)
 endereço = localização do registro no arquivo principal
 itens de tamanho fixo → páginas com no. fixo de itens

 Contém um conjunto de ponteiros


 número de ponteiros = número de chaves + 1

17

Estrutura Lógica de um Nó
chave
de endereço
busca

chave chave chave ... chave chave


1 2 3 q-1 q

< chave 1 > chave 1 > chave 2 > chave q-1 > chave q
< chave 2 < chave 3 < chave q

18

9
Características
 Ordem:
 No. máx. de ponteiros que podem ser armazenados em um nó
 Exemplo: árvore B de ordem 8
 máximo de 7 chaves e 8 ponteiros

* A * B *C *D *E * F *G *

 Observações
 no. máx. de ponteiros = no. máx. de descendentes de um nó
 nós folhas não possuem filhos, e seus ponteiros são nulos
19

Exemplo de Árvore B (ordem 4)


D H K

* A * B * C * * E * G * * * I * J * * * L * M * *

Por simplicidade, ao longo das discussões subseqüentes destacaremos


apenas as chaves dos itens, assim como no exemplo acima

20

10
Exemplo de Árvore B (ordem 4)
D H K

* A * B * C * * E * G * * * I * J * * * L * M * *

 Ponteiros:
 Em nós folha: sempre nulos (*)
 Em nós internos: localização do nó descendente ou nulo (*) se este não existe
21

Inserção de Itens
 Característica:
 sempre realizada nos nós folha
 Situações a Serem Analisadas:
 árvore vazia (situação inicial)
 inserção nos nós folhas
 sem overflow
 com overflow
 com overflow no nó raiz
22

11
Inserção: Situação Inicial
 Criação e Preenchimento do 1º Nó:
 1ª chave (árvore vazia): criação do nó raiz
 demais chaves: inserção até capacidade do nó
 raiz como nó folha

 Exemplo:
 nó com capacidade para 7 chaves
 chaves: letras do alfabeto
23

Inserção: Situação Inicial


 Exemplo (cont.):
 Chaves B C G E F D A
 inseridas desordenadamente
 mantidas ordenadas internamente ao nó
 a cada chave, página é lida, reordenada em RAM e rescrita

* A * B *C *D *E * F *G *

24

12
Inserção: Overflow Na Raiz
 Passo 1 – Particionamento do Nó (Split)
 nó original → nó original + novo nó
 split “1-to-2” ou “two-way”

 chaves são distribuídas uniformemente nos nós


 chaves do nó original + nova chave

 Exemplo: Inserção de J
* A * B *C *D * * * * * E * F *G * J * * * *
25

Inserção: Overflow Na Raiz


 Passo 2 – Criação de uma Nova Raiz
 existência de um nível mais alto na árvore
permite a escolha da chave separadora
 Exemplo: qual deve ser a chave separadora?

* * * * * *

* * * * * * * * * * * * * * * *
26

13
Inserção: Overflow Na Raiz
 Passo 3 – Promoção de Chave
 primeira chave do novo nó resultante do
split é promovida para o nó raiz
 Exemplo:
E * * * * * *

* A * B *C *D * * * * * F *G * J * * * * *
27

Inserção: Nós Folhas


 Passo 1 – Pesquisa
 árvore é percorrida até encontrar o nó folha no qual
a nova chave será inserida
 página correspondente é lida em RAM

 Passo 2 – Inserção em Nó com Espaço


 chave é inserida
 página é reordenada e rescrita

28

14
Inserção: Nós Folhas
 Inserção em Nó com Espaço (Exemplo):
 Inserção da chave H

 Antes e Depois: E * * * * * *

* A * B *C * D * * * * * F *G * J * * * * *

E * * * * * *

* A * B *C * D * * * * * F *G * H * J * * * * 29

Inserção: Nós Folhas


 Passo 2 – Inserção em Nó Cheio (Overflow)
 Particionamento (split):
 criação de um novo nó folha
 nó original → nó original + novo nó
 distribuição uniforme das chaves nos dois nós
 Promoção:
 1a chave do novo nó promovida a chave separadora no nó pai
 reordenação e ajuste do nó pai para apontar para o novo nó
 eventual propagação de overflow…
30

15
Exemplo
 Insira as seguintes chaves em um árvore B:
 CSDTAMPIBWNGURKEHOLJYQZFXV

 Ordem da árvore B: 4
 em cada nó (página)
 número de chaves: 3

 número de ponteiros: 4

31

C S D T A M ...
 1 – Inserção de C, S, D
 criação do nó raiz
 C
 C S
 C D S

0
C D S

-1 -1 -1 -1
32

16
C S D T A M ...
 2 – Inserção de T
 nó raiz cheio
• split do nó
• criação de uma nova raiz
2 • promoção de S
S

0 1
C D T
S T

33

C S D T A M ...
 3 – Inserção de A
 nó folha com espaço

2
S

0 1
A C D T

34

17
C S D T A M ...
 4 – Inserção de M
 nó folha 0 cheio
• split do nó
• promoção de D
2 S
D S

0 3 1
A C M T
D M

35

... P I B W N G U R K ...
 5 – Inserção de P, I, B, W
 nós folhas com espaço

2
D S

0 3 1
A B C I M P T W
A C M T
M P
36

18
... P I B W N G U R K ...
 6 – Inserção de N
 nó folha 3 cheio
• split do nó
• promoção de N
2 D S
D N S

0 3 4 1
A B C I M P T W
I M P N P

37

... G U R K ...
 7 – Inserção de G, U, R
 nós folhas com espaço

2
D N S

0 3 4 1
A B C G I M P R T U W
I M P T W

38

19
... G U R K ... • split do nó 3
• promoção de K
• split do nó 2
 8 – Inserção de K • criação de uma nova raiz
7 • promoção de N
 nó folha 3 cheio
N

2 D N S 6 N S
D K S

0 3 5 4 1
A B C G I M P R T U W
G I M K M

39

... E H O L J Y Q Z F X V
 Exercício:
 Finalizar a construção da árvore...

40

20
Exercícios

 Estime a quantidade de acessos no pior caso de


busca por um item em um arquivo com 16.777.215
itens organizado como uma ABB completamente
balanceada não paginada

 Repita o exercício 3 assumindo uma paginação com


k = 63 itens por página

41

Exercícios

 Na árvore B do exemplo em aula (slides anteriores),


insira a chave $, sendo que $ < A
 Insira as seguintes chaves em uma árvore B vazia:
 CSDTAMPIBWNGURKEHOLJYQZFXV

 diferentemente do exemplo em aula, escolha o último


elemento do 1º nó para promoção após split por overflow

 Outros Exercícios: Capítulo 9 (Folk & Zoellick, 1987)

42

21
Bibliografia
 M. J. Folk and B. Zoellick, File Structures: A
Conceptual Toolkit, Addison Wesley, 1987.

43

Apêndice (Exemplo de Inserções)

44

22