Вы находитесь на странице: 1из 27

Copyright 2007 Algoritmos e Estruturas

de Dados - Todos os direitos reservados



tila Valgueiro Malta Moreira
Juliana Medeiros de Lucena
Rafael Alberto Gomes Pereira Lima
Rafael Loureiro de Carvalho








Sara Carvalho da Rocha Brito
Tiago Carneiro Pessoa Canto
Victor Barbosa de Oliveira Medeiros
Vincius Monteiro de Lira








rvore B
rvore B uma estrutura de dados que utiliza o
recurso de manter mais de uma chave em cada n da
estrutura.
Ela proporciona uma organizao de ponteiros de tal
forma que as operaes buscas, inseres e remoes
so executadas rapidamente.
As rvores B so largamente utilizadas como forma de
armazenamento em memria secundria. Diversos
sistemas comerciais de Banco de dados, por exemplo,
as empregam.
rvore B
rvores B so rvores enraizadas balanceadas, com
balano perfeito. Sua construo assegura que as folhas
se encontram em um mesmo nvel, no importando a
ordem de entrada dos dados.
Um n de uma rvore B chamado pgina.
Cada pgina, exceto a raiz, deve ter entre d e 2d
elementos.
A raiz tem pelo menos dois descendentes diretos.
Representando rvores B
Numa rvore binria, cada n contm um valor (chave)
e duas sub-rvores (filhos) que podem ser nulas:





Numa rvore 2-3, rvore B de ordem 1, um n pode ter
at 2 chaves e 3 filhos:
9
Valores menores que 9 Valores maiores que 9
9 13 25
Representando rvores B
Um n de uma rvore B, n M-rio (n alargado),
possui M descendentes diretos e M-1 elementos.
Os elementos dentro de um n esto ordenados.
O ponteiro situado entre dois elementos a e b aponta
para a sub-rvore que contm todos os elementos entre
a e b.
Representando rvores B
Os ponteiros para os descendentes e os elementos
dentro de um n so armazenados em arrays.
Os descendentes tm ndices entre 0 e M-1.
Os elementos tm ndices entre 0 e M-2.
Representando rvores B
Ex: N (pgina) de uma rvore B composta por inteiros
class No {
int n;
int elements[M-1];
No branches[M];
}
Nmero de elementos no n
Elementos do n
Referncias para os
ns descendentes
typedef struct No *Pont;
typedef struct No {
int n;
int elements[M-1];
Pont branches[M];
} No;
Nmero de elementos no n
Elementos do n
Referncias para os
ns descendentes
Representando rvores B
Para criar a rvore B propriamente dita, criaremos a classe
BTree, que manipula objetos do tipo No.
class BTree {
No raiz;
public BTree() {
this.raiz = null;
}
}
Representando rvores B
typedef struct BTree {
Pont raiz;
} BTree;

BTree *createBTree() {
BTree *ret = (BTree *)malloc(sizeof(BTree));
ret->raiz = NULL;
return ret;
}
Busca
Algoritmo Simplificado:
Se x < K
0
; seguir P
0
Se K
i-1
< x < K
i
; seguir P
i
Se x > K
m-1
; o caminho ser indicado por P
m
K0 K1 ... Km-1
P0 P1 P2 ... Pm-1 Pm

Busca
boolean busca ( int k, No p ) {
if ( p == null ) return false;
else {
int i = 0;
while ( i < p.n-1 && k > p.elements[i] )
i++;
if ( k == p.elements[i] ) return true;
else if ( k < p.elements[i] )
return busca ( k, p.branches[i] );
else return busca ( k, p.branches[i+1] );
}
}
Busca
int busca ( int k, No p ) {
if ( p == NULL ) return 0;
else {
int i = 0;
while ( i < p.n-1 && k > p->elements[i] )
i++;
if ( k == p->elements[i] ) return 1;
else if ( k < p->elements[i] )
return busca ( k, p->branches[i] );
else return busca ( k, p->branches[i+1] );
}
}
Insero
Um elemento s inserido na folha.
Casos:
Se a pgina onde o elemento for inserido tiver menos de 2d
chaves, ento o elemento ser inserido nessa pgina;
Caso contrrio, a pgina ficar com 2d+1 chaves, sendo
necessrio realizar uma ciso. O elemento do meio ser
promovido pgina diretamente acima. Os elementos
menores ficaro numa pgina esquerda desse elemento e
os maiores direita. Se esse procedimento resultar em outra
pgina com 2d+1 chaves, realizar-se- novamente o mesmo
procedimento, podendo chegar at a raiz.
Insero
Insero do elemento 6 em uma rvore com d = 1 (rvore 2-3)
3 5
2 4 7 8
3 5
2 4 6 7 8
Insero
3 5 7
2 4 6 8
2 4 6 8
7 3
5
Insero
O algoritmo de insero recursivo, sendo os ns da rvore
percorridos para se procurar o ponto de insero adequado.
Para cada n percorrido, estas so as situaes possveis:
Quando estamos num n normal da rvore, tenta-se inserir no
nvel abaixo, escolhendo o descendente adequado. Se houver
uma promoo o elemento promovido deve ser inserido no n
atual; se o n atual estiver cheio deve ser partido e o elemento
mediano promovido.
Insero
Quando estamos num n nulo, neste caso chegou-se ao fim da
rvore, ultrapassando-se mesmo o nvel mais baixo e devolve-se
simplesmente o elemento ao n superior, simulando uma
promoo;
Quando estamos na raiz, se houver uma promoo, deve ser
criada uma nova raiz tendo como nico elemento aquele que foi
promovido e como descendentes os dois ns resultantes da
partio da antiga raiz.
Remoo
Casos:
Quando a chave no se encontra em uma folha, ela ser
removida e substituda pelo sucessor (menor dos maiores =
direita esquerda) ou antecessor (maior dos menores =
esquerda direita), que est numa folha. Logo, esse caso cai
numa remoo de uma chave em uma folha;
Quando a chave uma folha, ela ser removida e dever
verificar se a folha ficar com menos de d chaves. Se isso
acontecer, dever ser feita uma concatenao ou uma
redistribuio.
A chave a ser retirada pode residir no n folha ou num n de
derivao.
Pginas Adjacentes
So pginas que tem o mesmo pai e so apontados por dois
ponteiros adjacentes, ou seja, h apenas uma chave entre
eles.
As pginas circuladas abaixo so pginas adjacentes.
L P
I
T
V X
U W Z
G
Concatenao
Acontece quando, aps a remoo, a pgina onde a chave foi
removida e uma pgina adjacente possuem em conjunto
menos de 2d chaves.
Concatena essa pgina com uma adjacente. A chave do pai
que estava entre elas fica na pgina que foi concatenada.
Se esse procedimento resultar em uma pgina com menos de
d chaves, realizar-se- novamente o mesmo procedimento,
podendo chegar at a raiz.
Concatenao
Remoo do elemento 4 em uma rvore com d = 1 (rvore 2-3)
2 4 6 8
7 3
5
Concatenao
2 6 8
7 3
5
Concatenao
2 3 6 8
7
5
2 3 6 8
5 7
Redistribuio
Acontece quando, aps a remoo, a pgina onde a chave foi
removida e uma pgina adjacente possuem em conjunto 2d
chaves ou mais.
Concatena essa pgina com uma adjacente. A chave do pai
que estava entre elas fica na pgina que foi concatenada.
Acontece uma ciso.
No propagvel, pois o nmero de chaves do pai no
muda.
Redistribuio
Remoo do elemento 6 em uma rvore com d = 1 (rvore 2-3)
2 3 6 8 9
5 7
2 3 8 9
5 7
Redistribuio
2 3 7 8 9
5
2 3 9
5 8
7
Applet
http://slady.net/java/bt/view.php?w=600&h=450

Вам также может понравиться