Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca...
Transcript of Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca...
![Page 1: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/1.jpg)
Espalhamento(hashing)
1
MC 202 EFFernando Vanini
IC - UnicampKlais Soluções
![Page 2: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/2.jpg)
Busca por elementos
• Dado um conjunto de pares (chave,valor)– determinar se uma chave está no conjunto e o valor
associado– inserir um novo par no conjunto– remover um par do conjunto
• Estruturas que podem ser usadas
2
• Estruturas que podem ser usadas– Tabelas simples (vetores ou listas)– Árvores de busca – Tabelas de espalhamento
![Page 3: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/3.jpg)
Busca binária
• A tabela é um vetor ordenado.• A cada passo o algoritmo divide o espaço de
busca pela metade com base numa comparação.
3
comparação.• Tempo de busca por um elemento: O(log2N)• Tempo de inserção de um elemento: O(N)• Tempo de remoção de um elemento: O(N)
![Page 4: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/4.jpg)
Busca binária
/**************************************
versão recursiva
***************************************/
int binSearch(int a, int tab[],int i,int j){
if(i > j) return -1;
int k = (i+j)/2;
4
int k = (i+j)/2;
if(a < tab[k]) return binSearch(a,tab,i,k-1);
if(a > tab[k]) return binSearch(a,tab,k+1,j);
return k;
}
![Page 5: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/5.jpg)
Busca binária
/****************************************
versão iterativa
****************************************/
int binSearch(int a, int tab[],int i,int j){
while (i >= j) {
k = (i+j)/2;
5
k = (i+j)/2;
if(a < tab[k]) j = k-1; else
if(a > tab[k]) i = k+1; else
return k;
}
return -1;
}
![Page 6: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/6.jpg)
Estrutura geral do algoritmo
função busca(...){
enquanto não achou {
compare com uma chave da estrutura ;
se achou devolva o par (chave,valor) encontrado;
senão divida o espaço de busca com base no resultado
da comparação;
6
da comparação;
}
}
• esse processo é praticamente o mesmo em todos métodos de busca.
• se a divisão do espaço de busca for balanceada, o tempo de busca é O(log N)
![Page 7: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/7.jpg)
Espalhamento (hashing)
• Idéia geral: usar uma função f(x) que associa as chaves do espaço de busca a um conjunto de inteiros entre 0 e k-1, correspondente ao índice numa tabela contendo os valores sendo procurados.
7
X f(x)
tabela
![Page 8: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/8.jpg)
Espalhamento (hashing)
• Principais problemas– função de espalhamento adequada– que fazer em caso de colisão (chaves x e y tais
que f(x) = f(y)) ?
• Função de espalhamento: características
8
• Função de espalhamento: características desejáveis:– eficiência– bom espalhamento
![Page 9: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/9.jpg)
Um exemplo
/**********************************
função de espalhamento exemplo
devolve um inteiro entre 0 e 50
**********************************/
int f(char *s){
9
int f(char *s){
int k = strlen(s);
int i, j = 0;
for(i=0; i<k; i++) j+=s[i];
return j % 51;
}
![Page 10: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/10.jpg)
Tratamento de colisões
0 0 alfa
• resizing: se a taxa de ocupação da tabela excede um limite,
aumenta-se o tamanho da tabela.
•encadeamento: manter numa lista ligada as chaves que
levam a um mesmo índice na tabela de hashing.
10
0
1
2
3
4
5
6
0
0
0
0
0
0
0
alfa
zxxy npto kybx
gama
tabela de
hashing
![Page 11: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/11.jpg)
Hashing: vantagens e desvantagens
• Vantagens:– algoritmos simples e eficientes para inserção,
retirada e busca
• Desvantagens:– nenhuma garantia de balanceamento
11
– espaço sub-utilizado nas tabelas– o grau de espalhamento é sensível à função de
hashing utilizada e ao tipo de informação usada como chave.
![Page 12: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/12.jpg)
Referências na web
• http://en.wikipedia.org/wiki/Hash_table• http://www.sparknotes.com/cs/searching/hashtables/section1.html• http://www.cs.auckland.ac.nz/software/AlgAnim/hash_tables.html• http://www.cs.pitt.edu/~kirk/cs1501/animations/Hashing.html
12
![Page 13: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/13.jpg)
Espalhamento(hashing)
1
MC 202 EFFernando Vanini
IC - UnicampKlais Soluções
![Page 14: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/14.jpg)
Busca por elementos
• Dado um conjunto de pares (chave,valor)– determinar se uma chave está no conjunto e o valor
associado– inserir um novo par no conjunto– remover um par do conjunto
• Estruturas que podem ser usadas
2
• Estruturas que podem ser usadas– Tabelas simples (vetores ou listas)– Árvores de busca – Tabelas de espalhamento
![Page 15: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/15.jpg)
Busca binária
• A tabela é um vetor ordenado.• A cada passo o algoritmo divide o espaço de
busca pela metade com base numa comparação.
3
comparação.• Tempo de busca por um elemento: O(log2N)• Tempo de inserção de um elemento: O(N)• Tempo de remoção de um elemento: O(N)
![Page 16: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/16.jpg)
Busca binária
/**************************************
versão recursiva
***************************************/
int binSearch(int a, int tab[],int i,int j){
if(i > j) return -1;
int k = (i+j)/2;
4
int k = (i+j)/2;
if(a < tab[k]) return binSearch(a,tab,i,k-1);
if(a > tab[k]) return binSearch(a,tab,k+1,j);
return k;
}
![Page 17: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/17.jpg)
Busca binária
/****************************************
versão iterativa
****************************************/
int binSearch(int a, int tab[],int i,int j){
while (i >= j) {
k = (i+j)/2;
5
k = (i+j)/2;
if(a < tab[k]) j = k-1; else
if(a > tab[k]) i = k+1; else
return k;
}
return -1;
}
![Page 18: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/18.jpg)
Estrutura geral do algoritmo
função busca(...){
enquanto não achou {
compare com uma chave da estrutura ;
se achou devolva o par (chave,valor) encontrado;
senão divida o espaço de busca com base no resultado
da comparação;
6
da comparação;
}
}
• esse processo é praticamente o mesmo em todos métodos de busca.
• se a divisão do espaço de busca for balanceada, o tempo de busca é O(log N)
![Page 19: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/19.jpg)
Espalhamento (hashing)
• Idéia geral: usar uma função f(x) que associa as chaves do espaço de busca a um conjunto de inteiros entre 0 e k-1, correspondente ao índice numa tabela contendo os valores sendo procurados.
7
X f(x)
tabela
![Page 20: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/20.jpg)
Espalhamento (hashing)
• Principais problemas– função de espalhamento adequada– que fazer em caso de colisão (chaves x e y tais
que f(x) = f(y)) ?
• Função de espalhamento: características
8
• Função de espalhamento: características desejáveis:– eficiência– bom espalhamento
![Page 21: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/21.jpg)
Um exemplo
/**********************************
função de espalhamento exemplo
devolve um inteiro entre 0 e 50
**********************************/
int f(char *s){
9
int f(char *s){
int k = strlen(s);
int i, j = 0;
for(i=0; i<k; i++) j+=s[i];
return j % 51;
}
![Page 22: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/22.jpg)
Tratamento de colisões
0 0 alfa
• resizing: se a taxa de ocupação da tabela excede um limite,
aumenta-se o tamanho da tabela.
•encadeamento: manter numa lista ligada as chaves que
levam a um mesmo índice na tabela de hashing.
10
0
1
2
3
4
5
6
0
0
0
0
0
0
0
alfa
zxxy npto kybx
gama
tabela de
hashing
![Page 23: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/23.jpg)
Hashing: vantagens e desvantagens
• Vantagens:– algoritmos simples e eficientes para inserção,
retirada e busca
• Desvantagens:– nenhuma garantia de balanceamento
11
– espaço sub-utilizado nas tabelas– o grau de espalhamento é sensível à função de
hashing utilizada e ao tipo de informação usada como chave.
![Page 24: Espalhamento (hashing) - INSTITUTO DE COMPUTAÇÃOvanini/mc202/apresentacoes/hashing.pdf · Busca binária • A tabela é um vetor ordenado. • A cada passo o algoritmo divide o](https://reader033.fdocumentos.com/reader033/viewer/2022052921/5c0d6b4009d3f27c728b4802/html5/thumbnails/24.jpg)
Referências na web
• http://en.wikipedia.org/wiki/Hash_table• http://www.sparknotes.com/cs/searching/hashtables/section1.html• http://www.cs.auckland.ac.nz/software/AlgAnim/hash_tables.html• http://www.cs.pitt.edu/~kirk/cs1501/animations/Hashing.html
12