Você está na página 1de 4

Arvores B , B+ e B* Fagner, Jonas Mayer e Pedro Universidade Regional Integrada Curso de Cincia da Computao Campus Santiago Av.

v. Batista Sobrinho, s/n CEP 97700-000 Santiago RS

Resumo A elaborao do artigo a partir de uma pesquisa bibliografia , tendo como objetivo apresentar algumas variaes da estrutura de dados no-linear rvore Uma arvore extremamente til para certos tipos de computao. Por exemplo, as arvores podem ser usadas para representar expresses aritmticas. Este artigo apresenta as arvore B e suas varies , que so muito usadas em banco de dados e em sistemas de arquivos, e seus respectivos exemplos em Java. Palavras-chave: B ; arvore ; Java; estrutura de dados. 1. Introduo Arvores B so rvores balanceadas projetadas para trabalhar com dispositivos de armazenamento secundrio e banco de dados. Elas visam otimizar as operaes de entrada e sada nos dispositivos. O criador das rvores B, Rudolf Bayer, no definiu claramente de onde veio o B das rvores B. Ao que parece, o B vem de balanceamento onde todos os ns da rvore esto em um mesmo nvel. Tambm possvel que o B tenha vindo de seu sobrenome Bayer, ou ainda do nome da empresa onde trabalhava Boeing, no Boeing Scientific Research Labs 2. Arvores B As arvores B so arvores M-mltipla de buscas balanceadas. Diferente das rvores binrias, cada n em uma rvore B pode ter muitos filhos, isto , o grau de um n pode ser muito grande. Caractersticas Uma rvore B de ordem "m" uma rvore que atende as seguintes propriedades: 1. Cada n tem no mximo "m" filhos 2. Cada n (exceto a raiz e as folhas) tem pelo menos "m/2" filhos 3. A raiz tem pelo menos dois filhos se ela mesma no for uma folha 4. Todas as folhas aparecem no mesmo nvel e carregam informao 5. Um n no-folha com "k" filhos deve ter k-1 chaves 3. Arvores B+ A rvore B+ uma variao da estrutura bsica da rvore B. A rvore B+ como uma rvore B, mas os ns internos possuem apenas chaves (sem os valores associados a elas). As chaves so repetidas na rvore de forma que no nvel das folhas todas as chaves esto presentes, assim como todos os valores associados a elas (os valores usualmente so apenas ponteiros).

Com essa estrutura, possvel adicionar um ponteiro de cada folha para a folha seguinte, criando uma lista ligada de folhas que possuem todos os dados ordenados. Isso permite a utilizao sequencial dos dados de forma mais eficiente e com menos acessos em disco. Possivelmente pode ser til ter ponteiros tambm na outra direo, criando uma lista duplamente ligada no nvel das folhas. De certa forma, a rvore B+ pode ser vista como todos os dados dispostos sequencialmente e agrupados em blocos em uma lista ligada (nvel das folhas) com um ndice estruturado em forma de uma rvore de busca balanceada e eficiente em cima (ns internos). Caractersticas: 1. Todas as chaves so mantidas em folhas; 2. As chaves so repetidas em ns no-folha formando um ndice; 3. As folhas so ligadas oferecendo um caminho seqencial para percorrer as chaves. 4. Arvore B* Uma rvore B* como uma rvore B, mas em que a restrio da capacidade mais forte. Na rvore B como se estivermos forando a utilizao de pelo menos 1/2 da capacidade de cada n. A rvore B* modifica esse limite inferior para 2/3. Isso possvel complicando-se os algoritmos envolvidos (no achei em nenhuma fonte, mas acho que a complexidade no muda). Por exemplo, no caso de uma rvore B, quando tentamos inserir em um n que est cheio, o primeiro passo quebrar o n em dois, um com [m/2] chaves e o outro com [m/2] (e a chave extra sobe). No caso da rvore B* ocorre remanejamentos at que, no apenas o n atual esteja cheio, como o seu vizinho tambm. Nesse caso, os dois ns so divididos em trs. 5. Exemplo de Arvore B //campos de btree , construtor e mtodos attachsubtree public class BTree extends MWayTree { protected BTree parent; public BTree (int m) { super(m); } public void attachSubtree (int i, MWayTree arg ) { BTree btree = (BTree) arg; subtree[i] = btree; btree.parent = this; } //... }//fim //Mtodo insert da classe Btree public class Btree extends MWayTree { protected BTree parent; public void insert (Comparable object) {

if (isEmpy ( )) { if (parent == null) { attachSubtree (0, new BTree (getM ( ))); key [i] = object; attachSubtree (1, new BTree ( getM ( ))): count = 1; } else parent.insertPair (object , new BTree (getM( ))); } else { int index = findIndex (object); if (index != 0 \&\& object.isEQ( key [index]}} throw new IllegalArgumentException( "duplicate key"); subtree[index].insert(object); } } }//fim //Mtodo insertPair da classe BTree public class BTree extends MWayTree { protected BTree parent; protected void insertPair (Comparable object, BTree child) { int index = findIndex (object); if (!isFull ()) { insertKey (index + 1, object); insertSubtree (index + 1, child); ++count; } else { Comparable extraKey = insertKey (index + 1, object); BTree extraTree = insertSubtree (index + 1, child); if (parent == null) { BTree left = new BTree (getM ()); BTree right = new BTree (getM ()); left.attachLeftHalfOf (this); right.attachRightHalfOf (this); right.insertPair (extraKey, extraTree); attachSubtree (0, left); key [1] = key [(getM () + 1)/2]; attachSubtree (1, right);

count = 1; } else { count = (getM () + 1)/2 - 1; BTree right = new BTree (getM ()); right.attachRightHalfOf (this); right.insertPair (extraKey, extraTree); parent.insertPair (key [(getM () + 1)/2], right); } } } // ... } 6. Concluso As arvores B so uma boa alternativa pois possuem um melhor desempenho e ocupa menos espao em relao as arvores binarias , ela mais veloz nas buscas pela utilizao de chaves primarias e no acesso de dados. Porem as arvore B+ tem uma maior performance em busca linear, porque sempre mantem uma copia dos dados nas folhas. Referncias PRESIS Bruno Estruturas de dados e Algoritmos Padres de projeto orientados a objetos com Java Rio de janeiro ,2000 UMAMO http://umamao.com/questions/Quais-s%C3%A3o-as-diferen%C3%A7asentre-%C3%A1rvores-B-B-e-B/answers/4ce85e1979de4f0bab001038