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

Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHASAparicio Junior
 
Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Vitor Hugo Melo Araújo
 
Operações em Árvores Binárias
Operações em Árvores BináriasOperações em Árvores Binárias
Operações em Árvores Bináriaselliando dias
 
Estrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas EstáticasEstrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas EstáticasLeinylson Fontinele
 
Inserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaInserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaElaine Cecília Gatto
 
TRIES_data_structure
TRIES_data_structureTRIES_data_structure
TRIES_data_structureddewithaman10
 
Search tree,Tree and binary tree and heap tree
Search tree,Tree  and binary tree and heap treeSearch tree,Tree  and binary tree and heap tree
Search tree,Tree and binary tree and heap treezia eagle
 
Listas duplamente encadeadas
Listas duplamente encadeadasListas duplamente encadeadas
Listas duplamente encadeadasJailson Torquato
 
Sistema de gerenciamento de banco de dados
Sistema de gerenciamento de banco de dadosSistema de gerenciamento de banco de dados
Sistema de gerenciamento de banco de dadosJuh Souza
 
Como descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoComo descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoElaine Cecília Gatto
 
Tries - Tree Based Structures for Strings
Tries - Tree Based Structures for StringsTries - Tree Based Structures for Strings
Tries - Tree Based Structures for StringsAmrinder Arora
 

Mais procurados (20)

Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHAS
 
Aula 08 - árvores
Aula 08 - árvoresAula 08 - árvores
Aula 08 - árvores
 
Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
Banco de Dados 2: Controle de Concorrência
Banco de Dados 2: Controle de ConcorrênciaBanco de Dados 2: Controle de Concorrência
Banco de Dados 2: Controle de Concorrência
 
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 - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas EstáticasEstrutura de Dados - Aula 04 - Listas Estáticas
Estrutura de Dados - Aula 04 - Listas Estáticas
 
Inserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaInserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista Encadeada
 
Árvore 2-3
Árvore 2-3Árvore 2-3
Árvore 2-3
 
TRIES_data_structure
TRIES_data_structureTRIES_data_structure
TRIES_data_structure
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
binary tree
binary treebinary tree
binary tree
 
Grafos e Árvores
Grafos e ÁrvoresGrafos e Árvores
Grafos e Árvores
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Aula 6 banco de dados
Aula 6   banco de dadosAula 6   banco de dados
Aula 6 banco de dados
 
Search tree,Tree and binary tree and heap tree
Search tree,Tree  and binary tree and heap treeSearch tree,Tree  and binary tree and heap tree
Search tree,Tree and binary tree and heap tree
 
Listas duplamente encadeadas
Listas duplamente encadeadasListas duplamente encadeadas
Listas duplamente encadeadas
 
Sistema de gerenciamento de banco de dados
Sistema de gerenciamento de banco de dadosSistema de gerenciamento de banco de dados
Sistema de gerenciamento de banco de dados
 
Como descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoComo descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcação
 
Tries - Tree Based Structures for Strings
Tries - Tree Based Structures for StringsTries - Tree Based Structures for Strings
Tries - Tree Based Structures for Strings
 

Semelhante a Arvores b

Semelhante a Arvores b (6)

17 arvores binarias de busca
17   arvores binarias de busca17   arvores binarias de busca
17 arvores binarias de busca
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Á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
 
Árvore b+ pesquisa e ordenação
Árvore b+ pesquisa e ordenaçãoÁrvore b+ pesquisa e ordenação
Árvore b+ pesquisa e ordenação
 
Aula 18
Aula 18Aula 18
Aula 18
 
Aula 19
Aula 19Aula 19
Aula 19
 

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.