Hash e Btree
Prof: Sergio Souza Costa
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com

https://sites.google.com/site/profsergiocosta/home
http://www.slideshare.net/skosta/presentations?order=popular
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
Introdução
Banco de dados utilizam indices para
recuperação de informação.
Arquivos de índices
Introdução: Indexação
Objetivo:
Permitir um rápido acesso aleatório aos registros num
arquivo.

O que é um índice?
Uma estrutura de dados adicional associada ao arquivo
(tabela).
Introdução: Tipos de Indexação
Hash
Baseiam-se na distribuição uniforme dos valores
determinados por uma função (função de hash).

Ordenados
Baseiam-se na ordenação dos valores.
Mononível x Multinível
Introdução: Hash
Exemplos de hash
bucket 0
bucket 1
bucket 2

bucket de overflow para o bucket 1

bucket 3
Encadeamento (ou lista) de overflow para o bucket 3
Introdução: Mononível
Introdução: Multinível (Btree)
Hash
Como aproveitar as características de acesso constante de
uma estrutura de dados contigua (vetor, arranjo) ?

Pense na matrícula de alunos em uma universidade ?
Posso usá-la diretamente como um índice de um vetor ?
Como seria a complexidade de busca ? Quais problemas ?
Hash
Por exemplo:
15600

Tancredo

struct aluno {
int mat;
char nome[81];
char email[41];
};
typedef struct aluno Aluno;
24452

Rafael

Quanto será o consumo de memoria ?
Hash
Por exemplo:
15600

Tancredo

struct aluno {
int mat;
// 4 bytes
= 4 bytes
char nome[81]; // 1 byte * 81 = 81 bytes
char email[41]; // 1 byte * 41 = 41 bytes
};
Total = 126 bytes
typedef struct aluno Aluno;
24452

Rafael

Quanto será o consumo de memoria ?
Hash
E se a matricula fosse composta por mais dígitos,
por exemplo 8.
E se quiséssemos indexar por outra informação,
ao invés da matricula, por exemplo o nome.
Função
Método da divisão
h(k) = k mod m

21398
17328
21513
21613
21264

Para m igual a 100, concluam o
mapeamento e me diz o que
identificaram ?

98
Função sobrejetora
Pode ocorrer que mais de um
"índice" seja mapeado para um único
valor.

Neste caso dizemos que ocorreu
uma "colisão".
Colisão

Colisão
Funçao hash
Função hash é como uma função qualquer, porém
o grande desafio é gerar funções onde ocorra
poucas colisões.
Em rede e sistemas operacionais vocês verão alguns
algoritmos, como o md5 e sha-1.
Como vocês acham que funciona a autenticação em
um sistem unix ?
Tabelas de espalhamento (Hash)
●

●

●

●

●

Hash é uma generalização da noção mais simples de um arranjo comum,
sendo uma estrutura de dados do tipo dicionário.
Dicionários são estruturas especializadas em prover as operações de
inserir, pesquisar e remover.
A idéia central do Hash é utilizar uma função, aplicada sobre parte da
informação (chave), para retornar o índice onde a informação deve ou
deveria estar armazenada.
Esta função que mapeia a chave para um índice de um arranjo é chamada
de Função de Hashing.
A estrutura de dados Hash é comumente chamada de Tabela Hash.
Tabelas de espalhamento (Hash)
123.456.781-00
143.576.342-23
345.365.768-93
879.094.345-45
Tabela
Hash

19
20
...
37
...
50
...
85
...

Função
de
Hashing

19
37
50
85

123.456.781-00; Fausto Silva; Av. Canal. Nº 45.

143.576.342-23; Carla Perez; Rua Celso Oliva. Nº 27.
345.365.768-93; Gugu Liberato; Av. Atlântica. S/N.
879.094.345-45 ; Hebe Camargo; Rua B. Nº 100.
Função Hash
●

●

●

●

●

A Função de Hashing é a responsável por gerar um índice a partir
de uma determinada chave.
O ideal é que a função forneça índices únicos para o conjunto das
chaves de entrada possíveis.
A função de Hashing é extremamente importante, pois ela é
responsável por distribuir as informações pela Tabela Hash.
A implementação da função de Hashing tem influência direta na
eficiência das operações sobre o Hash.

Tal função deve ser fácil de se computar
Função Hash
Função Hash
Considerem uma função hash que mapeia todos os
valores para o mesmo indice. Qual será a
complexidade de busca ?
Considerem uma função hash que mapeia apenas
um valor para cada indice. Qual será a
complexidade de busca?
Como representar ?
Como representar ?

Precisamos de uma função Hash
Como representar ?

Precisamos de uma função Hash
Precisamos de um arranjo (vetor)
Como representar ?

Precisamos de uma função Hash
Precisamos de um arranjo (vetor)
Precisamos tratar as colisões
Tratando colisões
Endereçamento fechado
Endereçamento aberto
Endereçamento fechado
Endereçamento fechado
No endereçamento fechado, a posição de inserção
não muda. Todos devem ser inseridos na mesma
posição, através de uma lista ligada em cada uma.
20 mod 5 = 0
18 mod 5 = 3

0

20

1
2

25 mod 5 = 0
colisão com 20

3
4

18

25
Endereçamento fechado
A busca é feita do mesmo modo: calcula-se o valor da função
hash para a chave, e a busca é feita na lista correspondente.
Se o tamanho das listas variar muito, a busca pode se tornar
ineficiente, pois a busca nas listas se torna seqüencial

0

20

4

15

11

1
2
3

0

88

32

60
Endereçamento fechado
A função HASH deve distribuir as chaves entre as
posições de maneira uniforme
0

1

0

15

2

3

4

5

6

10

4

13

31

88

20
Endereçamento fechado
Chained-Hash-Search(T,k)
procure um elemento com chave k na lista T[h(k)] e
devolva seu ponteiro
Chained-Hash-Insert(T,x)
insira x na cabeça da lista T[h(key[x])]
Chained-Hash-Delete(T,x)
remova x da lista T[h(key[x])]
Atividade
Endereçamento aberto
No endereçamento aberto, todos os elementos são
armazenados na própria tabela hash.
Para realizar uma inserção, examinamos/testamos
sucessivamente a tabela hash ate que encontrarmos um slot
vazio no qual a chave sera inserida.
Em endereçamento aberto, a tabela hash pode encher, de forma
que não seja mais possível inserir elementos.
Endereçamento aberto - Inserção
0
1

9

Valores: 204, 44, 58, 10, 100, 25, 20
Endereçamento aberto - Inserção
Valores: 204, 44, 58, 10, 100, 25, 20

0
1

204

9
Endereçamento aberto - Inserção
Valores: 204, 44, 58, 10, 100, 25, 20

0
1

204
44

9
Endereçamento aberto - Inserção
Valores: 204, 44, 58, 10, 100, 25, 20

0
1

204
44

9

Terminem de completar ....
Endereçamento aberto
Algoritmo de inserção
● Usa a função hash para calcular o endereço
● Caso esteja ocupado, procure um local vazio.
● Se der uma volta completa, significa que esta cheia
Algoritmo de busca
● Usa a função hash para calcular o endereço
● Enquanto nao achar o valor procurado e nem um
espaço vazio.
● Se der uma volta completa, significa que o valor não
está lá.
Endereçamento aberto

Quais conclusões
que são possíveis
tirar ?

Algoritmo de inserção
● Usa a função hash para calcular o endereço
● Caso esteja ocupado, procure um local vazio.
● Se der uma volta completa, significa que esta cheia
Algoritmo de busca
● Usa a função hash para calcular o endereço
● Enquanto nao achar o valor procurado e nem um
espaço vazio.
● Se der uma volta completa, significa que o valor não
está lá.
Endereçamento aberto
A tabela tem que ser tratada de modo circular,
quando chega no fim da tabela a varredura
reinicia na posição 0.
Quanto mais "cheia" a tabela estiver, pior será
a eficiência.
Btree
Em grandes bancos de dados os índices tendem a
crescer e são armazenados em memoria secundária.
Acesso a disco não é constante.
Btree
Árvores de Busca Binária
Apropriada para memória principal
Ineficiente em memória secundária

Acesso: cerca de log2n
passos.

Em memoria

Em disco
Btree
As árvores B são árvores multicaminhos (ou multidirecionais)
balanceadas projetadas para trabalhar com dispositivos de
armazenamento secundário como discos magnéticos.
Diferente das árvores binárias, cada nó em uma árvore B pode ter
muitos filhos, isto é, o grau de um nó pode ser muito grande.
Elas visam otimizar as operações de entrada e saída nos dispositivos.
O tempo de acesso às informações em um disco é prejudicado
principalmente pelo tempo de posicionamento do braço de leitura.
Btree
Poucas operações de disco, 1000 chaves.
0 disk ops
1000 keys

1000
…
1001

1000

1000

…

…

…

1001

1001

1001

1000

1000

1000

…

…

1000

1 disk ops
1,001,000 keys

2 disk ops
1,002,001,000 keys
Btree
Árvores B têm vantagens substanciais em relação a outros tipos
de implementações quanto ao tempo de acesso e pesquisa aos
nós.
O criador das árvores B, Rudolf Bayer, não definiu claramente de
onde veio o B das árvores B.
Ao que parece, o B vem de balanceamento onde todos as folhas
da árvore estão em um mesmo nível.
Também é possível que o B tenha vindo de seu sobrenome
Bayer, ou ainda do nome da empresa onde trabalhava Boeing,
no Boeing Scientific Research Labs.
Btree
Á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 e sistemas de
arquivo, por exemplo, as empregam.
Btree: Estrutura
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.
a

<a

b

[a,b]

c

[b,c]

>c
Btree: Definições (1)
1. Seja T uma árvore-B com raiz (root[T]). Ela possuirá então
as seguintes propriedades: 1. Todo o no X tem os seguintes
campos:
a. n[x], o numero de chaves atualmente guardadas no nodo x,
b. As n[x] chaves, guardadas em ordem crescente, tal que
key1[x] <= key2[x] <= … <= keyn[x]
c. leaf [x], Um valor booleano, TRUE se x e uma folha e FALSE
se x e um nodo interno
MO637 – Complexidade de Algoritmos I Arvores
B

Baseado no livro do Cormem
Btree: Definições (2)
2. Cada no interno x tambem contem n[x] + 1 apontadores c1[x],
c2[x],...,cn[x]+1[x] para os filhos. As folhas tem seu apontador
nulo

3. As chaves keyi[x] separam os intervalos de chaves guardadas
em cada sub-arvore: se ki e uma chave guardada numa subarvore com raiz ci[x], entao:
k1 ≤ key1[x] ≤ k2 ≤ key2[x] ≤...≤ keyn[x] ≤ kn+1
4.Todas as folhas da árvore estão no mesmo nível.
Baseado no livro do Cormem
Btree: Definições (3)
5. Existe um número máximo e mínimo de filhos em um nó.
Este número pode ser descrito em termos de um inteiro fixo t
maior ou igual a 2 chamado grau mínimo.
● Todo o nó diferente da raiz deve possuir pelo menos t-1 chaves. Todo
o nó interno diferente da raiz deve possuir pelo menos t filhos. Se a
árvore não é vazia, então a raiz possui pelo menos uma chave.
● Todo o nó pode conter no máximo 2t - 1 chaves. Logo um nó interno
pode ter no máximo 2t filhos. Dizemos que um nó é cheio se ele
contém 2t - 1 chaves.
Btree
De acordo com a definição a árvore B mais simples ocorre
quando t=2. Neste caso todo o nó diferente da raiz possui
2, 3 ou 4 filhos. Esta árvore é também conhecida
por árvore 2-3-4.
Grau mínimo e Ordem
Cormen não fala em Ordem, apenas em grau
mínimo t.
Diferentes definições para ordem:
● Bayer & McCreight 1972, número mínimo de chaves
● Knuth 1997, número maximo de filhos
Btree: Codificação
Considerando que os elementos dentro de um nó x da
B-tree esteja organizado de forma linear, e que:
n[x] = quantidade de chaves no nó x
keyi[x] = valor da chave do nó x na posição i
leaf[x] = retorna verdadeiro caso o nó seja folha

Operações de acesso
Disk-Read = operação de leitura do nó em disco
Disk-Write = operação de leitura do nó em disco
Btree: construtor
Btree: Busca
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, pode-se realizar uma busca
binária nos elementos de cada nó.
● Se a chave não for encontrada no nó em questão, continuase 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.
Busca
Busca
Procedimento para pesquisa do número 13

30

40
50

10 20

348
9

11 13 17

25 28

33 36

42 45
48

52 55
Busca
Procedimento para pesquisa do número 55

30

10 20

3489

11 13 17

40 50

25 28

33 36

42 45 48

52 55
Inserção
Localizar o nó folha X onde o novo elemento deve ser inserido.
●Se o no X não estiver cheio, basta inserir.
●Se o nó X estiver cheio, realizar uma subdivisão de nós
●passar o elemento mediano de X para seu pai
●subdividir X em dois novos nós com t - 1 elementos
●inserir a nova chave
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
Divisão do nodo - Split
Divisão do nodo - Split
Divisão do nodo - Split

T=2
Inserção

È o caso onde a
árvore cresce

Insere na nova
raiz
Inserção
Exemplo (1)
Exemplo (2)
Atividade
Segundo o algoritmo do Cormen, insira os seguintes
elementos:
●Para t=2 e t = 3, insira 4,5,1,12,28,15
●Para t=2 e t = 3, insira 12, 45, 67, 8,9, 15, 17 19
Atividade
A partir de uma árvore B vazia (t=2):
●Insira os seguintes valores (20,30,50,80, 12, 15)
●Agora remova o 50, 80
A partir de uma árvore B vazia (t=3)
●Insira os valores [40,60,80,90,100,20,105,12]
●Remova os valores [90,12,40,100]
Prática
Baixem o seguinte código, e concluem a
codificação. Usando com referencia
Cormen.
Referencia

Hash e Btree

  • 1.
    Hash e Btree Prof:Sergio Souza Costa
  • 2.
    Sobre mim Sérgio SouzaCosta Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home http://www.slideshare.net/skosta/presentations?order=popular https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta
  • 3.
    Introdução Banco de dadosutilizam indices para recuperação de informação. Arquivos de índices
  • 4.
    Introdução: Indexação Objetivo: Permitir umrápido acesso aleatório aos registros num arquivo. O que é um índice? Uma estrutura de dados adicional associada ao arquivo (tabela).
  • 5.
    Introdução: Tipos deIndexação Hash Baseiam-se na distribuição uniforme dos valores determinados por uma função (função de hash). Ordenados Baseiam-se na ordenação dos valores. Mononível x Multinível
  • 6.
    Introdução: Hash Exemplos dehash bucket 0 bucket 1 bucket 2 bucket de overflow para o bucket 1 bucket 3 Encadeamento (ou lista) de overflow para o bucket 3
  • 7.
  • 8.
  • 9.
    Hash Como aproveitar ascaracterísticas de acesso constante de uma estrutura de dados contigua (vetor, arranjo) ? Pense na matrícula de alunos em uma universidade ? Posso usá-la diretamente como um índice de um vetor ? Como seria a complexidade de busca ? Quais problemas ?
  • 10.
    Hash Por exemplo: 15600 Tancredo struct aluno{ int mat; char nome[81]; char email[41]; }; typedef struct aluno Aluno; 24452 Rafael Quanto será o consumo de memoria ?
  • 11.
    Hash Por exemplo: 15600 Tancredo struct aluno{ int mat; // 4 bytes = 4 bytes char nome[81]; // 1 byte * 81 = 81 bytes char email[41]; // 1 byte * 41 = 41 bytes }; Total = 126 bytes typedef struct aluno Aluno; 24452 Rafael Quanto será o consumo de memoria ?
  • 12.
    Hash E se amatricula fosse composta por mais dígitos, por exemplo 8. E se quiséssemos indexar por outra informação, ao invés da matricula, por exemplo o nome.
  • 13.
  • 14.
    Método da divisão h(k)= k mod m 21398 17328 21513 21613 21264 Para m igual a 100, concluam o mapeamento e me diz o que identificaram ? 98
  • 15.
    Função sobrejetora Pode ocorrerque mais de um "índice" seja mapeado para um único valor. Neste caso dizemos que ocorreu uma "colisão".
  • 16.
  • 17.
    Funçao hash Função hashé como uma função qualquer, porém o grande desafio é gerar funções onde ocorra poucas colisões. Em rede e sistemas operacionais vocês verão alguns algoritmos, como o md5 e sha-1. Como vocês acham que funciona a autenticação em um sistem unix ?
  • 18.
    Tabelas de espalhamento(Hash) ● ● ● ● ● Hash é uma generalização da noção mais simples de um arranjo comum, sendo uma estrutura de dados do tipo dicionário. Dicionários são estruturas especializadas em prover as operações de inserir, pesquisar e remover. A idéia central do Hash é utilizar uma função, aplicada sobre parte da informação (chave), para retornar o índice onde a informação deve ou deveria estar armazenada. Esta função que mapeia a chave para um índice de um arranjo é chamada de Função de Hashing. A estrutura de dados Hash é comumente chamada de Tabela Hash.
  • 19.
    Tabelas de espalhamento(Hash) 123.456.781-00 143.576.342-23 345.365.768-93 879.094.345-45 Tabela Hash 19 20 ... 37 ... 50 ... 85 ... Função de Hashing 19 37 50 85 123.456.781-00; Fausto Silva; Av. Canal. Nº 45. 143.576.342-23; Carla Perez; Rua Celso Oliva. Nº 27. 345.365.768-93; Gugu Liberato; Av. Atlântica. S/N. 879.094.345-45 ; Hebe Camargo; Rua B. Nº 100.
  • 20.
    Função Hash ● ● ● ● ● A Funçãode Hashing é a responsável por gerar um índice a partir de uma determinada chave. O ideal é que a função forneça índices únicos para o conjunto das chaves de entrada possíveis. A função de Hashing é extremamente importante, pois ela é responsável por distribuir as informações pela Tabela Hash. A implementação da função de Hashing tem influência direta na eficiência das operações sobre o Hash. Tal função deve ser fácil de se computar
  • 21.
  • 22.
    Função Hash Considerem umafunção hash que mapeia todos os valores para o mesmo indice. Qual será a complexidade de busca ? Considerem uma função hash que mapeia apenas um valor para cada indice. Qual será a complexidade de busca?
  • 23.
  • 24.
    Como representar ? Precisamosde uma função Hash
  • 25.
    Como representar ? Precisamosde uma função Hash Precisamos de um arranjo (vetor)
  • 26.
    Como representar ? Precisamosde uma função Hash Precisamos de um arranjo (vetor) Precisamos tratar as colisões
  • 27.
  • 28.
  • 29.
    Endereçamento fechado No endereçamentofechado, a posição de inserção não muda. Todos devem ser inseridos na mesma posição, através de uma lista ligada em cada uma. 20 mod 5 = 0 18 mod 5 = 3 0 20 1 2 25 mod 5 = 0 colisão com 20 3 4 18 25
  • 30.
    Endereçamento fechado A buscaé feita do mesmo modo: calcula-se o valor da função hash para a chave, e a busca é feita na lista correspondente. Se o tamanho das listas variar muito, a busca pode se tornar ineficiente, pois a busca nas listas se torna seqüencial 0 20 4 15 11 1 2 3 0 88 32 60
  • 31.
    Endereçamento fechado A funçãoHASH deve distribuir as chaves entre as posições de maneira uniforme 0 1 0 15 2 3 4 5 6 10 4 13 31 88 20
  • 32.
    Endereçamento fechado Chained-Hash-Search(T,k) procure umelemento com chave k na lista T[h(k)] e devolva seu ponteiro Chained-Hash-Insert(T,x) insira x na cabeça da lista T[h(key[x])] Chained-Hash-Delete(T,x) remova x da lista T[h(key[x])]
  • 33.
  • 34.
    Endereçamento aberto No endereçamentoaberto, todos os elementos são armazenados na própria tabela hash. Para realizar uma inserção, examinamos/testamos sucessivamente a tabela hash ate que encontrarmos um slot vazio no qual a chave sera inserida. Em endereçamento aberto, a tabela hash pode encher, de forma que não seja mais possível inserir elementos.
  • 35.
    Endereçamento aberto -Inserção 0 1 9 Valores: 204, 44, 58, 10, 100, 25, 20
  • 36.
    Endereçamento aberto -Inserção Valores: 204, 44, 58, 10, 100, 25, 20 0 1 204 9
  • 37.
    Endereçamento aberto -Inserção Valores: 204, 44, 58, 10, 100, 25, 20 0 1 204 44 9
  • 38.
    Endereçamento aberto -Inserção Valores: 204, 44, 58, 10, 100, 25, 20 0 1 204 44 9 Terminem de completar ....
  • 39.
    Endereçamento aberto Algoritmo deinserção ● Usa a função hash para calcular o endereço ● Caso esteja ocupado, procure um local vazio. ● Se der uma volta completa, significa que esta cheia Algoritmo de busca ● Usa a função hash para calcular o endereço ● Enquanto nao achar o valor procurado e nem um espaço vazio. ● Se der uma volta completa, significa que o valor não está lá.
  • 40.
    Endereçamento aberto Quais conclusões quesão possíveis tirar ? Algoritmo de inserção ● Usa a função hash para calcular o endereço ● Caso esteja ocupado, procure um local vazio. ● Se der uma volta completa, significa que esta cheia Algoritmo de busca ● Usa a função hash para calcular o endereço ● Enquanto nao achar o valor procurado e nem um espaço vazio. ● Se der uma volta completa, significa que o valor não está lá.
  • 41.
    Endereçamento aberto A tabelatem que ser tratada de modo circular, quando chega no fim da tabela a varredura reinicia na posição 0. Quanto mais "cheia" a tabela estiver, pior será a eficiência.
  • 42.
    Btree Em grandes bancosde dados os índices tendem a crescer e são armazenados em memoria secundária. Acesso a disco não é constante.
  • 43.
    Btree Árvores de BuscaBinária Apropriada para memória principal Ineficiente em memória secundária Acesso: cerca de log2n passos. Em memoria Em disco
  • 44.
    Btree As árvores Bsão árvores multicaminhos (ou multidirecionais) balanceadas projetadas para trabalhar com dispositivos de armazenamento secundário como discos magnéticos. Diferente das árvores binárias, cada nó em uma árvore B pode ter muitos filhos, isto é, o grau de um nó pode ser muito grande. Elas visam otimizar as operações de entrada e saída nos dispositivos. O tempo de acesso às informações em um disco é prejudicado principalmente pelo tempo de posicionamento do braço de leitura.
  • 45.
    Btree Poucas operações dedisco, 1000 chaves. 0 disk ops 1000 keys 1000 … 1001 1000 1000 … … … 1001 1001 1001 1000 1000 1000 … … 1000 1 disk ops 1,001,000 keys 2 disk ops 1,002,001,000 keys
  • 46.
    Btree Árvores B têmvantagens substanciais em relação a outros tipos de implementações quanto ao tempo de acesso e pesquisa aos nós. O criador das árvores B, Rudolf Bayer, não definiu claramente de onde veio o B das árvores B. Ao que parece, o B vem de balanceamento onde todos as folhas da árvore estão em um mesmo nível. Também é possível que o B tenha vindo de seu sobrenome Bayer, ou ainda do nome da empresa onde trabalhava Boeing, no Boeing Scientific Research Labs.
  • 47.
    Btree Á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 e sistemas de arquivo, por exemplo, as empregam.
  • 48.
    Btree: Estrutura Os elementosdentro 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. a <a b [a,b] c [b,c] >c
  • 49.
    Btree: Definições (1) 1.Seja T uma árvore-B com raiz (root[T]). Ela possuirá então as seguintes propriedades: 1. Todo o no X tem os seguintes campos: a. n[x], o numero de chaves atualmente guardadas no nodo x, b. As n[x] chaves, guardadas em ordem crescente, tal que key1[x] <= key2[x] <= … <= keyn[x] c. leaf [x], Um valor booleano, TRUE se x e uma folha e FALSE se x e um nodo interno MO637 – Complexidade de Algoritmos I Arvores B Baseado no livro do Cormem
  • 50.
    Btree: Definições (2) 2.Cada no interno x tambem contem n[x] + 1 apontadores c1[x], c2[x],...,cn[x]+1[x] para os filhos. As folhas tem seu apontador nulo 3. As chaves keyi[x] separam os intervalos de chaves guardadas em cada sub-arvore: se ki e uma chave guardada numa subarvore com raiz ci[x], entao: k1 ≤ key1[x] ≤ k2 ≤ key2[x] ≤...≤ keyn[x] ≤ kn+1 4.Todas as folhas da árvore estão no mesmo nível. Baseado no livro do Cormem
  • 51.
    Btree: Definições (3) 5.Existe um número máximo e mínimo de filhos em um nó. Este número pode ser descrito em termos de um inteiro fixo t maior ou igual a 2 chamado grau mínimo. ● Todo o nó diferente da raiz deve possuir pelo menos t-1 chaves. Todo o nó interno diferente da raiz deve possuir pelo menos t filhos. Se a árvore não é vazia, então a raiz possui pelo menos uma chave. ● Todo o nó pode conter no máximo 2t - 1 chaves. Logo um nó interno pode ter no máximo 2t filhos. Dizemos que um nó é cheio se ele contém 2t - 1 chaves.
  • 52.
    Btree De acordo coma definição a árvore B mais simples ocorre quando t=2. Neste caso todo o nó diferente da raiz possui 2, 3 ou 4 filhos. Esta árvore é também conhecida por árvore 2-3-4.
  • 53.
    Grau mínimo eOrdem Cormen não fala em Ordem, apenas em grau mínimo t. Diferentes definições para ordem: ● Bayer & McCreight 1972, número mínimo de chaves ● Knuth 1997, número maximo de filhos
  • 54.
    Btree: Codificação Considerando queos elementos dentro de um nó x da B-tree esteja organizado de forma linear, e que: n[x] = quantidade de chaves no nó x keyi[x] = valor da chave do nó x na posição i leaf[x] = retorna verdadeiro caso o nó seja folha Operações de acesso Disk-Read = operação de leitura do nó em disco Disk-Write = operação de leitura do nó em disco
  • 55.
  • 56.
    Btree: Busca A buscaem 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, pode-se realizar uma busca binária nos elementos de cada nó. ● Se a chave não for encontrada no nó em questão, continuase 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.
  • 57.
  • 58.
    Busca Procedimento para pesquisado número 13 30 40 50 10 20 348 9 11 13 17 25 28 33 36 42 45 48 52 55
  • 59.
    Busca Procedimento para pesquisado número 55 30 10 20 3489 11 13 17 40 50 25 28 33 36 42 45 48 52 55
  • 60.
    Inserção Localizar o nófolha X onde o novo elemento deve ser inserido. ●Se o no X não estiver cheio, basta inserir. ●Se o nó X estiver cheio, realizar uma subdivisão de nós ●passar o elemento mediano de X para seu pai ●subdividir X em dois novos nós com t - 1 elementos ●inserir a nova chave 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
  • 61.
  • 62.
  • 63.
    Divisão do nodo- Split T=2
  • 64.
    Inserção È o casoonde a árvore cresce Insere na nova raiz
  • 65.
  • 66.
  • 67.
  • 68.
    Atividade Segundo o algoritmodo Cormen, insira os seguintes elementos: ●Para t=2 e t = 3, insira 4,5,1,12,28,15 ●Para t=2 e t = 3, insira 12, 45, 67, 8,9, 15, 17 19
  • 69.
    Atividade A partir deuma árvore B vazia (t=2): ●Insira os seguintes valores (20,30,50,80, 12, 15) ●Agora remova o 50, 80 A partir de uma árvore B vazia (t=3) ●Insira os valores [40,60,80,90,100,20,105,12] ●Remova os valores [90,12,40,100]
  • 70.
    Prática Baixem o seguintecódigo, e concluem a codificação. Usando com referencia Cormen.
  • 71.