Anda di halaman 1dari 28

ESTRUTURAS DE DADOS E ALGORITMOS

RVORES B
1 Adalberto Cajueiro
Departamento de Sistemas e Computao
Universidade Federal de Campina Grande
INTRODUO
Rudolf Bayer, Binary B-Trees for Virtual
Memory, ACM-SIGFIDET Workshop 1971,
San Diego, California, Session 5B, p. 219-
235
Motivao
Custo alto de acesso a memria secundria
A leitura de uma pgina (n) cara em I/O

Soluo
Aumentou o nmero de chaves em cada n
(pgina)

2
IDIA

3
RVORE B
Caractersticas
Ela uma rvore balanceada
Todas as folha esto no ltimo nvel
Possui um nmero mximo de filhos que cada n pode ter
(ordem)
N de uma rvore B so chamados de pginas (guardam
mais de 1 elemento)
Propriedades (arvore B de ordem m)
Cada n tem no mximo m filhos
Cada n (exceto a raiz) tem no mnimo m/2 -1 filhos
A raiz tem pelo menos 2 filhos se nao for folha.
Todas as folhas esto no mesmo nvel
Um n interno com k filhos possui k-1 chaves.
As chaves de cada n esto ordenados e servem como 4
separadores dos filhos.
RVORE B
Caractersticas
Ela uma rvore balanceada
Todas as folha esto no ltimo nvel
Possui um nmero mximo de filhos que cada n pode ter
(ordem)
N de uma rvore B so chamados de pginas (guardam
mais de 1 elemento)
Propriedades (arvore B de ordem m)
Cada n tem no mximo m filhos
Cada n (exceto a raiz) tem no mnimo m/2 -1 filhos
A raiz tem pelo menos 2 filhos se nao for folha.
Todas as folhas esto no mesmo nvel
Um n interno com k filhos possui k-1 chaves.
As chaves de cada n esto ordenados e servem como 5
separadores dos filhos.
EXEMPLO (ORDEM 3)
raiz

12
N com mais
de uma chave,
ordenada
5 10 15
balanceada

3 4 6 8 11 13 14 17

6
ESTRUTURA DE UM N
public class BNode<T extends Comparable<T>> {

LinkedList<T> elements;
LinkedList<BNode<T>> children;
BNode<T> parent;
int order;

public BNode(int order){


this.order = order;
this.elements = new LinkedList<T>();
this.children = new LinkedList<BNode<T>>();
}
}

7
ESTRUTURA DE UM N
public class BNode<T extends Comparable<T>> {
public boolean equals(Object obj) {
boolean resp = false;
if(obj != null){
if(obj instanceof BNode){
if(this.size() == ((BNode<T>)obj).size()){
resp = true;
int i = 0;
while(i<this.size() && resp){
resp = resp && this.getElementAt(i).
equals(((BNode<T>) obj).getElementAt(i));
i++;
}
}
}
} 8
return resp;
}
INTERFACE DA RVORE B
public interface BTree<T extends Comparable<T>> {

BNode<T> getRoot();
boolean isEmpty();
int height();
BNodePosition<T> search(T element);
void insert(T element);
BNode<T> maximum(BNode<T> node);
BNode<T> minimum(BNode<T> node);
void remove(T element);
BNode<T>[] depthLeftOrder();
int size();
}

9
PESQUISA
A idia similar pesquisa em BST
Diferena
Um n pode ter mais de uma chave
Dentro do n fazemos uma pesquisa linear
Procura se o elemento est no n
Se nao estiver ento procura na sub-rvore cujos separadores
sao x1 e x2 tal que x1 < valor procurado < x2.
Pode acontecer variaes:

valor procurado < x1: valor procurado menor que o menor

elemento
x2 < valor procurado: valor procurado maior que maior
elemento procurado
O retorno o n contendo o elemento e a posio do elemento
10
nele (BNode, Position)
PESQUISA (EXEMPLO)
raiz
Pesquisa do n 8

12

5 10 15

3 4 6 8 11 13 14 17

11
PESQUISA (EXEMPLO)
Pesquise pelas chaves 14, 7, 17

12

5 10 15

3 4 6 8 11 13 14 17

12
PESQUISA

B-TREE-SEARCH(BNode x, K k)
i1
while i x.size and k > x.keys[i]
ii+1
if i x.size and k = x.keys[i]
return (x, i)
if x.leaf
return (null,null)
return B-TREE-SEARCH(x.children[i], k)

13
PESQUISA

public class BNodePosition<T extends Comparable<T>> {

BNode<T> node;
int position;

public BNodePosition(BNode<T> node, int position) {


this.node = node;
this.position = position;
}

public BNodePosition() {
}
}
14
INSERES
Acontecem sempre nas folhas
Algoritmo localiza a folha conveniente pra fazer a
insero
Se o n folha no est cheio ento o elemento ser
inserido nele em ordem
Se o n folha est cheio
Faa o split (diviso) do n. Um elemento vai subir.
Faa o promote (promoo) do elemento a subir na
rvore
Se o pai estiver cheio faz o split e promote no pai

15
INSERES
Split
Escolha o elemento mdio (mediana de separao) dos
elementos do n (j considerando o novo elemento
inserido)
Valores menores que a mediana so colocados em um
novo n folha (esquerdo) e valores maiores so
colocados em uma outro novo n folha (direito)
A mediana inserida como novo elemento do pai (isso
pode causar um split no pai)
Filhos da mediana ocupam o lugar do antigo n (filho)
do pai que foi splited
Um split na raiz origina uma nova raiz.
16
INSERES (EXEMPLO)

17
INSERES (EXEMPLO)

18
REMOES
anloga insero, porm com alguns
complicadores, visto que uma chave pode ser
removida de qualquer n.
Assim como na insero, precisamos garantir que,
ao removermos a chave as propriedades da
rvore-B no sejam violadas
Duas operaes podem ser necessrias:
Concatenao
Redistribuio

19
REMOES
Pontos a se considerar:
O elemento removido em um n interno pode ser
separador de seus ns filhos.
Deletar um elemento pode deixar o n com menor
numero de elementos e filhos que o mnimo exigido.
Casos:
O elemento pertence a uma folha
O elemento pertence a um n interno

20
REMOES (ELEMENTO EM UMA FOLHA)
Remove o elemento do n folha.
Se acontece underflow, verifique os irmaos e
transfira uma chave ou ento faa a fuso do n
com um irmo.
Se a deleo acontece no filho da direita transfira o
valor mximo do filho da esquerda para o pai se nao
acontecer underflow no filho da esquerda (depois desa
a penultima chave do pai para o filho).
Se a deleo acontece no filho da esquerda transfira o
valor mnimo do filho da direita para o pai se nao
acontecer underflow no filho da direita (depois desa a
segunda menor chave do pai para o filho).
21
REMOES
Se no for possvel usar elementos de algum irmo
ento faa juncao de irmos usando valores do pai.
Remoes em n interno
So mais complexas e sero mostradas com
ilustraes

22
REMOES (ELEMENTO EM UMA FOLHA)
No acontece underflow (ordem 5)

23
REMOES (ELEMENTO EM UMA FOLHA)
Acontece underflow

24
REMOES (ELEMENTO EM UMA FOLHA)
Acontece underflow

25
REMOES (ELEMENTO EM UMA FOLHA)
Acontece underflow

26
REMOES (ELEMENTO EM UM N INTERNO)
Escolhe um novo separador (de um dos filhos)
Ajusta o n que teve o filho removido.

27
REFERNCIAS
Captulo 19
1a edio

28