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

Árvores Balanceadas AVL
Árvores Balanceadas AVLÁrvores Balanceadas AVL
Árvores Balanceadas AVLDaniel Maia
 
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áriasAdriano Teixeira de Souza
 
Utilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersUtilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersDaniel Maia
 
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Leinylson Fontinele
 
Atividade para o nível alfabético
Atividade para o nível alfabéticoAtividade para o nível alfabético
Atividade para o nível alfabéticoCMagenis
 
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Leinylson Fontinele
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
EDII14 [2012.1] Árvores B e B+
EDII14 [2012.1]   Árvores B e B+EDII14 [2012.1]   Árvores B e B+
EDII14 [2012.1] Árvores B e B+KianeLedok
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e bináriasSérgio Souza Costa
 
2021 ap. de port. 1º s. 3º ano ok
2021 ap. de port. 1º s.   3º ano  ok2021 ap. de port. 1º s.   3º ano  ok
2021 ap. de port. 1º s. 3º ano okArilene Flores
 
A galinha DO VIZINHO, BOTA OVO AMARELINHO
A galinha DO VIZINHO, BOTA OVO AMARELINHOA galinha DO VIZINHO, BOTA OVO AMARELINHO
A galinha DO VIZINHO, BOTA OVO AMARELINHOSuelen Dos Santos
 
Portugusv2 120819122926-phpapp01
Portugusv2 120819122926-phpapp01Portugusv2 120819122926-phpapp01
Portugusv2 120819122926-phpapp01Elza Laurentino
 
Banco de palavras de comunicação ilustrada convertido
Banco de palavras de comunicação ilustrada convertidoBanco de palavras de comunicação ilustrada convertido
Banco de palavras de comunicação ilustrada convertidoLucilene Rocha
 
1 A ABELHA LILI FRASES PONTILHADAS .pdf
1 A ABELHA LILI FRASES PONTILHADAS .pdf1 A ABELHA LILI FRASES PONTILHADAS .pdf
1 A ABELHA LILI FRASES PONTILHADAS .pdfSimoneHelenDrumond
 
Sequência didática poemas
Sequência didática poemasSequência didática poemas
Sequência didática poemasDário Reis
 

Mais procurados (20)

Árvores Balanceadas AVL
Árvores Balanceadas AVLÁrvores Balanceadas AVL
Árvores Balanceadas AVL
 
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
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Utilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersUtilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggers
 
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
 
Atividade para o nível alfabético
Atividade para o nível alfabéticoAtividade para o nível alfabético
Atividade para o nível alfabético
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Aula 08 - árvores
Aula 08 - árvoresAula 08 - árvores
Aula 08 - árvores
 
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
EDII14 [2012.1] Árvores B e B+
EDII14 [2012.1]   Árvores B e B+EDII14 [2012.1]   Árvores B e B+
EDII14 [2012.1] Árvores B e B+
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e binárias
 
Dia da árvore
Dia da árvoreDia da árvore
Dia da árvore
 
2021 ap. de port. 1º s. 3º ano ok
2021 ap. de port. 1º s.   3º ano  ok2021 ap. de port. 1º s.   3º ano  ok
2021 ap. de port. 1º s. 3º ano ok
 
A galinha DO VIZINHO, BOTA OVO AMARELINHO
A galinha DO VIZINHO, BOTA OVO AMARELINHOA galinha DO VIZINHO, BOTA OVO AMARELINHO
A galinha DO VIZINHO, BOTA OVO AMARELINHO
 
Letra a
Letra a Letra a
Letra a
 
Portugusv2 120819122926-phpapp01
Portugusv2 120819122926-phpapp01Portugusv2 120819122926-phpapp01
Portugusv2 120819122926-phpapp01
 
Banco de palavras de comunicação ilustrada convertido
Banco de palavras de comunicação ilustrada convertidoBanco de palavras de comunicação ilustrada convertido
Banco de palavras de comunicação ilustrada convertido
 
1 A ABELHA LILI FRASES PONTILHADAS .pdf
1 A ABELHA LILI FRASES PONTILHADAS .pdf1 A ABELHA LILI FRASES PONTILHADAS .pdf
1 A ABELHA LILI FRASES PONTILHADAS .pdf
 
Sequência didática poemas
Sequência didática poemasSequência didática poemas
Sequência didática poemas
 

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
 

Estrutura de dados Árvore 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.