Você está na página 1de 4

ndice

Introduo Histria da Arvore B+ Especificao da Arvore B+ Vantagens da Arvore B+ Esquema Grfico da Arvore B+ Implementao da Arvore B+ na linguagem C++
Procura de Dado Insero de Dado Remoo de Dado Comentrios sobre a Implementao da Arvore B+

rvores B+
p. 02 p. 02 p. 03 p. 03 p. 04 p. 04 Introduo
A utilidade de uma rvore B+ O mtodo de pesquisa binria permite que um registro pesquisado entre 50.000 seja encontrado em no mais que 16 comparaes. Mas acessar o disco 16 vezes para busca essa informao requer tempo demais. Foi preciso desenvolver estruturas que permitam recuperar esse mesmo registro em dois ou trs acessos. Essas estruturas devem permitir agrupar informaes de modo que seja provvel que toda a informao necessria possa ser obtida numa mesma operao de acesso. Por exemplo, se para um dado cliente precisamos do nome, endereo, telefone, saldo, nmero da conta, etc. prefervel obter toda essa informao de uma s vez em vez de ficar procurando em vrios lugares. aquelas qualidades, pois os arquivos mudam, crescem e encolhem conforme algumas informaes so adicionadas e outras removidas.

Bibliografia

p. 07

Histria da rvore B+
Os primeiros projetos de arquivos assumiam que os arquivos estariam em fitas, o acesso era seqencial e o custo do acesso era diretamente proporcional ao tamanho do arquivo. Porm os arquivos cresceram de modo intolervel para acesso seqencial.

Dispositivos como disco e tambores apareceram, os quais permitiram a associao de ndices aos arquivos. ndices permitiram guardar uma lista de chaves / ponteiros em um arquivo menor. O arquivo de ndices podia ser pesquisado mais rapidamente, dado chave e ponteiro a informao do arquivo principal era obtida diretamente. ndices simples resultam no mesmo problema quando crescem demais e tornam-se difceis de manter, principalmente, com arquivos dinmicos onde as chaves mudam todo o tempo. No incio dos anos 60 surgiu a idia de aplicar rvores como soluo, mas rvores podem crescer desigualmente conforme as chaves so inseridas e removidas. Em 1963 foram desenvolvidas as rvores AVL que so timas para estruturar dados em RAM. Pesquisadores pensaram em utilizar algo parecido para a estrutura de arquivos. Mas, o problema era que mesmo rvores perfeitamente balanceadas exigem muitos acessos para se chegar a um dado registro. Era, portanto, necessrio encontrar um mecanismo de armazenar em cada n da rvore um bloco de arquivo contendo o mximo nmero de registros. Mais de dez anos se trabalho foram necessrios para chegar-se soluo das Btrees. Um problema era que a metodologia requerida para arquivos era muito diferente da 2

utilizada em RAM. rvores AVL crescem de cima para baixo enquanto que rvores B crescem de baixo para cima... rvores B permitiram uma excelente performance ao custo de no se poder acessar seqencialmente o arquivo de modo eficiente. A soluo quase imediata foi encontrada com a adio de uma lista encadeada no nvel inferior da rvore B. Nesse caso chamada de rvore B+. Em termos prticos, rvores B garantem acesso a um registro em um arquivo com milhes de entradas em trs ou quatro acessos ao disco. Por mais de dez anos essas rvores formaram a base para a maioria dos sistemas comerciais. A capacidade de acessar um registro em 3 ou 4 acessos muito bom, mas o objetivo ideal era precisar de apenas 1 acesso. Hashing uma boa maneira de obter isso para arquivos que no mudam de tamanho. H muito tempo ndices e hashing so combinados para acesso a arquivos estticos relativamente recente a tcnica de hashing dinmico, a qual pode ser aplicada a arquivos dinmicos eficientemente.

Esquema grfico da rvore B+

Especificaes da rvore B+

Nas rvores de ndices, os ns s possuem, alm da chave, um ponteiro para o registro de dados em outro arquivo. Isto pode ser levado ao extremo, se ns concentramos os ponteiros para o arquivo de registros nas folhas. - Ns internos servem s como referncia para o percurso. - Chaves de ns internos so repetidas nas folhas. rvore dividida em Index Set e Sequence Set. Ns do Sequence Set (folhas) so encadeados.

Conforme pode ser visto na figura: A, B e C so ns internos, e servem como referncia para a informao das folhas serem encontradas; D, E, F, G, H, I e J so folhas, e suas chaves ordenadas possuem as informaes em questo.

Implementao da rvore B+ na linguagem C++


Para a implementao da rvore B+, inicialmente foram definidos mecanismos para a interao com o usurio, de modo que ele pudesse modelar a rvore de acordo com suas necessidades. Para isso, foi definido como parmetros da rvore sua ordem, alm de dois templates que determinam o tipo de dado das chaves e das informaes adicionais das folhas. Sendo a linguagem C++ tipicamente orientada a objetos, foram projetados dois tipos de objetos para formar e gerenciar uma rvore B+: Objeto n Possui todas as caractersticas e funes de um n genrico, como: nmero de chaves (de acordo com a ordem determinada); nmero de filhos (tambm de acordo com a ordem); seu tipo, que pode ser folha ou n interno; funo para inserir uma chave em seu interior; funo para excluir uma chave de seu conjunto interno; funo que procura uma determinada chave em seu interior;

Vantagens rvore B+:


Mecanismo para percorrer seqencialmente o arquivo de registros de dados sem que seja necessrio visitar toda a rvore. Mecanismo para percorrer seqencialmente o arquivo de registros de dados sem que seja necessrio ordenar o arquivo de registro de dados.

alm de funes auxiliares, que servem para ajudar as outras funes a desempenharem seu papel.

Objeto rvore Assim como o n, possui suas caractersticas e funes, como: a raiz, que nada mais a cabea da rvore; sua ordem, definida pelo usurio; funo para inserir uma chave nas folhas, assim como seu dado adicional; funo para remover uma chave e seu respectivo dado adicional; funo que busca uma chave e retorna seu dado; alm de funes auxiliares que ajudam as outras funes a desempenharem seu papel. A seguir, sero explicadas as funes principais da rvore: procura de dado, insero de dado, remoo de dado.

n interno que pai do novo n criado, afinal ele deve herdar uma nova chave para poder gerenciar a nova folha; a funo insere da rvore possui todos os mecanismos necessrios para garantir que todos os ns acima de uma possvel nova folha sejam atualizados, caso seja preciso. Para essa questo especfica, faz uso de recursividade.

Remoo de Dado
A separao de tarefas na funo de remoo semelhante da funo de insero de dado: o n vai cuidar da remoo internamente, enquanto que a rvore continua gerenciando as funes remove da classe n, atravs de suas folhas e ns internos. importante ressaltar que o prprio n responsvel pela excluso de uma chave dentro de si, alm de uma possvel fuso com um n vizinho. a funo remove da rvore recebe como parmetro a chave a ser excluda; primeiramente, verifica se a chave existe (usa a funo pesquisa), e retorna falso caso a chave no exista na rvore. se a chave existe na rvore, uma funo auxiliar chamada para encontrar a folha onde a chave se encontra, alm do pai dessa folha. O pai da folha necessrio nos casos de fuso de ns. em seguida, a funo remove da classe n chamada dentro da folha encontrada; um ponteiro do pai da folha enviado para a funo; dentro da folha, a funo remove a chave e seu dado. se a folha ficar subutilizada, pode ser que haja fuso para melhor aproveitamento dos ns. primeiramente, a folha procura seus vizinhos da direita e esquerda, filhos do mesmo pai que ele (eis a utilidade do pai), e v se algum deles est apto para fuso; um n apto para fuso deve estar subutilizado e deve poder comportar sozinho as chaves dos dois ns; caso haja um n apto para fuso, os dois ns se fundem e uma das chaves do pai dever ser removida. Essa chave enviada para fora da funo, a fim de que a prpria rvore possa gerenciar essa informao; essa chave dever ser removida do pai... Portanto, a rvore chama a funo remove da classe n, dentro do pai; a rvore possui mecanismos para garantir que todos os ns acima da folha removida possam ser arrumados, caso seja necessrio. Tambm usada a recursividade nesse caso. ao final de todo o processo, o dado adicional da chave removida retornado para o programa principal.

Procura de Dado
A procura na rvore foi feita recursivamente, sendo que sua implementao propriamente dita est toda na classe n; ela feita da seguinte forma: a funo procura da rvore chama a funo procura da raiz; a funo procura do n pesquisa o dado na raiz, e caso no o tenha achado, faz uso da recursividade para usar a mesma funo no filho correspondente; as funes vo sendo aplicadas filho a filho, at chegar na folha correta; se a folha possui a chave, retorna seu dado adicional; se no possui, retorna um ponteiro vazio.

Insero de Dado
Ao contrrio da funo de pesquisa, onde praticamente toda a implementao ficou para o n, a funo de insero j possui uma diviso de tarefas mais ntida: a classe n trata da prpria atualizao e possvel diviso do n, enquanto que a classe rvore gerencia dentro da rvore as informaes alteradas e criadas pela classe n. a arvore recebe como parmetro a chave e o dado a ser inserido; ela primeiramente procura o n correto para sua insero; caso o n j tenha o elemento, a funo retorna falso; ao achar o n correto, a rvore chama a funo insere do n e manda os valores da chave e elemento a serem inseridos; o n ento insere a chave, caso tenha espao; se no houver espao, o prprio n cuida da sua diviso e reorganizao de seus dados entre si e o novo n criado; caso haja diviso de folha, a funo insere do n retorna para a funo insere da rvore as informaes necessrias para que ela possa aplicar essa mesma funo no

Comentrios sobre a implementao da rvore B+


A implementao em questo foi explicada sucintamente, de modo que seus detalhes podem parecer um tanto quanto obscuros e confusos; isso pode ser resolvido atravs de uma breve anlise dos cdigos-fonte das classes. Assim, todos os passos da 6

implementao podem ser acompanhados mais detalhadamente, atravs da juno cdigo + comentrios presentes. Este modelo de implementao confere com todos os parmetros de uma tpica rvore B+, sendo que ele tambm executa normalmente as funes principais da rvore, rearranjando quando necessrio os ns, para um aproveitamento sempre otimizado da rvore. Dentre os problemas encontrados durante a implementao, destaca-se o fato de as funes principais (insere, remove) no terminarem sendo auto-suficientes. Foi preciso criar funes auxiliares, tanto na classe n quanto na classe rvore, para que alguns erros de busca e edies fossem corrigidos. Por exemplo: a funo remove da classe n foi projetada para fundir o n em questo com um vizinho, mas como esse vizinho poderia ser encontrado? Apenas a classe rvore poderia faz-lo, e foi preciso uma funo extra nessa classe para resolver esse problema.

Bibliografia
http://www.inf.ufsc.br/~ine5384-hp/Estruturas.GerArq-2.html#Heading1