SlideShare uma empresa Scribd logo
1 de 18
Á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 organização de ponteiros de tal
forma que as operações buscas, inserções e remoções
são executadas rapidamente.
As árvores B são largamente utilizadas como forma de
armazenamento em memória secundária. Diversos
sistemas comerciais de Banco de dados, por exemplo,
as empregam.
Árvore B
Árvores B são árvores enraizadas balanceadas, com
balanço perfeito. Sua construção assegura que as folhas
se encontram em um mesmo nível, não importando a
ordem de entrada dos dados.
Um nó de uma árvore B é chamado página.
Cada página, exceto a raiz, deve ter entre d e 2d
elementos.
A raiz tem pelo menos dois descendentes diretos.
Representando Árvores B
Numa árvore binária, cada nó contém 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:
9Valores 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ó estão ordenados.
O ponteiro situado entre dois elementos a e b aponta
para a sub-árvore que contém todos os elementos entre
a e b.
Representando Árvores B
Os ponteiros para os descendentes e os elementos
dentro de um nó são armazenados em arrays.
Os descendentes têm índices entre 0 e M-1.
Os elementos têm índices entre 0 e M-2.
Representando Árvores Binárias
Nó de uma árvore binária:
typedef struct No *Ponteiro_No;
typedef struct No {
int chave;
Ponteiro_No filho_esquerdo;
Ponteiro_No filho_direito;
} No;
Pode se acrescentar informações relativas ao elemento
armazenado ou uma lista de elementos armazenados
com a mesma chave.
Chave do nó
Referências para os nós
descendentes
Representando Árvores AVL
No nó de uma árvore AVL, acrescenta-se o balance:
typedef struct No *Ponteiro_No;
typedef struct No {
int chave;
int balance;
Ponteiro_No filho_esquerdo;
Ponteiro_No filho_direito;
} No;
Pode se acrescentar informações relativas ao elemento
armazenado ou uma lista de elementos armazenados
com a mesma chave.
Chave do nó
Referências para os nós
descendentes
Balance: diferença de
alturas
Representando Árvores B
Nó (página) de uma árvore B:
typedef struct No *Ponteiro_No;
typedef struct No {
int n;
int chaves[M-1];
Ponteiro_No filhos[M];
} No;
Número de elementos no nó
Chaves do nó
Referências para os nós
descendentes
Pode se acrescentar informações relativas ao elemento
armazenado ou uma lista de elementos armazenados
com a mesma chave.
Representando Árvores B
Para criar a árvore propriamente dita, criaremos a classe
Arvore, que manipula objetos do tipo No.
typedef struct Arvore {
Ponteiro_No raiz;
} Arvore;
Arvore *createBTree() {
Arvore *ret =
(Arvore *) malloc(sizeof(Arvore));
ret->raiz = NULL;
return ret;
}
Busca
Algoritmo Simplificado:
Se x < C0; seguir F0
Se Ci-1 < x < Ci; seguir Fi
Se x > Cn-1; o caminho será indicado por Fn
C0 C1 ... Cn-1
F0 F1 F2 ... Fn-1 Fn
Mesmo índice = à esquerda = menor
Índice mais um = à direita = maior
Busca
int busca ( int k, Ponteiro_No p ) {
if ( p == NULL ) return 0;
else {
int i = 0;
while ( i < p->n-1 && k > p->chaves[i] )
i++;
if ( k == p->chaves[i] )
return 1; // achei
else if ( k < p->chaves[i] )
return busca ( k, p->filhos[i] );
else // k > p->chaves[i]
return busca ( k, p->filhos[i+1] );
}
}
(i ≠ 0) p->chaves[i-1] < k
Inserção
Um elemento só é inserido na folha.
Casos:
• Se a página onde o elemento for inserido tiver menos de 2d
chaves, então o elemento será inserido nessa página;
• Caso contrário, a página ficará com 2d+1 chaves, sendo
necessário realizar uma cisão. O elemento do meio será
promovido à página diretamente acima. Os elementos
menores ficarão numa página à esquerda desse elemento e
os maiores à direita. Se esse procedimento resultar em outra
página com 2d+1 chaves, realizar-se-á novamente o mesmo
procedimento, podendo chegar até a raiz.
Inserção
Inserção 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
Inserção
3 5 7
2 4 6 8
2 4 6 8
73
5
Inserção
O algoritmo de inserção é recursivo.
Pré-Work:
• Quando estamos numa página não-nula da árvore, tenta-
se inserir no nível abaixo, escolhendo o descendente
adequado (Busca).
• Quando estamos numa página nula, neste caso chegou-se
ao fim da árvore, ultrapassando-se mesmo o nível mais
baixo e devolve-se simplesmente o elemento ao nó superior,
simulando uma promoção (Caso Base).
Inserção
Pós-Work:
• Se houver uma promoção, o elemento promovido deve ser
inserido na página atual.
• Se a página atual estiver cheia, a página deve ser partida e
o elemento mediano promovido.
Caso especial:
Se estamos na raiz, se houver uma promoção, deve ser criada uma
nova raiz tendo como único elemento aquele que foi promovido e
como descendentes os dois nós resultantes da partição da antiga
raiz.
Applet
http://slady.net/java/bt/view.php

Mais conteúdo relacionado

Mais procurados

Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
BD I - Aula 08 A - Algebra Relacional
BD I - Aula 08 A - Algebra RelacionalBD I - Aula 08 A - Algebra Relacional
BD I - Aula 08 A - Algebra RelacionalRodrigo Kiyoshi Saito
 
Apresentação sobre Árvores B
Apresentação sobre Árvores BApresentação sobre Árvores B
Apresentação sobre Árvores BThiago Colares
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)Janynne Gomes
 
Banco de Dados - Part01
Banco de Dados - Part01Banco de Dados - Part01
Banco de Dados - Part01Rangel Javier
 
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraBanco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraNatanael Simões
 
Workshop Prototipação em ux - Como validar uma ideia sem construir o produto
Workshop Prototipação em ux - Como validar uma ideia sem construir o produtoWorkshop Prototipação em ux - Como validar uma ideia sem construir o produto
Workshop Prototipação em ux - Como validar uma ideia sem construir o produtoCarla De Bona
 
Árvore b+ pesquisa e ordenação
Árvore b+ pesquisa e ordenaçãoÁrvore b+ pesquisa e ordenação
Árvore b+ pesquisa e ordenaçãoGustavo Chaves
 
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaExercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaLoiane Groner
 
{Palestra} Criação Web com Frameworks Front-end
{Palestra} Criação Web com Frameworks Front-end{Palestra} Criação Web com Frameworks Front-end
{Palestra} Criação Web com Frameworks Front-endDaniel Brandão
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento WebSérgio Souza Costa
 
Aula 4 modelo relacional
Aula 4   modelo relacionalAula 4   modelo relacional
Aula 4 modelo relacionalHélio Martins
 
3 - Modelo Entidade Relacionamento
3 - Modelo Entidade Relacionamento3 - Modelo Entidade Relacionamento
3 - Modelo Entidade RelacionamentoCris Fidelix
 

Mais procurados (20)

Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
BD I - Aula 08 A - Algebra Relacional
BD I - Aula 08 A - Algebra RelacionalBD I - Aula 08 A - Algebra Relacional
BD I - Aula 08 A - Algebra Relacional
 
Apresentação sobre Árvores B
Apresentação sobre Árvores BApresentação sobre Árvores B
Apresentação sobre Árvores B
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
 
Banco de Dados - Part01
Banco de Dados - Part01Banco de Dados - Part01
Banco de Dados - Part01
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
CONEXÃO BANCO DE DADOS MYSQL COM JAVA
CONEXÃO BANCO DE DADOS MYSQL  COM JAVACONEXÃO BANCO DE DADOS MYSQL  COM JAVA
CONEXÃO BANCO DE DADOS MYSQL COM JAVA
 
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraBanco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
 
Workshop Prototipação em ux - Como validar uma ideia sem construir o produto
Workshop Prototipação em ux - Como validar uma ideia sem construir o produtoWorkshop Prototipação em ux - Como validar uma ideia sem construir o produto
Workshop Prototipação em ux - Como validar uma ideia sem construir o produto
 
Árvores balanceadas - AVL
Árvores balanceadas - AVLÁrvores balanceadas - AVL
Árvores balanceadas - AVL
 
Árvore b+ pesquisa e ordenação
Árvore b+ pesquisa e ordenaçãoÁrvore b+ pesquisa e ordenação
Árvore b+ pesquisa e ordenação
 
Modelagem de dados
Modelagem de dadosModelagem de dados
Modelagem de dados
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaExercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
 
Atividade word
Atividade wordAtividade word
Atividade word
 
{Palestra} Criação Web com Frameworks Front-end
{Palestra} Criação Web com Frameworks Front-end{Palestra} Criação Web com Frameworks Front-end
{Palestra} Criação Web com Frameworks Front-end
 
Árvore B
Árvore BÁrvore B
Árvore B
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento Web
 
Aula 4 modelo relacional
Aula 4   modelo relacionalAula 4   modelo relacional
Aula 4 modelo relacional
 
3 - Modelo Entidade Relacionamento
3 - Modelo Entidade Relacionamento3 - Modelo Entidade Relacionamento
3 - Modelo Entidade Relacionamento
 

Semelhante a Arvores b

Semelhante a Arvores b (8)

Árvore Binária
Árvore BináriaÁrvore Binária
Árvore Binária
 
17 arvores binarias de busca
17   arvores binarias de busca17   arvores binarias de busca
17 arvores binarias de busca
 
Operações em Árvores Binárias
Operações em Árvores BináriasOperações em Árvores Binárias
Operações em Árvores Binárias
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Apresentação árvore 2 3 4
Apresentação árvore 2 3 4Apresentação árvore 2 3 4
Apresentação árvore 2 3 4
 
Aula 18
Aula 18Aula 18
Aula 18
 
Aula 19
Aula 19Aula 19
Aula 19
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e binárias
 

Mais de Horácio J. C. Filho (6)

L13
L13L13
L13
 
If672cc p1 sol
If672cc p1 solIf672cc p1 sol
If672cc p1 sol
 
Heaps 4up
Heaps 4upHeaps 4up
Heaps 4up
 
Binomial heaps
Binomial heapsBinomial heaps
Binomial heaps
 
If672cc mp1 sol
If672cc mp1 solIf672cc mp1 sol
If672cc mp1 sol
 
Revisao1
Revisao1Revisao1
Revisao1
 

Arvores b

  • 1.
  • 2. Á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 organização de ponteiros de tal forma que as operações buscas, inserções e remoções são executadas rapidamente. As árvores B são largamente utilizadas como forma de armazenamento em memória secundária. Diversos sistemas comerciais de Banco de dados, por exemplo, as empregam.
  • 3. Árvore B Árvores B são árvores enraizadas balanceadas, com balanço perfeito. Sua construção assegura que as folhas se encontram em um mesmo nível, não importando a ordem de entrada dos dados. Um nó de uma árvore B é chamado página. Cada página, exceto a raiz, deve ter entre d e 2d elementos. A raiz tem pelo menos dois descendentes diretos.
  • 4. Representando Árvores B Numa árvore binária, cada nó contém 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: 9Valores menores que 9 Valores maiores que 9 9 13 25
  • 5. 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ó estão ordenados. O ponteiro situado entre dois elementos a e b aponta para a sub-árvore que contém todos os elementos entre a e b.
  • 6. Representando Árvores B Os ponteiros para os descendentes e os elementos dentro de um nó são armazenados em arrays. Os descendentes têm índices entre 0 e M-1. Os elementos têm índices entre 0 e M-2.
  • 7. Representando Árvores Binárias Nó de uma árvore binária: typedef struct No *Ponteiro_No; typedef struct No { int chave; Ponteiro_No filho_esquerdo; Ponteiro_No filho_direito; } No; Pode se acrescentar informações relativas ao elemento armazenado ou uma lista de elementos armazenados com a mesma chave. Chave do nó Referências para os nós descendentes
  • 8. Representando Árvores AVL No nó de uma árvore AVL, acrescenta-se o balance: typedef struct No *Ponteiro_No; typedef struct No { int chave; int balance; Ponteiro_No filho_esquerdo; Ponteiro_No filho_direito; } No; Pode se acrescentar informações relativas ao elemento armazenado ou uma lista de elementos armazenados com a mesma chave. Chave do nó Referências para os nós descendentes Balance: diferença de alturas
  • 9. Representando Árvores B Nó (página) de uma árvore B: typedef struct No *Ponteiro_No; typedef struct No { int n; int chaves[M-1]; Ponteiro_No filhos[M]; } No; Número de elementos no nó Chaves do nó Referências para os nós descendentes Pode se acrescentar informações relativas ao elemento armazenado ou uma lista de elementos armazenados com a mesma chave.
  • 10. Representando Árvores B Para criar a árvore propriamente dita, criaremos a classe Arvore, que manipula objetos do tipo No. typedef struct Arvore { Ponteiro_No raiz; } Arvore; Arvore *createBTree() { Arvore *ret = (Arvore *) malloc(sizeof(Arvore)); ret->raiz = NULL; return ret; }
  • 11. Busca Algoritmo Simplificado: Se x < C0; seguir F0 Se Ci-1 < x < Ci; seguir Fi Se x > Cn-1; o caminho será indicado por Fn C0 C1 ... Cn-1 F0 F1 F2 ... Fn-1 Fn Mesmo índice = à esquerda = menor Índice mais um = à direita = maior
  • 12. Busca int busca ( int k, Ponteiro_No p ) { if ( p == NULL ) return 0; else { int i = 0; while ( i < p->n-1 && k > p->chaves[i] ) i++; if ( k == p->chaves[i] ) return 1; // achei else if ( k < p->chaves[i] ) return busca ( k, p->filhos[i] ); else // k > p->chaves[i] return busca ( k, p->filhos[i+1] ); } } (i ≠ 0) p->chaves[i-1] < k
  • 13. Inserção Um elemento só é inserido na folha. Casos: • Se a página onde o elemento for inserido tiver menos de 2d chaves, então o elemento será inserido nessa página; • Caso contrário, a página ficará com 2d+1 chaves, sendo necessário realizar uma cisão. O elemento do meio será promovido à página diretamente acima. Os elementos menores ficarão numa página à esquerda desse elemento e os maiores à direita. Se esse procedimento resultar em outra página com 2d+1 chaves, realizar-se-á novamente o mesmo procedimento, podendo chegar até a raiz.
  • 14. Inserção Inserção 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
  • 15. Inserção 3 5 7 2 4 6 8 2 4 6 8 73 5
  • 16. Inserção O algoritmo de inserção é recursivo. Pré-Work: • Quando estamos numa página não-nula da árvore, tenta- se inserir no nível abaixo, escolhendo o descendente adequado (Busca). • Quando estamos numa página nula, neste caso chegou-se ao fim da árvore, ultrapassando-se mesmo o nível mais baixo e devolve-se simplesmente o elemento ao nó superior, simulando uma promoção (Caso Base).
  • 17. Inserção Pós-Work: • Se houver uma promoção, o elemento promovido deve ser inserido na página atual. • Se a página atual estiver cheia, a página deve ser partida e o elemento mediano promovido. Caso especial: Se estamos na raiz, se houver uma promoção, deve ser criada uma nova raiz tendo como único elemento aquele que foi promovido e como descendentes os dois nós resultantes da partição da antiga raiz.