Successfully reported this slideshow.

Árvore B estruturas de dados e técnicas de programação

9

Share

Loading in …3
×
1 of 15
1 of 15

More Related Content

Related Audiobooks

Free with a 14 day trial from Scribd

See all

Árvore B estruturas de dados e técnicas de programação

  1. 1. UNIVERSIDADE DO ESTADO DE MATO GROSSO/UNEMAT CAMPUS UNIVERSITÁRIO DO VALE DO TELES PIRES LICENCIATURA PLENA EM COMPUTAÇÃO ESTRUTURAS DE DADOS E TÉCNICAS DE PROGRAMAÇÃO - II ÁRVORE B COLIDER/2013
  2. 2. UNIVERSIDADE DO ESTADO DE MATO GROSSO/UNEMAT CAMPUS UNIVERSITÁRIO DO VALE DO TELES PIRES. LICENCIATURA PLENA EM COMPUTAÇÃO ESTRUTURA DE DADOS E TÉCNICAS DE PROGRAMAÇÃO - II ÁRVORE B Trabalho acadêmico apresentado como subsídios para a avaliação da disciplina de ESTRUTURA DE DADOS E TÉCNICAS DE PROGRAMAÇÃO – II do curso de Licenciatura em Computação, ministrado pelo Professor Ivan Luiz Pedroso Pires. COLIDER/2013
  3. 3. Identificação: Douglas Silva da Rocha Everson Wolf Título: Árvore B Público alvo: Acadêmicos do 5º Semestre ano 2013/1 do curso de Licenciatura em Computação da Universidade Estadual de Mato Grosso/Unemat. Departamento: Licenciatura em Computação Cronograma: Pesquisa: 5 horas. Elaboração: 7 horas e 10 min. Utilizou-se: 2 horas e 30 min. Apresentação: 20 min. INTRODUÇÃO A árvore B ou B-Tree é um tipo de estrutura de dados hierárquica muito conhecida e muito utilizada em sistemas de banco de dados e sistema de arquivos. Ela foi definida pelo pesquisador Rudolf Bayer[1971]. A principal motivação para a criação dessa nova estrutura foi o fato das memórias secundárias terem, até hoje, um alto custo de acesso aos dados. Historicamente temos uma grande distância entre o tempo de leitura das memórias secundárias para a memória principal, chegando em uma diferença de 104 a 105 o relacionamento entre elas. A estrutura atual de árvore, para toda busca, tem a necessidade de fazer uma nova leitura no disco a cada mudança de nível. Pensando em minimizar o número de acessos à memória secundária, Rudolf Bayer criou um novo conceito, quando aumentou o número
  4. 4. de valores e de filhos que um nó de sua árvore poderia armazenar. Essa nova Organização foi batizada como nome de Árvore B. JUSTIFICATIVA A finalidade deste trabalho é mostrar o conceito e definições de uma técnica de organização e manutenção de arquivos com o uso de árvores B, que para muitos ainda é desconhecido, e para os que já conhecem e utilizam possam desenvolver aptidão e o raciocínio com a interpretação correta deste método, contribuindo para a ampliação de seus conhecimentos e no desenvolvimento do ensino-aprendizagem. OBJETIVO GERAL O objetivo é apresentar uma técnica de organização e manutenção de arquivos com o uso de árvores B (Bayer e McCreight, 1972). Esse método aumenta o desempenho de acesso aos dados armazenados. OBJETIVOS ESPECÍFICOS - Mostrar a definição de árvore B. - Apresentar seu funcionamento. - Exemplificar um algoritmo que mostra uma árvore B. - Identificar seu propósito. METODOLOGIA Conteúdo elaborado e organizado através de pesquisas na internet e consulta em livros. Com os dados desta pesquisa foram elaborados exemplos e suas funcionalidades e criados alguns slides para apresentação do referido trabalho realizado em sala de aula, utilizando-se de projetor multimídia (data show) e notebooks.
  5. 5. CONTEÚDO DESENVOLVIDO Definição de árvore B Na ciência da computação uma árvore B ou árvore B-Tree é uma estrutura de dados projetada para funcionar especialmente em memória secundária como um disco magnético ou outros dispositivos de armazenamento secundário. Dentre suas propriedades ela permite a inserção, remoção e busca de chaves numa complexidade de tempo logarítmica e, por esse motivo, é muito em pregada em aplicações que necessitam manipular grandes quantidades de informação tais como um banco de dados ou um sistema de arquivos. Para definir uma árvore B devemos esclarecer os conceitos de ordem e página folha de acordo com cada autor. Bayer e McCreight, Comer, dentre outros, definem a ordem como sendo o número mínimo de chaves que uma página pode conter, ou seja, com exceção da raiz todas devem conter esse número mínimo de chaves, mas essa definição pode causar ambiguidades quando sequer armazenar um número máximo ímpar de chaves. Por exemplo, se uma árvore B é de ordem 3, uma página estará cheia quando tiver 6 ou 7 chaves? Ou ainda, se quiserem os armazenar no máximo 7 chaves em cada página qual será a ordem da árvore, uma vez que, o mínimo de chaves é k e o máximo 2k? Knuth propôs que a ordem de uma árvore B fosse o número máximo de páginas filhas que toda página pode conter. Dessa forma, o número máximo de chaves por página ficou estabelecido com o a ordem menos um. O termo página folha também é inconsistente, pois é referenciado diferentemente por vários autores. Bayer e McCreight referem - se a estas com o as páginas mais distantes da raiz, ou aquelas que contém chaves no nível mais baixo da árvore. Já Knuth define o termo com o as páginas que estão abaixo do último nível da árvore, ou seja, páginas que não contém nenhuma chave. De acordo com a definição de Knuth de ordem e página folha de Bayer e McCreight, uma árvore B de ordem d (número máximo de páginas filhas para uma página pai) deve satisfazer as seguintes propriedades:  Cada página contém no máximo d páginas filhas.  Cada página, exceto a raiz e as folhas, tem pelo menos ⌈d/ 2⌉ páginas filhas.
  6. 6.  A página raiz tem ao menos duas páginas filhas (ao menos que ela seja uma folha).  Toda página folha possui a mesma profundidade, na qual é equivalente à altura da árvore.  Um a página não folha com k páginas filha contem k- 1 chaves.  Um a página folha contém pelo menos ⌈d/ 2⌉- 1 chaves e no máximo d- 1 chaves Árvores de pesquisa As árvores binárias de pesquisa são estruturas de dados muito eficientes quando se deseja trabalhar com tabelas que caibam inteiramente na memória principal do computador. Elas satisfazem condições e requisitos diversificados e conflitantes, tais como acesso direto e sequencial, facilidade de inserção e retirada de registros e boa utilização de memória. Vamos considerar o problema de recuperar informação em grandes arquivos de dados que estejam armazenados em memória secundária do tipo disco magnético. Uma forma simplista de resolver esse problema utilizando árvores binárias de pesquisa é armazenar os nós da árvore no disco, e as referências à esquerda e à direita de cada nó se tornam endereços de disco, em vez de endereços de memória principal. Se a pesquisa for realizada utilizando o algoritmo de pesquisa para memória principal visto anteriormente, serão necessários da ordem da ordem de log2 n acessos a disco, significando que um arquivo com n = 106 registros necessitará de aproximadamente log2 106 ≈ 20 buscas no disco. Para diminuir o número de acessos a disco, os nós da árvore podem ser agrupados em páginas, conforme ilustra a figura 1. Nesse exemplo, o formato da árvore muda de binário para quaternário, com quatro filhos por páginas, em que o número de acessos a páginas cai para metade no pior caso. Para arquivos divididos em páginas de 127 registros, é possível recuperar qualquer registro do arquivo com três acessos a disco no pior caso. Abaixo temos a árvore binária dividida em páginas:
  7. 7. Figura 1 A forma de organizar os nós da árvore dentro de páginas é muito importante sob o ponto de vista do número esperado de páginas lidas quando se realiza uma pesquisa na árvore. A árvore da figura acima é ótima sob esse aspecto. Entretanto, a organização ótima é difícil de ser obtida durante a construção da árvore, tornando-se um problema de otimização muito complexo. Um algoritmo bem simples, o da alocação sequencial, armazena os nós em posições consecutivas na página à medida que vão chegando, sem considerar o formato físico da árvore. Esse algoritmo utiliza todo espaço disponível na página, mas os nós dentro da página estão relacionados pela localidade da ordem de entrada das chaves, e não pela localidade dentro da árvore, o que torna o tempo de pesquisa muito pior do que o tempo da árvore ótima. Um método de alocação de nós em páginas que leva em consideração a relação de proximidade dos nós dentro da estrutura da árvore foi proposto por Muntz e Uzgalis (1970). No método proposto, o novo nó a ser inserido é sempre colocado na mesma página do nó pai. Se o nó estiver em uma página cheia, então uma nova página é criada e o novo nó é colocado no início da nova. Knuth (1973) mostrou que o número esperado de acessos a páginas em uma pesquisa na árvore é muito próximo do ótimo. Entretanto, a ocupação média das páginas é extremamente baixa, da ordem de 10%, o que torna o algoritmo inviável para aplicações práticas. Uma solução brilhante para esse problema, simultaneamente com uma proposta para manter equilibrado o crescimento da árvore e permitir inserções e retiradas à vontade, essa solução é a árvore B.
  8. 8. Árvore B O objetivo é apresentar uma técnica de organização e manutenção de arquivos com o uso de árvores B (Bayer e McCreight, 1972). A origem do nome árvore B nunca foi explicada pelos autores R. Bayer e E. McCreight, cujo trabalho foi desenvolvido no Boeing Scientific Research Labs. Alguns autores sugerem que o “B” se refere a “Boeing”, enquanto Comer (1979) acha apropriado pensar em “B-tress” como “Bayer- trees”, por causa das contribuições de R. Bayer ao tema. Outras informações podem ser encontradas em Comer (1979), Wirth (1976) e Knuth (1973). Algoritmo da árvore B Quando uma árvore de pesquisa possui mais de um registro por nó, ela deixa de ser binária. Esses árvores são chamadas n-árias, pelo fato de possuírem mais de dois descendentes por nó. Nesses casos, os nós são mais comumente chamadas de páginas. A árvore B é n-ária. Em uma árvore B de ordem m, temos que: 1. Cada página contém no mínimo m registros (e m +1 descendentes) e no máximo 2m registros (e 2m +1 descendentes), exceto a página raiz, que pode conter entre 1 e 2m registros; 2. Todas as páginas folha aparecem no mesmo nível. Uma árvore B de ordem m = 2 com três níveis pode ser vista na figura 2. Todas as páginas contêm dois, três ou quatro registros, exceto a raiz, que pode conter um registro apenas. Os registros aparecem em ordem crescente da esquerda para direita. Esse esquema representa uma extensão natural da organização da árvore binária de pesquisa. A figura 3 apresenta forma geral de uma página de uma árvore B de ordem m.
  9. 9. Figura 2 Figura 3 Qual seu propósito? O propósito de uma Árvore B é otimizar o acesso e a manipulação da informação armazenada em discos; serve geralmente como estrutura de índice à outros arquivos de registros no qual o índice pode se tornar muito grande para caber em memória, em que neste contexto (atuando como índice) a árvore armazena uma chave e a posição relativa em arquivo (ou byte offset) em que o registro se encontra no arquivo de registros. Cabe lembrar que o emprego de Árvores B em detrimento de Árvore AVL só faz sentido quando estamos lidando com um conjunto de informações tão grande que não caiba inteiramente em memória principal; caso utilizássemos uma Árvore AVL para tratar tal conjunto de informações a performance cairia muito devido ao número de acessos à disco realizados pelo sistema operacional que, na melhor das hipóteses, estaria utilizando sua memória virtual para gerenciar a falta de memória. Inserção em uma árvore B Para inserir um novo elemento em uma árvore B, basta localizar o nó folha X onde o novo elemento deva ser inserido. Se o nó X estiver cheio, será necessário realizar uma subdivisão de nós que consiste em passar o elemento mediano de X para
  10. 10. seu pai e subdividir X em dois novos nós com t - 1 elementos e depois inserir a nova chave. Figura 4 Se o pai de X também estiver cheio, repete- se recursivamente a subdivisão acima para o pai de X. No pior caso terá que aumentar a altura da árvore B para poder inserir o novo elemento. Note que diferentemente das árvores binárias, as árvores B crescem para cima. A figura abaixo ilustra a inclusão de novos elementos em uma árvore B com t =3.
  11. 11. Figura 5 Abaixo temos mais uma imagens que representa uma inserção em uma árvore B: Observação: Cisão significa, transferir a chave central para o pai e dividir o nó em dois.
  12. 12. Figura 6 Busca em uma árvore B A busca em uma árvore B é uma função parecida com a de busca em uma árvore de busca binária, exceto o fato de que se deve decidir entre vários caminhos. Como as chaves estão ordenadas, basta realizar uma busca binária nos elementos de cada nó. Isso levará tempo O (l g (t)). Se a chave não for encontrada no nó em questão, continua- se a busca nos filhos deste nó, realizando- se novamente a busca binária. Caso o nó não esteja contido na árvore a busca terminará ao encontrar um ponteiro igual a NULL, ou de forma equivalente, verificando- se que o nó é uma folha. A busca completa pode ser realizada em tempo O (l g (t) logt(n)). Remoção em uma árvore B A remoção de um elemento de uma árvore B pode ser dividida em dois casos:
  13. 13. 1. O elemento que será removido está em uma folha. 2. O elemento que será removido está em um nó interno. Se o elemento estiver sendo removido de um nó não folha, seu sucessor, que deve estar em uma folha, será movido para a posição eliminada e o processo de eliminação procede como se o elemento sucessor fosse removido do nó folha. Quando um elemento for removido de uma folha X e o número de elementos no nó folha diminui para menos que t - 1, deve- se reorganizar a árvore B. A solução mais simples é analisarmos os irmãos da direita ou esquerda de X. Se um dos irmãos (da direita ou esquerda) de X possui mais de t - 1 elementos, a chave k do pai que separa os irmãos pode ser incluída no nó X e a última ou primeira chave do irmão (última se o irmão for da esquerda e primeira se o irmão for da direita) pode ser inserida no pai no lugar de k. Figura 7 Se os dois irmãos de X contiverem exatamente t - 1 elementos (ocupação mínima), nenhum elemento poderá ser em prestado. Neste caso, o nó X e um de seus irmãos são concatenados em um único nó que também contém a chave separadora do pai.
  14. 14. Figura 8 Se o pai também contiver apenas t - 1 elementos, deve- se considerar os irmãos do pai com o no caso anterior e proceder recursivamente. No pior caso, quando todos os ancestrais de um nó e seus irmãos contiverem exatamente t - 1 elementos, uma chave será tomada da raiz e no caso da raiz possuir apenas um elemento a árvore B sofrerá uma redução de altura. CONCLUSÃO Conclui-se que este trabalho foi de fundamental importância para o raciocínio lógico onde foi apresentado uma forma de agilizar o trabalho de criações de aplicações que ajudam o ser humano no dia a dia, utilizando as técnicas de árvore B, podendo ser utilizado em um software, sites e até mesmo em banco de dados. Essa técnica foi criado com o intuito de baratear o acesso aos dados armazenados, pois seu uso aumenta o desempenho de processamento de pesquisa, inserção e remoção. REFERÊNCIAS BIBLIOGRAFICAS Disponível em: www.cienciamao.usp.br/tudo/exibir.php?midia=exe&cod=_solveelec. Acesso em maio de 2013. Disponível em: equipe.nce.ufrj.br/adriano/c/apostila/arvore.htm. Aceso em maio de 2013.
  15. 15. Disponível em: www.lcad.icmc.usp.br/~nonato/ED/B_arvore/btree.htm. Acesso em maio de 2013. Disponível em: www.ft.unicamp.br/liag/siteEd/definicao/arvore-b.php. Acesso em maio 2013. ZIVIANI, N; “Projetos de Algoritmos com implementação em Java e C++”. 2007. São Paulo-SP. Thomson Learning. Disponível em: www.gpec.ucdb.br/pistori/disciplinas/ed/aulas_II/bt.htm. Acesso em Junho 2013.

×