Your SlideShare is downloading. ×
0
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://si...
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 est...
Introdução: Tipos de Indexação
Hash
Baseiam-se na distribuição uniforme dos valores
determinados por uma função (função de...
Introdução: Hash
Exemplos de hash
bucket 0
bucket 1
bucket 2

bucket de overflow para o bucket 1

bucket 3
Encadeamento (o...
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 n...
Hash
Por exemplo:
15600

Tancredo

struct aluno {
int mat;
char nome[81];
char email[41];
};
typedef struct aluno Aluno;
2...
Hash
Por exemplo:
15600

Tancredo

struct aluno {
int mat;
// 4 bytes
= 4 bytes
char nome[81]; // 1 byte * 81 = 81 bytes
c...
Hash
E se a matricula fosse composta por mais dígitos,
por exemplo 8.
E se quiséssemos indexar por outra informação,
ao in...
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
...
Função sobrejetora
Pode ocorrer que mais de um
"índice" seja mapeado para um único
valor.

Neste caso dizemos que ocorreu
...
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...
Tabelas de espalhamento (Hash)
●

●

●

●

●

Hash é uma generalização da noção mais simples de um arranjo comum,
sendo um...
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
...
5...
Função Hash
●

●

●

●

●

A Função de Hashing é a responsável por gerar um índice a partir
de uma determinada chave.
O id...
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 ...
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...
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 ...
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

...
Endereçamento fechado
Chained-Hash-Search(T,k)
procure um elemento com chave k na lista T[h(k)] e
devolva seu ponteiro
Cha...
Atividade
Endereçamento aberto
No endereçamento aberto, todos os elementos são
armazenados na própria tabela hash.
Para realizar uma...
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 ...
Endereçamento aberto

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

Algoritmo de inserção
● Usa a função hash para calcular ...
Endereçamento aberto
A tabela tem que ser tratada de modo circular,
quando chega no fim da tabela a varredura
reinicia na ...
Btree
Em grandes bancos de dados os índices tendem a
crescer e são armazenados em memoria secundária.
Acesso a disco não é...
Btree
Árvores de Busca Binária
Apropriada para memória principal
Ineficiente em memória secundária

Acesso: cerca de log2n...
Btree
As árvores B são árvores multicaminhos (ou multidirecionais)
balanceadas projetadas para trabalhar com dispositivos ...
Btree
Poucas operações de disco, 1000 chaves.
0 disk ops
1000 keys

1000
…
1001

1000

1000

…

…

…

1001

1001

1001

10...
Btree
Árvores B têm vantagens substanciais em relação a outros tipos
de implementações quanto ao tempo de acesso e pesquis...
Btree
Árvore B é uma estrutura de dados que utiliza o recurso de
manter mais de uma chave em cada nó da estrutura.
Ela pro...
Btree: Estrutura
Os elementos dentro de um nó estão ordenados.
O ponteiro situado entre dois elementos a e b aponta para a...
Btree: Definições (1)
1. Seja T uma árvore-B com raiz (root[T]). Ela possuirá então
as seguintes propriedades: 1. Todo o n...
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. ...
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 u...
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...
Grau mínimo e Ordem
Cormen não fala em Ordem, apenas em grau
mínimo t.
Diferentes definições para ordem:
● Bayer & McCreig...
Btree: Codificação
Considerando que os elementos dentro de um nó x da
B-tree esteja organizado de forma linear, e que:
n[x...
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...
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...
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...
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
...
Prática
Baixem o seguinte código, e concluem a
codificação. Usando com referencia
Cormen.
Referencia
Upcoming SlideShare
Loading in...5
×

Hash e Btree

1,430

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,430
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
62
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "Hash e Btree"

  1. 1. Hash e Btree Prof: Sergio Souza Costa
  2. 2. 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
  3. 3. Introdução Banco de dados utilizam indices para recuperação de informação. Arquivos de índices
  4. 4. 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).
  5. 5. 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
  6. 6. 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
  7. 7. Introdução: Mononível
  8. 8. Introdução: Multinível (Btree)
  9. 9. 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 ?
  10. 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. 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. 12. 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.
  13. 13. Função
  14. 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. 15. Função sobrejetora Pode ocorrer que mais de um "índice" seja mapeado para um único valor. Neste caso dizemos que ocorreu uma "colisão".
  16. 16. Colisão Colisão
  17. 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. 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. 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. 20. 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
  21. 21. Função Hash
  22. 22. 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?
  23. 23. Como representar ?
  24. 24. Como representar ? Precisamos de uma função Hash
  25. 25. Como representar ? Precisamos de uma função Hash Precisamos de um arranjo (vetor)
  26. 26. Como representar ? Precisamos de uma função Hash Precisamos de um arranjo (vetor) Precisamos tratar as colisões
  27. 27. Tratando colisões Endereçamento fechado Endereçamento aberto
  28. 28. Endereçamento fechado
  29. 29. 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
  30. 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. 31. 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
  32. 32. 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])]
  33. 33. Atividade
  34. 34. 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.
  35. 35. Endereçamento aberto - Inserção 0 1 9 Valores: 204, 44, 58, 10, 100, 25, 20
  36. 36. Endereçamento aberto - Inserção Valores: 204, 44, 58, 10, 100, 25, 20 0 1 204 9
  37. 37. Endereçamento aberto - Inserção Valores: 204, 44, 58, 10, 100, 25, 20 0 1 204 44 9
  38. 38. Endereçamento aberto - Inserção Valores: 204, 44, 58, 10, 100, 25, 20 0 1 204 44 9 Terminem de completar ....
  39. 39. 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á.
  40. 40. 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á.
  41. 41. 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.
  42. 42. 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.
  43. 43. 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
  44. 44. 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.
  45. 45. 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
  46. 46. 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.
  47. 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. 48. 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
  49. 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. 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. 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. 52. 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.
  53. 53. 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
  54. 54. 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
  55. 55. Btree: construtor
  56. 56. 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.
  57. 57. Busca
  58. 58. 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
  59. 59. 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
  60. 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. 61. Divisão do nodo - Split
  62. 62. Divisão do nodo - Split
  63. 63. Divisão do nodo - Split T=2
  64. 64. Inserção È o caso onde a árvore cresce Insere na nova raiz
  65. 65. Inserção
  66. 66. Exemplo (1)
  67. 67. Exemplo (2)
  68. 68. 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
  69. 69. 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]
  70. 70. Prática Baixem o seguinte código, e concluem a codificação. Usando com referencia Cormen.
  71. 71. Referencia
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×