SlideShare uma empresa Scribd logo
Aula 19 – Hashing: Endere¸camento
Direto e Resolu¸c˜ao de Colis˜oes
Norton Trevisan Roman
norton@usp.br
8 de novembro de 2018
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 1 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Imagine que queremos construir um m´etodo que
retorne a vers˜ao por extenso de um numeral de um
´unico d´ıgito
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 2 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Imagine que queremos construir um m´etodo que
retorne a vers˜ao por extenso de um numeral de um
´unico d´ıgito
Onde a chave de busca ´e o d´ıgito, e o valor resultante ´e sua
vers˜ao por extenso
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 2 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Imagine que queremos construir um m´etodo que
retorne a vers˜ao por extenso de um numeral de um
´unico d´ıgito
Onde a chave de busca ´e o d´ıgito, e o valor resultante ´e sua
vers˜ao por extenso
Queremos ent˜ao um m´etodo
que implemente a seguinte
tabela:
Chave Valor
0 “zero”
1 “um”
. . . . . .
9 “nove”
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 2 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Mais do que isso, imagine que essa tabela n˜ao
precisa conter todas as entradas pr´e-definidas
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Mais do que isso, imagine que essa tabela n˜ao
precisa conter todas as entradas pr´e-definidas
Ela ser´a atualizada dinamicamente
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Mais do que isso, imagine que essa tabela n˜ao
precisa conter todas as entradas pr´e-definidas
Ela ser´a atualizada dinamicamente
Ent˜ao, no in´ıcio, n˜ao h´a elemento algum, sendo eles
inseridos com o tempo
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Mais do que isso, imagine que essa tabela n˜ao
precisa conter todas as entradas pr´e-definidas
Ela ser´a atualizada dinamicamente
Ent˜ao, no in´ıcio, n˜ao h´a elemento algum, sendo eles
inseridos com o tempo
Mas sempre no intervalo entre 0 e 9
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Mais do que isso, imagine que essa tabela n˜ao
precisa conter todas as entradas pr´e-definidas
Ela ser´a atualizada dinamicamente
Ent˜ao, no in´ıcio, n˜ao h´a elemento algum, sendo eles
inseridos com o tempo
Mas sempre no intervalo entre 0 e 9
Como podemos fazer?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Mais do que isso, imagine que essa tabela n˜ao
precisa conter todas as entradas pr´e-definidas
Ela ser´a atualizada dinamicamente
Ent˜ao, no in´ıcio, n˜ao h´a elemento algum, sendo eles
inseridos com o tempo
Mas sempre no intervalo entre 0 e 9
Como podemos fazer?
Criando um Dicion´ario Dinˆamico
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Para isso, definimos o elemento a ser armazenado:
class Elemento {
int valor;
String extenso;
Elemento(int valor, String extenso) {
this.valor = valor;
this.extenso = extenso;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 4 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Precisamos ent˜ao
criar os m´etodos
para manipula¸c˜ao
do dicion´ario:
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Precisamos ent˜ao
criar os m´etodos
para manipula¸c˜ao
do dicion´ario:
class Dicionario {
Elemento[] elementos = new
Elemento[10];
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Precisamos ent˜ao
criar os m´etodos
para manipula¸c˜ao
do dicion´ario:
Inserir um elemento
class Dicionario {
Elemento[] elementos = new
Elemento[10];
void insere(int chave, String ext) {
Elemento el = new Elemento(chave,
ext);
elementos[chave] = el;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Precisamos ent˜ao
criar os m´etodos
para manipula¸c˜ao
do dicion´ario:
Inserir um elemento
Remover um
elemento
class Dicionario {
Elemento[] elementos = new
Elemento[10];
void insere(int chave, String ext) {
Elemento el = new Elemento(chave,
ext);
elementos[chave] = el;
}
void remove(int chave) {
elementos[chave] = null;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Precisamos ent˜ao
criar os m´etodos
para manipula¸c˜ao
do dicion´ario:
Inserir um elemento
Remover um
elemento
Buscar um
elemento
class Dicionario {
Elemento[] elementos = new
Elemento[10];
void insere(int chave, String ext) {
Elemento el = new Elemento(chave,
ext);
elementos[chave] = el;
}
void remove(int chave) {
elementos[chave] = null;
}
Elemento busca(int chave) {
return(elementos[chave]);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
class Dicionario {
Elemento[] elementos = new Elemento[10];
void insere(int chave, String ext) {
Elemento el = new Elemento(chave, ext);
elementos[chave] = el;
}
void remove(int chave) {
elementos[chave] = null;
}
Elemento busca(int chave) {
return(elementos[chave]);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 6 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Note que fizemos um
mapeamento direto
da chave `a posi¸c˜ao do
elemento no arranjo
class Dicionario {
Elemento[] elementos = new Elemento[10];
void insere(int chave, String ext) {
Elemento el = new Elemento(chave, ext);
elementos[chave] = el;
}
void remove(int chave) {
elementos[chave] = null;
}
Elemento busca(int chave) {
return(elementos[chave]);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 6 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
E isso faz com que inser¸c˜oes,
buscas e remo¸c˜oes, usando
a chave, rodem em Θ(1)
class Dicionario {
Elemento[] elementos = new Elemento[10];
void insere(int chave, String ext) {
Elemento el = new Elemento(chave, ext);
elementos[chave] = el;
}
void remove(int chave) {
elementos[chave] = null;
}
Elemento busca(int chave) {
return(elementos[chave]);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 6 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O endere¸camento direto ´e uma t´ecnica simples que
funciona bem quando o universo U de chaves ´e
razoavelmente pequeno
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O endere¸camento direto ´e uma t´ecnica simples que
funciona bem quando o universo U de chaves ´e
razoavelmente pequeno
O conjunto dinˆamico possui m chaves, obtidas do universo
U = {0, 1, . . . , m − 1}, onde m n˜ao ´e muito grande, e n˜ao
h´a dois elementos com a mesma chave
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O endere¸camento direto ´e uma t´ecnica simples que
funciona bem quando o universo U de chaves ´e
razoavelmente pequeno
O conjunto dinˆamico possui m chaves, obtidas do universo
U = {0, 1, . . . , m − 1}, onde m n˜ao ´e muito grande, e n˜ao
h´a dois elementos com a mesma chave
Sob essas condi¸c˜oes, podemos representar o
conjunto com uma Tabela de Endere¸camento Direto
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O endere¸camento direto ´e uma t´ecnica simples que
funciona bem quando o universo U de chaves ´e
razoavelmente pequeno
O conjunto dinˆamico possui m chaves, obtidas do universo
U = {0, 1, . . . , m − 1}, onde m n˜ao ´e muito grande, e n˜ao
h´a dois elementos com a mesma chave
Sob essas condi¸c˜oes, podemos representar o
conjunto com uma Tabela de Endere¸camento Direto
Onde cada posi¸c˜ao corresponde a uma chave no universo U
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O endere¸camento direto ´e uma t´ecnica simples que
funciona bem quando o universo U de chaves ´e
razoavelmente pequeno
O conjunto dinˆamico possui m chaves, obtidas do universo
U = {0, 1, . . . , m − 1}, onde m n˜ao ´e muito grande, e n˜ao
h´a dois elementos com a mesma chave
Sob essas condi¸c˜oes, podemos representar o
conjunto com uma Tabela de Endere¸camento Direto
Onde cada posi¸c˜ao corresponde a uma chave no universo U
A tabela ser´a ent˜ao do tamanho do universo
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O endere¸camento direto ´e aplic´avel quando podemos nos dar ao luxo
de alocar um arranjo que tem uma posi¸c˜ao para cada poss´ıvel chave
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 8 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Suponha agora que queremos uma estrutura
semelhante, mas para guardar nomes de pessoas
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Suponha agora que queremos uma estrutura
semelhante, mas para guardar nomes de pessoas
Como indexar?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Suponha agora que queremos uma estrutura
semelhante, mas para guardar nomes de pessoas
Como indexar?
Uma alternativa ´e fornecer um identificador a cada
pessoa
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Suponha agora que queremos uma estrutura
semelhante, mas para guardar nomes de pessoas
Como indexar?
Uma alternativa ´e fornecer um identificador a cada
pessoa
Uma chave, que comece do 0 e v´a at´e n, o n´umero de
pessoas cadastradas
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Suponha agora que queremos uma estrutura
semelhante, mas para guardar nomes de pessoas
Como indexar?
Uma alternativa ´e fornecer um identificador a cada
pessoa
Uma chave, que comece do 0 e v´a at´e n, o n´umero de
pessoas cadastradas
E se precisarmos remover algu´em?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Suponha agora que queremos uma estrutura
semelhante, mas para guardar nomes de pessoas
Como indexar?
Uma alternativa ´e fornecer um identificador a cada
pessoa
Uma chave, que comece do 0 e v´a at´e n, o n´umero de
pessoas cadastradas
E se precisarmos remover algu´em?
Basta removermos o registro, como fizemos antes
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O problema ´e que isso gera uma lacuna
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O problema ´e que isso gera uma lacuna
Que podemos preencher com a pr´oxima pessoa a ser
registrada
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O problema ´e que isso gera uma lacuna
Que podemos preencher com a pr´oxima pessoa a ser
registrada
Mas ent˜ao, a cada novo registro, precisamos:
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O problema ´e que isso gera uma lacuna
Que podemos preencher com a pr´oxima pessoa a ser
registrada
Mas ent˜ao, a cada novo registro, precisamos:
Correr a tabela buscando a primeira posi¸c˜ao vazia
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O problema ´e que isso gera uma lacuna
Que podemos preencher com a pr´oxima pessoa a ser
registrada
Mas ent˜ao, a cada novo registro, precisamos:
Correr a tabela buscando a primeira posi¸c˜ao vazia
Atualizar o identificador no registro, dando a ele o valor
dessa posi¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O problema ´e que isso gera uma lacuna
Que podemos preencher com a pr´oxima pessoa a ser
registrada
Mas ent˜ao, a cada novo registro, precisamos:
Correr a tabela buscando a primeira posi¸c˜ao vazia
Atualizar o identificador no registro, dando a ele o valor
dessa posi¸c˜ao
Armazenar o registro l´a
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
O problema ´e que isso gera uma lacuna
Que podemos preencher com a pr´oxima pessoa a ser
registrada
Mas ent˜ao, a cada novo registro, precisamos:
Correr a tabela buscando a primeira posi¸c˜ao vazia
Atualizar o identificador no registro, dando a ele o valor
dessa posi¸c˜ao
Armazenar o registro l´a
Θ(n)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Podemos ent˜ao usar o
CPF da pessoa como
identificador
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Podemos ent˜ao usar o
CPF da pessoa como
identificador
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Podemos ent˜ao usar o
CPF da pessoa como
identificador
Fazendo o mapeamento
direto `a tabela
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Podemos ent˜ao usar o
CPF da pessoa como
identificador
Fazendo o mapeamento
direto `a tabela
Volta a ser Θ(1) no
tempo
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
Dicion´arios Dinˆamicos
Tabela de Endere¸camento Direto
Podemos ent˜ao usar o
CPF da pessoa como
identificador
Fazendo o mapeamento
direto `a tabela
Volta a ser Θ(1) no
tempo
Mas a tabela ficar´a
gigantesca!
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
Dicion´arios Dinˆamicos
Tabela de Hash
O problema, nesse caso, ´e que o universo U de
chaves ´e muito grande
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
Dicion´arios Dinˆamicos
Tabela de Hash
O problema, nesse caso, ´e que o universo U de
chaves ´e muito grande
Armazenar a tabela T pode ser por vezes at´e imposs´ıvel
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
Dicion´arios Dinˆamicos
Tabela de Hash
O problema, nesse caso, ´e que o universo U de
chaves ´e muito grande
Armazenar a tabela T pode ser por vezes at´e imposs´ıvel
Al´em disso, o conjunto de chaves K realmente armazenadas
pode ser pequeno, desperdi¸cando muito espa¸co na tabela
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
Dicion´arios Dinˆamicos
Tabela de Hash
O problema, nesse caso, ´e que o universo U de
chaves ´e muito grande
Armazenar a tabela T pode ser por vezes at´e imposs´ıvel
Al´em disso, o conjunto de chaves K realmente armazenadas
pode ser pequeno, desperdi¸cando muito espa¸co na tabela
Que fazer ent˜ao?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
Dicion´arios Dinˆamicos
Tabela de Hash
O problema, nesse caso, ´e que o universo U de
chaves ´e muito grande
Armazenar a tabela T pode ser por vezes at´e imposs´ıvel
Al´em disso, o conjunto de chaves K realmente armazenadas
pode ser pequeno, desperdi¸cando muito espa¸co na tabela
Que fazer ent˜ao?
Fixar o tamanho da tabela, e mapear a chave de cada
registro a uma de suas posi¸c˜oes
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
Dicion´arios Dinˆamicos
Tabela de Hash
O problema, nesse caso, ´e que o universo U de
chaves ´e muito grande
Armazenar a tabela T pode ser por vezes at´e imposs´ıvel
Al´em disso, o conjunto de chaves K realmente armazenadas
pode ser pequeno, desperdi¸cando muito espa¸co na tabela
Que fazer ent˜ao?
Fixar o tamanho da tabela, e mapear a chave de cada
registro a uma de suas posi¸c˜oes
Criamos assim uma Tabela de Espalhamento, ou Tabela
de Hash
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
Tabela de Hash
Estrutura de dados eficiente para implementar
dicion´arios
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
Tabela de Hash
Estrutura de dados eficiente para implementar
dicion´arios
Embora a busca por um elemento possa, no pior caso, ser
Θ(n), na pr´atica, o tempo m´edio ´e Θ(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
Tabela de Hash
Estrutura de dados eficiente para implementar
dicion´arios
Embora a busca por um elemento possa, no pior caso, ser
Θ(n), na pr´atica, o tempo m´edio ´e Θ(1)
Trata-se de um mapeamento da chave a uma
posi¸c˜ao na tabela
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
Tabela de Hash
Estrutura de dados eficiente para implementar
dicion´arios
Embora a busca por um elemento possa, no pior caso, ser
Θ(n), na pr´atica, o tempo m´edio ´e Θ(1)
Trata-se de um mapeamento da chave a uma
posi¸c˜ao na tabela
Ent˜ao, em vez de usarmos a chave como ´ındice, calculamos
o ´ındice a partir da chave
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
Tabela de Hash
Estrutura de dados eficiente para implementar
dicion´arios
Embora a busca por um elemento possa, no pior caso, ser
Θ(n), na pr´atica, o tempo m´edio ´e Θ(1)
Trata-se de um mapeamento da chave a uma
posi¸c˜ao na tabela
Ent˜ao, em vez de usarmos a chave como ´ındice, calculamos
o ´ındice a partir da chave
Tipicamente, a tabela tem tamanho proporcional ao
n´umero de chaves realmente armazenadas
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
Tabela de Hash
Estrutura de dados eficiente para implementar
dicion´arios
Embora a busca por um elemento possa, no pior caso, ser
Θ(n), na pr´atica, o tempo m´edio ´e Θ(1)
Trata-se de um mapeamento da chave a uma
posi¸c˜ao na tabela
Ent˜ao, em vez de usarmos a chave como ´ındice, calculamos
o ´ındice a partir da chave
Tipicamente, a tabela tem tamanho proporcional ao
n´umero de chaves realmente armazenadas
Pouco desperd´ıcio de mem´oria
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
Tabela de Hash
Fun¸c˜ao de Hash
O mapeamento entre a chave e sua posi¸c˜ao na
tabela se d´a via uma fun¸c˜ao de hash
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
Tabela de Hash
Fun¸c˜ao de Hash
O mapeamento entre a chave e sua posi¸c˜ao na
tabela se d´a via uma fun¸c˜ao de hash
A fun¸c˜ao de hash mapeia ent˜ao o universo de todas
as poss´ıveis chaves U `as posi¸c˜oes da tabela T
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
Tabela de Hash
Fun¸c˜ao de Hash
O mapeamento entre a chave e sua posi¸c˜ao na
tabela se d´a via uma fun¸c˜ao de hash
A fun¸c˜ao de hash mapeia ent˜ao o universo de todas
as poss´ıveis chaves U `as posi¸c˜oes da tabela T
h : U → {0, 1, . . . , m − 1}, para T[0..m − 1]
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
Tabela de Hash
Fun¸c˜ao de Hash
O mapeamento entre a chave e sua posi¸c˜ao na
tabela se d´a via uma fun¸c˜ao de hash
A fun¸c˜ao de hash mapeia ent˜ao o universo de todas
as poss´ıveis chaves U `as posi¸c˜oes da tabela T
h : U → {0, 1, . . . , m − 1}, para T[0..m − 1]
Tipicamente m |U|
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
Tabela de Hash
Fun¸c˜ao de Hash
O mapeamento entre a chave e sua posi¸c˜ao na
tabela se d´a via uma fun¸c˜ao de hash
A fun¸c˜ao de hash mapeia ent˜ao o universo de todas
as poss´ıveis chaves U `as posi¸c˜oes da tabela T
h : U → {0, 1, . . . , m − 1}, para T[0..m − 1]
Tipicamente m |U|
Dizemos que h(k) ´e o valor de hash da chave k
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
Tabela de Hash
Endere¸camento Direto × Hash
Direto Hash
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
Tabela de Hash
Endere¸camento Direto × Hash
Direto
O elemento com chave k ´e
armazenado na posi¸c˜ao k
Hash
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
Tabela de Hash
Endere¸camento Direto × Hash
Direto
O elemento com chave k ´e
armazenado na posi¸c˜ao k
|T| = |U|
Hash
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
Tabela de Hash
Endere¸camento Direto × Hash
Direto
O elemento com chave k ´e
armazenado na posi¸c˜ao k
|T| = |U|
Hash
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
Tabela de Hash
Endere¸camento Direto × Hash
Direto
O elemento com chave k ´e
armazenado na posi¸c˜ao k
|T| = |U|
Hash
O elemento com chave k
´e armazenado em h(k)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
Tabela de Hash
Endere¸camento Direto × Hash
Direto
O elemento com chave k ´e
armazenado na posi¸c˜ao k
|T| = |U|
Hash
O elemento com chave k
´e armazenado em h(k)
|T| = m |U|
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
Tabela de Hash
Endere¸camento Direto × Hash
Direto
O elemento com chave k ´e
armazenado na posi¸c˜ao k
|T| = |U|
Hash
O elemento com chave k
´e armazenado em h(k)
|T| = m |U|
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
Tabela de Hash
Colis˜oes
Uma vez que o tamanho m da tabela n˜ao
necessariamente abriga todas as chaves em uso,
colis˜oes podem existir
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
Tabela de Hash
Colis˜oes
Uma vez que o tamanho m da tabela n˜ao
necessariamente abriga todas as chaves em uso,
colis˜oes podem existir
Duas ou mais chaves podem ser mapeadas `a mesma posi¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
Tabela de Hash
Colis˜oes
Uma vez que o tamanho m da tabela n˜ao
necessariamente abriga todas as chaves em uso,
colis˜oes podem existir
Duas ou mais chaves podem ser mapeadas `a mesma posi¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
Tabela de Hash
Colis˜oes
Uma vez que o tamanho m da tabela n˜ao
necessariamente abriga todas as chaves em uso,
colis˜oes podem existir
Duas ou mais chaves podem ser mapeadas `a mesma posi¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
Tabela de Hash
Colis˜oes
Uma vez que o tamanho m da tabela n˜ao
necessariamente abriga todas as chaves em uso,
colis˜oes podem existir
Duas ou mais chaves podem ser mapeadas `a mesma posi¸c˜ao
Que fazer nesses casos?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
Tabela de Hash
Colis˜oes – Encadeamento
Usamos encadeamento
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 17 / 32
Tabela de Hash
Colis˜oes – Encadeamento
Usamos encadeamento
Cada posi¸c˜ao j na tabela de hash cont´em uma lista ligada de
todas as chaves cujo valor de hash ´e h(k) = j
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 17 / 32
Tabela de Hash
Colis˜oes – Encadeamento
Usamos encadeamento
Cada posi¸c˜ao j na tabela de hash cont´em uma lista ligada de
todas as chaves cujo valor de hash ´e h(k) = j
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 17 / 32
Tabela de Hash
Colis˜oes – Encadeamento
Usamos encadeamento
Cada posi¸c˜ao j na tabela de hash cont´em uma lista ligada de
todas as chaves cujo valor de hash ´e h(k) = j
Ou seja, encadeamos todos os elementos que s˜ao mapeados
`a mesma posi¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 17 / 32
Tabela de Hash
Encadeamento: Complexidade
Quanto tempo levamos
para incluir um
elemento nessa
estrutura?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 18 / 32
Tabela de Hash
Encadeamento: Complexidade
Quanto tempo levamos
para incluir um
elemento nessa
estrutura?
Hash + acesso `a posi¸c˜ao:
Θ(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 18 / 32
Tabela de Hash
Encadeamento: Complexidade
Quanto tempo levamos
para incluir um
elemento nessa
estrutura?
Hash + acesso `a posi¸c˜ao:
Θ(1)
Inclus˜ao na lista: Θ(1) (para o hashing) +Θ(1) (para a
inclus˜ao), se incluirmos sempre no in´ıcio da lista em T[h(ki )]
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 18 / 32
Tabela de Hash
Encadeamento: Complexidade
Quanto tempo levamos
para incluir um
elemento nessa
estrutura?
Hash + acesso `a posi¸c˜ao:
Θ(1)
Inclus˜ao na lista: Θ(1) (para o hashing) +Θ(1) (para a
inclus˜ao), se incluirmos sempre no in´ıcio da lista em T[h(ki )]
Busca e exclus˜ao: Θ(1) (hashing) +Θ(c) (busca), onde c ´e
o n´umero de elementos na lista em T[h(ki )]
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 18 / 32
Tabela de Hash
Encadeamento: Complexidade
No pior caso, c = n
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
Tabela de Hash
Encadeamento: Complexidade
No pior caso, c = n
Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
Tabela de Hash
Encadeamento: Complexidade
No pior caso, c = n
Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela
E o custo total ser´a Θ(n)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
Tabela de Hash
Encadeamento: Complexidade
No pior caso, c = n
Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela
E o custo total ser´a Θ(n)
Nada diferente de uma lista ligada com todos os elementos
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
Tabela de Hash
Encadeamento: Complexidade
No pior caso, c = n
Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela
E o custo total ser´a Θ(n)
Nada diferente de uma lista ligada com todos os elementos
Mas e o caso m´edio?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
Tabela de Hash
Encadeamento: Complexidade
No pior caso, c = n
Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela
E o custo total ser´a Θ(n)
Nada diferente de uma lista ligada com todos os elementos
Mas e o caso m´edio?
Vai depender de qu˜ao boa ´e nossa fun¸c˜ao de hash
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
Tabela de Hash
Encadeamento: Complexidade
No pior caso, c = n
Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela
E o custo total ser´a Θ(n)
Nada diferente de uma lista ligada com todos os elementos
Mas e o caso m´edio?
Vai depender de qu˜ao boa ´e nossa fun¸c˜ao de hash
Se ela mapear todos a algumas poucas posi¸c˜oes,
terminaremos com o mesmo custo da lista ligada novamente
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que seria, nesse caso, uma boa fun¸c˜ao de hash?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que seria, nesse caso, uma boa fun¸c˜ao de hash?
Uma que fa¸ca com que cada um dos n elementos tenha a
mesma chance de ser mapeado a qualquer uma das m
posi¸c˜oes de T, independentemente dos demais elementos
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que seria, nesse caso, uma boa fun¸c˜ao de hash?
Uma que fa¸ca com que cada um dos n elementos tenha a
mesma chance de ser mapeado a qualquer uma das m
posi¸c˜oes de T, independentemente dos demais elementos
Essa suposi¸c˜ao ´e chamada hashing uniforme simples
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que seria, nesse caso, uma boa fun¸c˜ao de hash?
Uma que fa¸ca com que cada um dos n elementos tenha a
mesma chance de ser mapeado a qualquer uma das m
posi¸c˜oes de T, independentemente dos demais elementos
Essa suposi¸c˜ao ´e chamada hashing uniforme simples
Nesse caso, o comprimento esperado de cada lista ´e
de n/m
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que seria, nesse caso, uma boa fun¸c˜ao de hash?
Uma que fa¸ca com que cada um dos n elementos tenha a
mesma chance de ser mapeado a qualquer uma das m
posi¸c˜oes de T, independentemente dos demais elementos
Essa suposi¸c˜ao ´e chamada hashing uniforme simples
Nesse caso, o comprimento esperado de cada lista ´e
de n/m
Nos levando `a complexidade de Θ(n/m) para buscas e
exclus˜oes
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que seria, nesse caso, uma boa fun¸c˜ao de hash?
Uma que fa¸ca com que cada um dos n elementos tenha a
mesma chance de ser mapeado a qualquer uma das m
posi¸c˜oes de T, independentemente dos demais elementos
Essa suposi¸c˜ao ´e chamada hashing uniforme simples
Nesse caso, o comprimento esperado de cada lista ´e
de n/m
Nos levando `a complexidade de Θ(n/m) para buscas e
exclus˜oes
α = n/m ´e chamado de fator de carga do hash → o
n´umero m´edio de elementos armazenados nas listas
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que Θ(n/m) nos diz?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 21 / 32
Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que Θ(n/m) nos diz?
Que, se fizermos m = Θ(n), ent˜ao n = Θ(m), e
Θ(n/m) = Θ(Θ(m)/m) = Θ(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 21 / 32
Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que Θ(n/m) nos diz?
Que, se fizermos m = Θ(n), ent˜ao n = Θ(m), e
Θ(n/m) = Θ(Θ(m)/m) = Θ(1)
Ou seja, em m´edia, e sob a condi¸c˜ao de que
m = Θ(n), buscas e remo¸c˜oes levam Θ(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 21 / 32
Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E o que Θ(n/m) nos diz?
Que, se fizermos m = Θ(n), ent˜ao n = Θ(m), e
Θ(n/m) = Θ(Θ(m)/m) = Θ(1)
Ou seja, em m´edia, e sob a condi¸c˜ao de que
m = Θ(n), buscas e remo¸c˜oes levam Θ(1)
E todas as opera¸c˜oes (inser¸c˜ao, remo¸c˜ao e busca)
em uma tabela de hash podem ser feitas em um
tempo m´edio de Θ(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 21 / 32
Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E como podemos implementar a condi¸c˜ao do
hashing uniforme simples?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 22 / 32
Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E como podemos implementar a condi¸c˜ao do
hashing uniforme simples?
N˜ao podemos, pois raramente conhecemos a distribui¸c˜ao de
probabilidade dos dados a serem armazenados
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 22 / 32
Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E como podemos implementar a condi¸c˜ao do
hashing uniforme simples?
N˜ao podemos, pois raramente conhecemos a distribui¸c˜ao de
probabilidade dos dados a serem armazenados
E mesmo que tiv´essemos, pode ocorrer que elas n˜ao sejam
obtidas de forma independente
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 22 / 32
Tabela de Hash
Encadeamento: Fun¸c˜ao de Hash
E como podemos implementar a condi¸c˜ao do
hashing uniforme simples?
N˜ao podemos, pois raramente conhecemos a distribui¸c˜ao de
probabilidade dos dados a serem armazenados
E mesmo que tiv´essemos, pode ocorrer que elas n˜ao sejam
obtidas de forma independente
Se soub´essemos, por exemplo, que as chaves est˜ao
uniformemente distribu´ıdas entre 0 e 1, ent˜ao a
fun¸c˜ao h(k) = km satisfaz essa condi¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 22 / 32
Tabela de Hash
Fun¸c˜ao de Hash: M´etodo da Divis˜ao
Que fazer ent˜ao?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
Tabela de Hash
Fun¸c˜ao de Hash: M´etodo da Divis˜ao
Que fazer ent˜ao?
Usar alguma heur´ıstica que funcione em geral bem
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
Tabela de Hash
Fun¸c˜ao de Hash: M´etodo da Divis˜ao
Que fazer ent˜ao?
Usar alguma heur´ıstica que funcione em geral bem
Uma possibilidade ´e o m´etodo da divis˜ao:
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
Tabela de Hash
Fun¸c˜ao de Hash: M´etodo da Divis˜ao
Que fazer ent˜ao?
Usar alguma heur´ıstica que funcione em geral bem
Uma possibilidade ´e o m´etodo da divis˜ao:
Mapeamos uma chave k a uma das m posi¸c˜oes fazendo
h(k) = k mod m
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
Tabela de Hash
Fun¸c˜ao de Hash: M´etodo da Divis˜ao
Que fazer ent˜ao?
Usar alguma heur´ıstica que funcione em geral bem
Uma possibilidade ´e o m´etodo da divis˜ao:
Mapeamos uma chave k a uma das m posi¸c˜oes fazendo
h(k) = k mod m
Onde mod ´e o resto da divis˜ao → equivalente ao operador %
em java
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
Tabela de Hash
Fun¸c˜ao de Hash: M´etodo da Divis˜ao
Que fazer ent˜ao?
Usar alguma heur´ıstica que funcione em geral bem
Uma possibilidade ´e o m´etodo da divis˜ao:
Mapeamos uma chave k a uma das m posi¸c˜oes fazendo
h(k) = k mod m
Onde mod ´e o resto da divis˜ao → equivalente ao operador %
em java
Computar h(k) torna-se O(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
Tabela de Hash
Fun¸c˜ao de Hash: M´etodo da Divis˜ao
Que fazer ent˜ao?
Usar alguma heur´ıstica que funcione em geral bem
Uma possibilidade ´e o m´etodo da divis˜ao:
Mapeamos uma chave k a uma das m posi¸c˜oes fazendo
h(k) = k mod m
Onde mod ´e o resto da divis˜ao → equivalente ao operador %
em java
Computar h(k) torna-se O(1)
Escolher, para m, um n´umero primo n˜ao muito perto de uma
potˆencia de 2 ´e frequentemente uma boa escolha
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
Tabela de Hash
Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas
At´e agora, assumimos que a chave ´e um inteiro
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
Tabela de Hash
Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas
At´e agora, assumimos que a chave ´e um inteiro
E se for o caso de ser um caractere?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
Tabela de Hash
Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas
At´e agora, assumimos que a chave ´e um inteiro
E se for o caso de ser um caractere?
Basta mape´a-lo a um inteiro (seu ASCII, por exemplo)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
Tabela de Hash
Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas
At´e agora, assumimos que a chave ´e um inteiro
E se for o caso de ser um caractere?
Basta mape´a-lo a um inteiro (seu ASCII, por exemplo)
E se for um String?
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
Tabela de Hash
Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas
At´e agora, assumimos que a chave ´e um inteiro
E se for o caso de ser um caractere?
Basta mape´a-lo a um inteiro (seu ASCII, por exemplo)
E se for um String?
Podemos gerar uma chave inteira k fazendo k =
n−1
i=0
ci × pi
onde n ´e o n´umero de caracteres da chave, ci ´e o ASCII (ou
Unicode) do i-´esimo caractere da chave, e pi um peso de um
conjunto gerado previamente, de forma aleat´oria
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
Tabela de Hash
Exemplo
Voltemos agora ao
nosso exemplo
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 25 / 32
Tabela de Hash
Exemplo
Voltemos agora ao
nosso exemplo
Quantas pessoas
teremos, em m´edia?
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 25 / 32
Tabela de Hash
Exemplo
Voltemos agora ao
nosso exemplo
Quantas pessoas
teremos, em m´edia?
N˜ao sabemos, vamos
estimar em 100
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 25 / 32
Tabela de Hash
Exemplo
Voltemos agora ao
nosso exemplo
Quantas pessoas
teremos, em m´edia?
N˜ao sabemos, vamos
estimar em 100
Ent˜ao |T| = m = 101 →
um primo n˜ao muito perto
de potˆencias de 2
(26
= 64 e 27
= 128)
class Pessoa {
String nome;
int cpf;
Pessoa(String nome,
int cpf) {
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 25 / 32
Tabela de Hash
Exemplo – Passos:
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
Tabela de Hash
Exemplo – Passos:
1 Criar uma tabela de hash com m = 101 posi¸c˜oes
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
Tabela de Hash
Exemplo – Passos:
1 Criar uma tabela de hash com m = 101 posi¸c˜oes
2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o
cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
Tabela de Hash
Exemplo – Passos:
1 Criar uma tabela de hash com m = 101 posi¸c˜oes
2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o
cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101)
Esta fun¸c˜ao deve ter complexidade assint´otica Θ(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
Tabela de Hash
Exemplo – Passos:
1 Criar uma tabela de hash com m = 101 posi¸c˜oes
2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o
cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101)
Esta fun¸c˜ao deve ter complexidade assint´otica Θ(1)
h(k) = k mod m
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
Tabela de Hash
Exemplo – Passos:
1 Criar uma tabela de hash com m = 101 posi¸c˜oes
2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o
cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101)
Esta fun¸c˜ao deve ter complexidade assint´otica Θ(1)
h(k) = k mod m
3 Tratar as poss´ıveis colis˜oes
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
Tabela de Hash
Exemplo – Passos:
1 Criar uma tabela de hash com m = 101 posi¸c˜oes
2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o
cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101)
Esta fun¸c˜ao deve ter complexidade assint´otica Θ(1)
h(k) = k mod m
3 Tratar as poss´ıveis colis˜oes
Uma vez que 101 ´e uma m´edia, pode haver mais pessoas
que isso, gerando colis˜oes
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
Tabela de Hash
Exemplo
Mas antes, vamos
incluir um m´etodo em
Pessoa
class Pessoa {
String nome;
int cpf;
Pessoa(String nome, int cpf){
this.nome = nome;
this.cpf = cpf;
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 27 / 32
Tabela de Hash
Exemplo
Mas antes, vamos
incluir um m´etodo em
Pessoa
class Pessoa {
String nome;
int cpf;
Pessoa(String nome, int cpf){
this.nome = nome;
this.cpf = cpf;
}
boolean equals(Pessoa p) {
if (p==null) return(false);
return(this.cpf == p.cpf);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 27 / 32
Tabela de Hash
Exemplo
Mas antes, vamos
incluir um m´etodo em
Pessoa
Ser´a ´util para
compara¸c˜oes em
LinkedList mais
adiante
class Pessoa {
String nome;
int cpf;
Pessoa(String nome, int cpf){
this.nome = nome;
this.cpf = cpf;
}
boolean equals(Pessoa p) {
if (p==null) return(false);
return(this.cpf == p.cpf);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 27 / 32
Tabela de Hash
Exemplo
import java.util.ListIterator;
import java.util.LinkedList;
class TabelaHash {
LinkedList<Pessoa>[] tabela;
TabelaHash(int max) {
tabela = new LinkedList[max];
for (int i=0; i<tabela.length; i++)
tabela[i] = new LinkedList<Pessoa>();
}
int hash(int cpf) {
return(cpf % tabela.length);
}
...
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 28 / 32
Tabela de Hash
Exemplo
A tabela ser´a um arranjo
de listas duplamente
ligadas (LinkedList)
import java.util.ListIterator;
import java.util.LinkedList;
class TabelaHash {
LinkedList<Pessoa>[] tabela;
TabelaHash(int max) {
tabela = new LinkedList[max];
for (int i=0; i<tabela.length; i++)
tabela[i] = new LinkedList<Pessoa>();
}
int hash(int cpf) {
return(cpf % tabela.length);
}
...
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 28 / 32
Tabela de Hash
Exemplo
Inicializado preferencialmente
com um primo n˜ao pr´oximo
de uma potˆencia de 2
import java.util.ListIterator;
import java.util.LinkedList;
class TabelaHash {
LinkedList<Pessoa>[] tabela;
TabelaHash(int max) {
tabela = new LinkedList[max];
for (int i=0; i<tabela.length; i++)
tabela[i] = new LinkedList<Pessoa>();
}
int hash(int cpf) {
return(cpf % tabela.length);
}
...
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 28 / 32
Tabela de Hash
Exemplo
Mapeamos cada chave (cpf)
a uma posi¸c˜ao na tabela
import java.util.ListIterator;
import java.util.LinkedList;
class TabelaHash {
LinkedList<Pessoa>[] tabela;
TabelaHash(int max) {
tabela = new LinkedList[max];
for (int i=0; i<tabela.length; i++)
tabela[i] = new LinkedList<Pessoa>();
}
int hash(int cpf) {
return(cpf % tabela.length);
}
...
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 28 / 32
Tabela de Hash
Exemplo
...
Pessoa busca(int cpf) {
int pos = hash(cpf);
ListIterator<Pessoa> it = tabela[pos].listIterator(0);
while (it.hasNext()) {
Pessoa p = it.next();
if (p.cpf == cpf)
return(p);
}
return(null);
}
...
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 29 / 32
Tabela de Hash
Exemplo
Na ausˆencia de um m´etodo
em LinkedList que fa¸ca
exatamente o que quere-
mos, implementamos um
...
Pessoa busca(int cpf) {
int pos = hash(cpf);
ListIterator<Pessoa> it = tabela[pos].listIterator(0);
while (it.hasNext()) {
Pessoa p = it.next();
if (p.cpf == cpf)
return(p);
}
return(null);
}
...
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 29 / 32
Tabela de Hash
Exemplo
...
void insere(Pessoa p) {
int pos = hash(p.cpf);
if (busca(p.cpf) == null)
tabela[pos].add(p);
}
boolean remove(int cpf) {
int pos = hash(cpf);
Pessoa p = busca(cpf);
if (p != null)
return(tabela[pos].remove(p));
return(false);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 30 / 32
Tabela de Hash
Exemplo
Adiciona um elemento
ao final da lista em
tabela[pos] (m´etodo
definido em LinkedList),
se ele j´a n˜ao estiver l´a
...
void insere(Pessoa p) {
int pos = hash(p.cpf);
if (busca(p.cpf) == null)
tabela[pos].add(p);
}
boolean remove(int cpf) {
int pos = hash(cpf);
Pessoa p = busca(cpf);
if (p != null)
return(tabela[pos].remove(p));
return(false);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 30 / 32
Tabela de Hash
Exemplo
Usa o m´etodo equals de
Pessoa para comparar os
objetos na LinkedList
...
void insere(Pessoa p) {
int pos = hash(p.cpf);
if (busca(p.cpf) == null)
tabela[pos].add(p);
}
boolean remove(int cpf) {
int pos = hash(cpf);
Pessoa p = busca(cpf);
if (p != null)
return(tabela[pos].remove(p));
return(false);
}
}
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 30 / 32
Tabela de Hash
Observa¸c˜oes
Hashing ´e um modo eficiente de se implementar
uma estrutura em que inclus˜oes, buscas e exclus˜oes
s˜ao feitas, em m´edia, em O(1)
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 31 / 32
Tabela de Hash
Observa¸c˜oes
Hashing ´e um modo eficiente de se implementar
uma estrutura em que inclus˜oes, buscas e exclus˜oes
s˜ao feitas, em m´edia, em O(1)
Desde que tomados certos cuidados...
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 31 / 32
Tabela de Hash
Observa¸c˜oes
Hashing ´e um modo eficiente de se implementar
uma estrutura em que inclus˜oes, buscas e exclus˜oes
s˜ao feitas, em m´edia, em O(1)
Desde que tomados certos cuidados...
Constru¸c˜ao da fun¸c˜ao de Hash:
Outros m´etodos existem, como o da multiplica¸c˜ao e hashing
universal
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 31 / 32
Tabela de Hash
Observa¸c˜oes
Hashing ´e um modo eficiente de se implementar
uma estrutura em que inclus˜oes, buscas e exclus˜oes
s˜ao feitas, em m´edia, em O(1)
Desde que tomados certos cuidados...
Constru¸c˜ao da fun¸c˜ao de Hash:
Outros m´etodos existem, como o da multiplica¸c˜ao e hashing
universal
Consulte Cormen et al. (2001) para mais detalhes
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 31 / 32
Referˆencias
Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L.,
Stein, Clifford. Introduction to Algorithms. 2a ed. MIT Press,
2001.
Ziviani, Nivio. Projeto de Algoritmos: com implementa¸c˜oes
em Java e C++. Cengage. 2007.
Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 32 / 32

Mais conteúdo relacionado

Mais de Norton Trevisan Roman

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
Norton Trevisan Roman
 

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 

Último

GÊNERO TEXTUAL - POEMA.pptx
GÊNERO      TEXTUAL     -     POEMA.pptxGÊNERO      TEXTUAL     -     POEMA.pptx
GÊNERO TEXTUAL - POEMA.pptx
Marlene Cunhada
 
O que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdfO que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdf
Pastor Robson Colaço
 
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.pptEstrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
livrosjovert
 
Atividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º anoAtividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º ano
fernandacosta37763
 
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoAtividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
MateusTavares54
 
Pintura Romana .pptx
Pintura Romana                     .pptxPintura Romana                     .pptx
Pintura Romana .pptx
TomasSousa7
 
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
MessiasMarianoG
 
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdfA QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
AurelianoFerreirades2
 
Rimas, Luís Vaz de Camões. pptx
Rimas, Luís Vaz de Camões.          pptxRimas, Luís Vaz de Camões.          pptx
Rimas, Luís Vaz de Camões. pptx
TomasSousa7
 
UFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdfUFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdf
Manuais Formação
 
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
edivirgesribeiro1
 
Leonardo da Vinci .pptx
Leonardo da Vinci                  .pptxLeonardo da Vinci                  .pptx
Leonardo da Vinci .pptx
TomasSousa7
 
Educação trabalho HQ em sala de aula uma excelente ideia
Educação  trabalho HQ em sala de aula uma excelente  ideiaEducação  trabalho HQ em sala de aula uma excelente  ideia
Educação trabalho HQ em sala de aula uma excelente ideia
joseanesouza36
 
Aula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptxAula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptx
LILIANPRESTESSCUDELE
 
Atividade letra da música - Espalhe Amor, Anavitória.
Atividade letra da música - Espalhe  Amor, Anavitória.Atividade letra da música - Espalhe  Amor, Anavitória.
Atividade letra da música - Espalhe Amor, Anavitória.
Mary Alvarenga
 
Testes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdfTestes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdf
lveiga112
 
05-os-pre-socraticos sociologia-28-slides.pptx
05-os-pre-socraticos sociologia-28-slides.pptx05-os-pre-socraticos sociologia-28-slides.pptx
05-os-pre-socraticos sociologia-28-slides.pptx
ValdineyRodriguesBez1
 
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxSlides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
LuizHenriquedeAlmeid6
 
A SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIAS
A SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIASA SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIAS
A SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIAS
HisrelBlog
 
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdfUFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
Manuais Formação
 

Último (20)

GÊNERO TEXTUAL - POEMA.pptx
GÊNERO      TEXTUAL     -     POEMA.pptxGÊNERO      TEXTUAL     -     POEMA.pptx
GÊNERO TEXTUAL - POEMA.pptx
 
O que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdfO que é um Ménage a Trois Contemporâneo .pdf
O que é um Ménage a Trois Contemporâneo .pdf
 
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.pptEstrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
 
Atividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º anoAtividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º ano
 
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - AlfabetinhoAtividades de Inglês e Espanhol para Imprimir - Alfabetinho
Atividades de Inglês e Espanhol para Imprimir - Alfabetinho
 
Pintura Romana .pptx
Pintura Romana                     .pptxPintura Romana                     .pptx
Pintura Romana .pptx
 
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
759-fortaleza-resultado-definitivo-prova-objetiva-2024-05-28.pdf
 
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdfA QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
 
Rimas, Luís Vaz de Camões. pptx
Rimas, Luís Vaz de Camões.          pptxRimas, Luís Vaz de Camões.          pptx
Rimas, Luís Vaz de Camões. pptx
 
UFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdfUFCD_10949_Lojas e-commerce no-code_índice.pdf
UFCD_10949_Lojas e-commerce no-code_índice.pdf
 
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
 
Leonardo da Vinci .pptx
Leonardo da Vinci                  .pptxLeonardo da Vinci                  .pptx
Leonardo da Vinci .pptx
 
Educação trabalho HQ em sala de aula uma excelente ideia
Educação  trabalho HQ em sala de aula uma excelente  ideiaEducação  trabalho HQ em sala de aula uma excelente  ideia
Educação trabalho HQ em sala de aula uma excelente ideia
 
Aula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptxAula 2 - Revisando o significado de fração - Parte 2.pptx
Aula 2 - Revisando o significado de fração - Parte 2.pptx
 
Atividade letra da música - Espalhe Amor, Anavitória.
Atividade letra da música - Espalhe  Amor, Anavitória.Atividade letra da música - Espalhe  Amor, Anavitória.
Atividade letra da música - Espalhe Amor, Anavitória.
 
Testes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdfTestes + soluções_Mensagens12 )11111.pdf
Testes + soluções_Mensagens12 )11111.pdf
 
05-os-pre-socraticos sociologia-28-slides.pptx
05-os-pre-socraticos sociologia-28-slides.pptx05-os-pre-socraticos sociologia-28-slides.pptx
05-os-pre-socraticos sociologia-28-slides.pptx
 
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptxSlides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
Slides Lição 11, CPAD, A Realidade Bíblica do Inferno, 2Tr24.pptx
 
A SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIAS
A SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIASA SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIAS
A SOCIOLOGIA E O TRABALHO: ANÁLISES E VIVÊNCIAS
 
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdfUFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
 

(ACH2002) Introdução à Análise de Algoritmos - Aula 19

  • 1. Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes Norton Trevisan Roman norton@usp.br 8 de novembro de 2018 Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 1 / 32
  • 2. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Imagine que queremos construir um m´etodo que retorne a vers˜ao por extenso de um numeral de um ´unico d´ıgito Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 2 / 32
  • 3. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Imagine que queremos construir um m´etodo que retorne a vers˜ao por extenso de um numeral de um ´unico d´ıgito Onde a chave de busca ´e o d´ıgito, e o valor resultante ´e sua vers˜ao por extenso Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 2 / 32
  • 4. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Imagine que queremos construir um m´etodo que retorne a vers˜ao por extenso de um numeral de um ´unico d´ıgito Onde a chave de busca ´e o d´ıgito, e o valor resultante ´e sua vers˜ao por extenso Queremos ent˜ao um m´etodo que implemente a seguinte tabela: Chave Valor 0 “zero” 1 “um” . . . . . . 9 “nove” Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 2 / 32
  • 5. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Mais do que isso, imagine que essa tabela n˜ao precisa conter todas as entradas pr´e-definidas Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
  • 6. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Mais do que isso, imagine que essa tabela n˜ao precisa conter todas as entradas pr´e-definidas Ela ser´a atualizada dinamicamente Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
  • 7. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Mais do que isso, imagine que essa tabela n˜ao precisa conter todas as entradas pr´e-definidas Ela ser´a atualizada dinamicamente Ent˜ao, no in´ıcio, n˜ao h´a elemento algum, sendo eles inseridos com o tempo Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
  • 8. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Mais do que isso, imagine que essa tabela n˜ao precisa conter todas as entradas pr´e-definidas Ela ser´a atualizada dinamicamente Ent˜ao, no in´ıcio, n˜ao h´a elemento algum, sendo eles inseridos com o tempo Mas sempre no intervalo entre 0 e 9 Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
  • 9. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Mais do que isso, imagine que essa tabela n˜ao precisa conter todas as entradas pr´e-definidas Ela ser´a atualizada dinamicamente Ent˜ao, no in´ıcio, n˜ao h´a elemento algum, sendo eles inseridos com o tempo Mas sempre no intervalo entre 0 e 9 Como podemos fazer? Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
  • 10. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Mais do que isso, imagine que essa tabela n˜ao precisa conter todas as entradas pr´e-definidas Ela ser´a atualizada dinamicamente Ent˜ao, no in´ıcio, n˜ao h´a elemento algum, sendo eles inseridos com o tempo Mas sempre no intervalo entre 0 e 9 Como podemos fazer? Criando um Dicion´ario Dinˆamico Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 3 / 32
  • 11. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Para isso, definimos o elemento a ser armazenado: class Elemento { int valor; String extenso; Elemento(int valor, String extenso) { this.valor = valor; this.extenso = extenso; } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 4 / 32
  • 12. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Precisamos ent˜ao criar os m´etodos para manipula¸c˜ao do dicion´ario: Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
  • 13. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Precisamos ent˜ao criar os m´etodos para manipula¸c˜ao do dicion´ario: class Dicionario { Elemento[] elementos = new Elemento[10]; } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
  • 14. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Precisamos ent˜ao criar os m´etodos para manipula¸c˜ao do dicion´ario: Inserir um elemento class Dicionario { Elemento[] elementos = new Elemento[10]; void insere(int chave, String ext) { Elemento el = new Elemento(chave, ext); elementos[chave] = el; } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
  • 15. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Precisamos ent˜ao criar os m´etodos para manipula¸c˜ao do dicion´ario: Inserir um elemento Remover um elemento class Dicionario { Elemento[] elementos = new Elemento[10]; void insere(int chave, String ext) { Elemento el = new Elemento(chave, ext); elementos[chave] = el; } void remove(int chave) { elementos[chave] = null; } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
  • 16. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Precisamos ent˜ao criar os m´etodos para manipula¸c˜ao do dicion´ario: Inserir um elemento Remover um elemento Buscar um elemento class Dicionario { Elemento[] elementos = new Elemento[10]; void insere(int chave, String ext) { Elemento el = new Elemento(chave, ext); elementos[chave] = el; } void remove(int chave) { elementos[chave] = null; } Elemento busca(int chave) { return(elementos[chave]); } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 5 / 32
  • 17. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto class Dicionario { Elemento[] elementos = new Elemento[10]; void insere(int chave, String ext) { Elemento el = new Elemento(chave, ext); elementos[chave] = el; } void remove(int chave) { elementos[chave] = null; } Elemento busca(int chave) { return(elementos[chave]); } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 6 / 32
  • 18. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Note que fizemos um mapeamento direto da chave `a posi¸c˜ao do elemento no arranjo class Dicionario { Elemento[] elementos = new Elemento[10]; void insere(int chave, String ext) { Elemento el = new Elemento(chave, ext); elementos[chave] = el; } void remove(int chave) { elementos[chave] = null; } Elemento busca(int chave) { return(elementos[chave]); } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 6 / 32
  • 19. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto E isso faz com que inser¸c˜oes, buscas e remo¸c˜oes, usando a chave, rodem em Θ(1) class Dicionario { Elemento[] elementos = new Elemento[10]; void insere(int chave, String ext) { Elemento el = new Elemento(chave, ext); elementos[chave] = el; } void remove(int chave) { elementos[chave] = null; } Elemento busca(int chave) { return(elementos[chave]); } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 6 / 32
  • 20. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto O endere¸camento direto ´e uma t´ecnica simples que funciona bem quando o universo U de chaves ´e razoavelmente pequeno Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
  • 21. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto O endere¸camento direto ´e uma t´ecnica simples que funciona bem quando o universo U de chaves ´e razoavelmente pequeno O conjunto dinˆamico possui m chaves, obtidas do universo U = {0, 1, . . . , m − 1}, onde m n˜ao ´e muito grande, e n˜ao h´a dois elementos com a mesma chave Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
  • 22. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto O endere¸camento direto ´e uma t´ecnica simples que funciona bem quando o universo U de chaves ´e razoavelmente pequeno O conjunto dinˆamico possui m chaves, obtidas do universo U = {0, 1, . . . , m − 1}, onde m n˜ao ´e muito grande, e n˜ao h´a dois elementos com a mesma chave Sob essas condi¸c˜oes, podemos representar o conjunto com uma Tabela de Endere¸camento Direto Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
  • 23. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto O endere¸camento direto ´e uma t´ecnica simples que funciona bem quando o universo U de chaves ´e razoavelmente pequeno O conjunto dinˆamico possui m chaves, obtidas do universo U = {0, 1, . . . , m − 1}, onde m n˜ao ´e muito grande, e n˜ao h´a dois elementos com a mesma chave Sob essas condi¸c˜oes, podemos representar o conjunto com uma Tabela de Endere¸camento Direto Onde cada posi¸c˜ao corresponde a uma chave no universo U Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
  • 24. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto O endere¸camento direto ´e uma t´ecnica simples que funciona bem quando o universo U de chaves ´e razoavelmente pequeno O conjunto dinˆamico possui m chaves, obtidas do universo U = {0, 1, . . . , m − 1}, onde m n˜ao ´e muito grande, e n˜ao h´a dois elementos com a mesma chave Sob essas condi¸c˜oes, podemos representar o conjunto com uma Tabela de Endere¸camento Direto Onde cada posi¸c˜ao corresponde a uma chave no universo U A tabela ser´a ent˜ao do tamanho do universo Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 7 / 32
  • 25. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto O endere¸camento direto ´e aplic´avel quando podemos nos dar ao luxo de alocar um arranjo que tem uma posi¸c˜ao para cada poss´ıvel chave Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 8 / 32
  • 26. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Suponha agora que queremos uma estrutura semelhante, mas para guardar nomes de pessoas Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
  • 27. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Suponha agora que queremos uma estrutura semelhante, mas para guardar nomes de pessoas Como indexar? Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
  • 28. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Suponha agora que queremos uma estrutura semelhante, mas para guardar nomes de pessoas Como indexar? Uma alternativa ´e fornecer um identificador a cada pessoa Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
  • 29. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Suponha agora que queremos uma estrutura semelhante, mas para guardar nomes de pessoas Como indexar? Uma alternativa ´e fornecer um identificador a cada pessoa Uma chave, que comece do 0 e v´a at´e n, o n´umero de pessoas cadastradas Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
  • 30. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Suponha agora que queremos uma estrutura semelhante, mas para guardar nomes de pessoas Como indexar? Uma alternativa ´e fornecer um identificador a cada pessoa Uma chave, que comece do 0 e v´a at´e n, o n´umero de pessoas cadastradas E se precisarmos remover algu´em? Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
  • 31. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Suponha agora que queremos uma estrutura semelhante, mas para guardar nomes de pessoas Como indexar? Uma alternativa ´e fornecer um identificador a cada pessoa Uma chave, que comece do 0 e v´a at´e n, o n´umero de pessoas cadastradas E se precisarmos remover algu´em? Basta removermos o registro, como fizemos antes Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 9 / 32
  • 32. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto O problema ´e que isso gera uma lacuna Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
  • 33. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto O problema ´e que isso gera uma lacuna Que podemos preencher com a pr´oxima pessoa a ser registrada Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
  • 34. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto O problema ´e que isso gera uma lacuna Que podemos preencher com a pr´oxima pessoa a ser registrada Mas ent˜ao, a cada novo registro, precisamos: Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
  • 35. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto O problema ´e que isso gera uma lacuna Que podemos preencher com a pr´oxima pessoa a ser registrada Mas ent˜ao, a cada novo registro, precisamos: Correr a tabela buscando a primeira posi¸c˜ao vazia Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
  • 36. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto O problema ´e que isso gera uma lacuna Que podemos preencher com a pr´oxima pessoa a ser registrada Mas ent˜ao, a cada novo registro, precisamos: Correr a tabela buscando a primeira posi¸c˜ao vazia Atualizar o identificador no registro, dando a ele o valor dessa posi¸c˜ao Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
  • 37. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto O problema ´e que isso gera uma lacuna Que podemos preencher com a pr´oxima pessoa a ser registrada Mas ent˜ao, a cada novo registro, precisamos: Correr a tabela buscando a primeira posi¸c˜ao vazia Atualizar o identificador no registro, dando a ele o valor dessa posi¸c˜ao Armazenar o registro l´a Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
  • 38. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto O problema ´e que isso gera uma lacuna Que podemos preencher com a pr´oxima pessoa a ser registrada Mas ent˜ao, a cada novo registro, precisamos: Correr a tabela buscando a primeira posi¸c˜ao vazia Atualizar o identificador no registro, dando a ele o valor dessa posi¸c˜ao Armazenar o registro l´a Θ(n) Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 10 / 32
  • 39. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Podemos ent˜ao usar o CPF da pessoa como identificador Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
  • 40. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Podemos ent˜ao usar o CPF da pessoa como identificador class Pessoa { String nome; int cpf; Pessoa(String nome, int cpf) { this.nome = nome; this.cpf = cpf; } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
  • 41. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Podemos ent˜ao usar o CPF da pessoa como identificador Fazendo o mapeamento direto `a tabela class Pessoa { String nome; int cpf; Pessoa(String nome, int cpf) { this.nome = nome; this.cpf = cpf; } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
  • 42. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Podemos ent˜ao usar o CPF da pessoa como identificador Fazendo o mapeamento direto `a tabela Volta a ser Θ(1) no tempo class Pessoa { String nome; int cpf; Pessoa(String nome, int cpf) { this.nome = nome; this.cpf = cpf; } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
  • 43. Dicion´arios Dinˆamicos Tabela de Endere¸camento Direto Podemos ent˜ao usar o CPF da pessoa como identificador Fazendo o mapeamento direto `a tabela Volta a ser Θ(1) no tempo Mas a tabela ficar´a gigantesca! class Pessoa { String nome; int cpf; Pessoa(String nome, int cpf) { this.nome = nome; this.cpf = cpf; } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 11 / 32
  • 44. Dicion´arios Dinˆamicos Tabela de Hash O problema, nesse caso, ´e que o universo U de chaves ´e muito grande Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
  • 45. Dicion´arios Dinˆamicos Tabela de Hash O problema, nesse caso, ´e que o universo U de chaves ´e muito grande Armazenar a tabela T pode ser por vezes at´e imposs´ıvel Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
  • 46. Dicion´arios Dinˆamicos Tabela de Hash O problema, nesse caso, ´e que o universo U de chaves ´e muito grande Armazenar a tabela T pode ser por vezes at´e imposs´ıvel Al´em disso, o conjunto de chaves K realmente armazenadas pode ser pequeno, desperdi¸cando muito espa¸co na tabela Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
  • 47. Dicion´arios Dinˆamicos Tabela de Hash O problema, nesse caso, ´e que o universo U de chaves ´e muito grande Armazenar a tabela T pode ser por vezes at´e imposs´ıvel Al´em disso, o conjunto de chaves K realmente armazenadas pode ser pequeno, desperdi¸cando muito espa¸co na tabela Que fazer ent˜ao? Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
  • 48. Dicion´arios Dinˆamicos Tabela de Hash O problema, nesse caso, ´e que o universo U de chaves ´e muito grande Armazenar a tabela T pode ser por vezes at´e imposs´ıvel Al´em disso, o conjunto de chaves K realmente armazenadas pode ser pequeno, desperdi¸cando muito espa¸co na tabela Que fazer ent˜ao? Fixar o tamanho da tabela, e mapear a chave de cada registro a uma de suas posi¸c˜oes Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
  • 49. Dicion´arios Dinˆamicos Tabela de Hash O problema, nesse caso, ´e que o universo U de chaves ´e muito grande Armazenar a tabela T pode ser por vezes at´e imposs´ıvel Al´em disso, o conjunto de chaves K realmente armazenadas pode ser pequeno, desperdi¸cando muito espa¸co na tabela Que fazer ent˜ao? Fixar o tamanho da tabela, e mapear a chave de cada registro a uma de suas posi¸c˜oes Criamos assim uma Tabela de Espalhamento, ou Tabela de Hash Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 12 / 32
  • 50. Tabela de Hash Estrutura de dados eficiente para implementar dicion´arios Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
  • 51. Tabela de Hash Estrutura de dados eficiente para implementar dicion´arios Embora a busca por um elemento possa, no pior caso, ser Θ(n), na pr´atica, o tempo m´edio ´e Θ(1) Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
  • 52. Tabela de Hash Estrutura de dados eficiente para implementar dicion´arios Embora a busca por um elemento possa, no pior caso, ser Θ(n), na pr´atica, o tempo m´edio ´e Θ(1) Trata-se de um mapeamento da chave a uma posi¸c˜ao na tabela Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
  • 53. Tabela de Hash Estrutura de dados eficiente para implementar dicion´arios Embora a busca por um elemento possa, no pior caso, ser Θ(n), na pr´atica, o tempo m´edio ´e Θ(1) Trata-se de um mapeamento da chave a uma posi¸c˜ao na tabela Ent˜ao, em vez de usarmos a chave como ´ındice, calculamos o ´ındice a partir da chave Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
  • 54. Tabela de Hash Estrutura de dados eficiente para implementar dicion´arios Embora a busca por um elemento possa, no pior caso, ser Θ(n), na pr´atica, o tempo m´edio ´e Θ(1) Trata-se de um mapeamento da chave a uma posi¸c˜ao na tabela Ent˜ao, em vez de usarmos a chave como ´ındice, calculamos o ´ındice a partir da chave Tipicamente, a tabela tem tamanho proporcional ao n´umero de chaves realmente armazenadas Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
  • 55. Tabela de Hash Estrutura de dados eficiente para implementar dicion´arios Embora a busca por um elemento possa, no pior caso, ser Θ(n), na pr´atica, o tempo m´edio ´e Θ(1) Trata-se de um mapeamento da chave a uma posi¸c˜ao na tabela Ent˜ao, em vez de usarmos a chave como ´ındice, calculamos o ´ındice a partir da chave Tipicamente, a tabela tem tamanho proporcional ao n´umero de chaves realmente armazenadas Pouco desperd´ıcio de mem´oria Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 13 / 32
  • 56. Tabela de Hash Fun¸c˜ao de Hash O mapeamento entre a chave e sua posi¸c˜ao na tabela se d´a via uma fun¸c˜ao de hash Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
  • 57. Tabela de Hash Fun¸c˜ao de Hash O mapeamento entre a chave e sua posi¸c˜ao na tabela se d´a via uma fun¸c˜ao de hash A fun¸c˜ao de hash mapeia ent˜ao o universo de todas as poss´ıveis chaves U `as posi¸c˜oes da tabela T Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
  • 58. Tabela de Hash Fun¸c˜ao de Hash O mapeamento entre a chave e sua posi¸c˜ao na tabela se d´a via uma fun¸c˜ao de hash A fun¸c˜ao de hash mapeia ent˜ao o universo de todas as poss´ıveis chaves U `as posi¸c˜oes da tabela T h : U → {0, 1, . . . , m − 1}, para T[0..m − 1] Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
  • 59. Tabela de Hash Fun¸c˜ao de Hash O mapeamento entre a chave e sua posi¸c˜ao na tabela se d´a via uma fun¸c˜ao de hash A fun¸c˜ao de hash mapeia ent˜ao o universo de todas as poss´ıveis chaves U `as posi¸c˜oes da tabela T h : U → {0, 1, . . . , m − 1}, para T[0..m − 1] Tipicamente m |U| Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
  • 60. Tabela de Hash Fun¸c˜ao de Hash O mapeamento entre a chave e sua posi¸c˜ao na tabela se d´a via uma fun¸c˜ao de hash A fun¸c˜ao de hash mapeia ent˜ao o universo de todas as poss´ıveis chaves U `as posi¸c˜oes da tabela T h : U → {0, 1, . . . , m − 1}, para T[0..m − 1] Tipicamente m |U| Dizemos que h(k) ´e o valor de hash da chave k Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 14 / 32
  • 61. Tabela de Hash Endere¸camento Direto × Hash Direto Hash Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
  • 62. Tabela de Hash Endere¸camento Direto × Hash Direto O elemento com chave k ´e armazenado na posi¸c˜ao k Hash Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
  • 63. Tabela de Hash Endere¸camento Direto × Hash Direto O elemento com chave k ´e armazenado na posi¸c˜ao k |T| = |U| Hash Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
  • 64. Tabela de Hash Endere¸camento Direto × Hash Direto O elemento com chave k ´e armazenado na posi¸c˜ao k |T| = |U| Hash Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
  • 65. Tabela de Hash Endere¸camento Direto × Hash Direto O elemento com chave k ´e armazenado na posi¸c˜ao k |T| = |U| Hash O elemento com chave k ´e armazenado em h(k) Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
  • 66. Tabela de Hash Endere¸camento Direto × Hash Direto O elemento com chave k ´e armazenado na posi¸c˜ao k |T| = |U| Hash O elemento com chave k ´e armazenado em h(k) |T| = m |U| Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
  • 67. Tabela de Hash Endere¸camento Direto × Hash Direto O elemento com chave k ´e armazenado na posi¸c˜ao k |T| = |U| Hash O elemento com chave k ´e armazenado em h(k) |T| = m |U| Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 15 / 32
  • 68. Tabela de Hash Colis˜oes Uma vez que o tamanho m da tabela n˜ao necessariamente abriga todas as chaves em uso, colis˜oes podem existir Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
  • 69. Tabela de Hash Colis˜oes Uma vez que o tamanho m da tabela n˜ao necessariamente abriga todas as chaves em uso, colis˜oes podem existir Duas ou mais chaves podem ser mapeadas `a mesma posi¸c˜ao Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
  • 70. Tabela de Hash Colis˜oes Uma vez que o tamanho m da tabela n˜ao necessariamente abriga todas as chaves em uso, colis˜oes podem existir Duas ou mais chaves podem ser mapeadas `a mesma posi¸c˜ao Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
  • 71. Tabela de Hash Colis˜oes Uma vez que o tamanho m da tabela n˜ao necessariamente abriga todas as chaves em uso, colis˜oes podem existir Duas ou mais chaves podem ser mapeadas `a mesma posi¸c˜ao Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
  • 72. Tabela de Hash Colis˜oes Uma vez que o tamanho m da tabela n˜ao necessariamente abriga todas as chaves em uso, colis˜oes podem existir Duas ou mais chaves podem ser mapeadas `a mesma posi¸c˜ao Que fazer nesses casos? Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 16 / 32
  • 73. Tabela de Hash Colis˜oes – Encadeamento Usamos encadeamento Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 17 / 32
  • 74. Tabela de Hash Colis˜oes – Encadeamento Usamos encadeamento Cada posi¸c˜ao j na tabela de hash cont´em uma lista ligada de todas as chaves cujo valor de hash ´e h(k) = j Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 17 / 32
  • 75. Tabela de Hash Colis˜oes – Encadeamento Usamos encadeamento Cada posi¸c˜ao j na tabela de hash cont´em uma lista ligada de todas as chaves cujo valor de hash ´e h(k) = j Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 17 / 32
  • 76. Tabela de Hash Colis˜oes – Encadeamento Usamos encadeamento Cada posi¸c˜ao j na tabela de hash cont´em uma lista ligada de todas as chaves cujo valor de hash ´e h(k) = j Ou seja, encadeamos todos os elementos que s˜ao mapeados `a mesma posi¸c˜ao Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 17 / 32
  • 77. Tabela de Hash Encadeamento: Complexidade Quanto tempo levamos para incluir um elemento nessa estrutura? Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 18 / 32
  • 78. Tabela de Hash Encadeamento: Complexidade Quanto tempo levamos para incluir um elemento nessa estrutura? Hash + acesso `a posi¸c˜ao: Θ(1) Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 18 / 32
  • 79. Tabela de Hash Encadeamento: Complexidade Quanto tempo levamos para incluir um elemento nessa estrutura? Hash + acesso `a posi¸c˜ao: Θ(1) Inclus˜ao na lista: Θ(1) (para o hashing) +Θ(1) (para a inclus˜ao), se incluirmos sempre no in´ıcio da lista em T[h(ki )] Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 18 / 32
  • 80. Tabela de Hash Encadeamento: Complexidade Quanto tempo levamos para incluir um elemento nessa estrutura? Hash + acesso `a posi¸c˜ao: Θ(1) Inclus˜ao na lista: Θ(1) (para o hashing) +Θ(1) (para a inclus˜ao), se incluirmos sempre no in´ıcio da lista em T[h(ki )] Busca e exclus˜ao: Θ(1) (hashing) +Θ(c) (busca), onde c ´e o n´umero de elementos na lista em T[h(ki )] Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 18 / 32
  • 81. Tabela de Hash Encadeamento: Complexidade No pior caso, c = n Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
  • 82. Tabela de Hash Encadeamento: Complexidade No pior caso, c = n Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
  • 83. Tabela de Hash Encadeamento: Complexidade No pior caso, c = n Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela E o custo total ser´a Θ(n) Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
  • 84. Tabela de Hash Encadeamento: Complexidade No pior caso, c = n Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela E o custo total ser´a Θ(n) Nada diferente de uma lista ligada com todos os elementos Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
  • 85. Tabela de Hash Encadeamento: Complexidade No pior caso, c = n Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela E o custo total ser´a Θ(n) Nada diferente de uma lista ligada com todos os elementos Mas e o caso m´edio? Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
  • 86. Tabela de Hash Encadeamento: Complexidade No pior caso, c = n Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela E o custo total ser´a Θ(n) Nada diferente de uma lista ligada com todos os elementos Mas e o caso m´edio? Vai depender de qu˜ao boa ´e nossa fun¸c˜ao de hash Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
  • 87. Tabela de Hash Encadeamento: Complexidade No pior caso, c = n Todas as n chaves s˜ao mapeadas `a mesma posi¸c˜ao na tabela E o custo total ser´a Θ(n) Nada diferente de uma lista ligada com todos os elementos Mas e o caso m´edio? Vai depender de qu˜ao boa ´e nossa fun¸c˜ao de hash Se ela mapear todos a algumas poucas posi¸c˜oes, terminaremos com o mesmo custo da lista ligada novamente Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 19 / 32
  • 88. Tabela de Hash Encadeamento: Fun¸c˜ao de Hash E o que seria, nesse caso, uma boa fun¸c˜ao de hash? Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
  • 89. Tabela de Hash Encadeamento: Fun¸c˜ao de Hash E o que seria, nesse caso, uma boa fun¸c˜ao de hash? Uma que fa¸ca com que cada um dos n elementos tenha a mesma chance de ser mapeado a qualquer uma das m posi¸c˜oes de T, independentemente dos demais elementos Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
  • 90. Tabela de Hash Encadeamento: Fun¸c˜ao de Hash E o que seria, nesse caso, uma boa fun¸c˜ao de hash? Uma que fa¸ca com que cada um dos n elementos tenha a mesma chance de ser mapeado a qualquer uma das m posi¸c˜oes de T, independentemente dos demais elementos Essa suposi¸c˜ao ´e chamada hashing uniforme simples Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
  • 91. Tabela de Hash Encadeamento: Fun¸c˜ao de Hash E o que seria, nesse caso, uma boa fun¸c˜ao de hash? Uma que fa¸ca com que cada um dos n elementos tenha a mesma chance de ser mapeado a qualquer uma das m posi¸c˜oes de T, independentemente dos demais elementos Essa suposi¸c˜ao ´e chamada hashing uniforme simples Nesse caso, o comprimento esperado de cada lista ´e de n/m Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
  • 92. Tabela de Hash Encadeamento: Fun¸c˜ao de Hash E o que seria, nesse caso, uma boa fun¸c˜ao de hash? Uma que fa¸ca com que cada um dos n elementos tenha a mesma chance de ser mapeado a qualquer uma das m posi¸c˜oes de T, independentemente dos demais elementos Essa suposi¸c˜ao ´e chamada hashing uniforme simples Nesse caso, o comprimento esperado de cada lista ´e de n/m Nos levando `a complexidade de Θ(n/m) para buscas e exclus˜oes Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
  • 93. Tabela de Hash Encadeamento: Fun¸c˜ao de Hash E o que seria, nesse caso, uma boa fun¸c˜ao de hash? Uma que fa¸ca com que cada um dos n elementos tenha a mesma chance de ser mapeado a qualquer uma das m posi¸c˜oes de T, independentemente dos demais elementos Essa suposi¸c˜ao ´e chamada hashing uniforme simples Nesse caso, o comprimento esperado de cada lista ´e de n/m Nos levando `a complexidade de Θ(n/m) para buscas e exclus˜oes α = n/m ´e chamado de fator de carga do hash → o n´umero m´edio de elementos armazenados nas listas Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 20 / 32
  • 94. Tabela de Hash Encadeamento: Fun¸c˜ao de Hash E o que Θ(n/m) nos diz? Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 21 / 32
  • 95. Tabela de Hash Encadeamento: Fun¸c˜ao de Hash E o que Θ(n/m) nos diz? Que, se fizermos m = Θ(n), ent˜ao n = Θ(m), e Θ(n/m) = Θ(Θ(m)/m) = Θ(1) Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 21 / 32
  • 96. Tabela de Hash Encadeamento: Fun¸c˜ao de Hash E o que Θ(n/m) nos diz? Que, se fizermos m = Θ(n), ent˜ao n = Θ(m), e Θ(n/m) = Θ(Θ(m)/m) = Θ(1) Ou seja, em m´edia, e sob a condi¸c˜ao de que m = Θ(n), buscas e remo¸c˜oes levam Θ(1) Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 21 / 32
  • 97. Tabela de Hash Encadeamento: Fun¸c˜ao de Hash E o que Θ(n/m) nos diz? Que, se fizermos m = Θ(n), ent˜ao n = Θ(m), e Θ(n/m) = Θ(Θ(m)/m) = Θ(1) Ou seja, em m´edia, e sob a condi¸c˜ao de que m = Θ(n), buscas e remo¸c˜oes levam Θ(1) E todas as opera¸c˜oes (inser¸c˜ao, remo¸c˜ao e busca) em uma tabela de hash podem ser feitas em um tempo m´edio de Θ(1) Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 21 / 32
  • 98. Tabela de Hash Encadeamento: Fun¸c˜ao de Hash E como podemos implementar a condi¸c˜ao do hashing uniforme simples? Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 22 / 32
  • 99. Tabela de Hash Encadeamento: Fun¸c˜ao de Hash E como podemos implementar a condi¸c˜ao do hashing uniforme simples? N˜ao podemos, pois raramente conhecemos a distribui¸c˜ao de probabilidade dos dados a serem armazenados Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 22 / 32
  • 100. Tabela de Hash Encadeamento: Fun¸c˜ao de Hash E como podemos implementar a condi¸c˜ao do hashing uniforme simples? N˜ao podemos, pois raramente conhecemos a distribui¸c˜ao de probabilidade dos dados a serem armazenados E mesmo que tiv´essemos, pode ocorrer que elas n˜ao sejam obtidas de forma independente Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 22 / 32
  • 101. Tabela de Hash Encadeamento: Fun¸c˜ao de Hash E como podemos implementar a condi¸c˜ao do hashing uniforme simples? N˜ao podemos, pois raramente conhecemos a distribui¸c˜ao de probabilidade dos dados a serem armazenados E mesmo que tiv´essemos, pode ocorrer que elas n˜ao sejam obtidas de forma independente Se soub´essemos, por exemplo, que as chaves est˜ao uniformemente distribu´ıdas entre 0 e 1, ent˜ao a fun¸c˜ao h(k) = km satisfaz essa condi¸c˜ao Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 22 / 32
  • 102. Tabela de Hash Fun¸c˜ao de Hash: M´etodo da Divis˜ao Que fazer ent˜ao? Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
  • 103. Tabela de Hash Fun¸c˜ao de Hash: M´etodo da Divis˜ao Que fazer ent˜ao? Usar alguma heur´ıstica que funcione em geral bem Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
  • 104. Tabela de Hash Fun¸c˜ao de Hash: M´etodo da Divis˜ao Que fazer ent˜ao? Usar alguma heur´ıstica que funcione em geral bem Uma possibilidade ´e o m´etodo da divis˜ao: Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
  • 105. Tabela de Hash Fun¸c˜ao de Hash: M´etodo da Divis˜ao Que fazer ent˜ao? Usar alguma heur´ıstica que funcione em geral bem Uma possibilidade ´e o m´etodo da divis˜ao: Mapeamos uma chave k a uma das m posi¸c˜oes fazendo h(k) = k mod m Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
  • 106. Tabela de Hash Fun¸c˜ao de Hash: M´etodo da Divis˜ao Que fazer ent˜ao? Usar alguma heur´ıstica que funcione em geral bem Uma possibilidade ´e o m´etodo da divis˜ao: Mapeamos uma chave k a uma das m posi¸c˜oes fazendo h(k) = k mod m Onde mod ´e o resto da divis˜ao → equivalente ao operador % em java Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
  • 107. Tabela de Hash Fun¸c˜ao de Hash: M´etodo da Divis˜ao Que fazer ent˜ao? Usar alguma heur´ıstica que funcione em geral bem Uma possibilidade ´e o m´etodo da divis˜ao: Mapeamos uma chave k a uma das m posi¸c˜oes fazendo h(k) = k mod m Onde mod ´e o resto da divis˜ao → equivalente ao operador % em java Computar h(k) torna-se O(1) Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
  • 108. Tabela de Hash Fun¸c˜ao de Hash: M´etodo da Divis˜ao Que fazer ent˜ao? Usar alguma heur´ıstica que funcione em geral bem Uma possibilidade ´e o m´etodo da divis˜ao: Mapeamos uma chave k a uma das m posi¸c˜oes fazendo h(k) = k mod m Onde mod ´e o resto da divis˜ao → equivalente ao operador % em java Computar h(k) torna-se O(1) Escolher, para m, um n´umero primo n˜ao muito perto de uma potˆencia de 2 ´e frequentemente uma boa escolha Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 23 / 32
  • 109. Tabela de Hash Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas At´e agora, assumimos que a chave ´e um inteiro Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
  • 110. Tabela de Hash Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas At´e agora, assumimos que a chave ´e um inteiro E se for o caso de ser um caractere? Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
  • 111. Tabela de Hash Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas At´e agora, assumimos que a chave ´e um inteiro E se for o caso de ser um caractere? Basta mape´a-lo a um inteiro (seu ASCII, por exemplo) Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
  • 112. Tabela de Hash Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas At´e agora, assumimos que a chave ´e um inteiro E se for o caso de ser um caractere? Basta mape´a-lo a um inteiro (seu ASCII, por exemplo) E se for um String? Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
  • 113. Tabela de Hash Fun¸c˜ao de Hash: Chaves n˜ao Num´ericas At´e agora, assumimos que a chave ´e um inteiro E se for o caso de ser um caractere? Basta mape´a-lo a um inteiro (seu ASCII, por exemplo) E se for um String? Podemos gerar uma chave inteira k fazendo k = n−1 i=0 ci × pi onde n ´e o n´umero de caracteres da chave, ci ´e o ASCII (ou Unicode) do i-´esimo caractere da chave, e pi um peso de um conjunto gerado previamente, de forma aleat´oria Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 24 / 32
  • 114. Tabela de Hash Exemplo Voltemos agora ao nosso exemplo class Pessoa { String nome; int cpf; Pessoa(String nome, int cpf) { this.nome = nome; this.cpf = cpf; } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 25 / 32
  • 115. Tabela de Hash Exemplo Voltemos agora ao nosso exemplo Quantas pessoas teremos, em m´edia? class Pessoa { String nome; int cpf; Pessoa(String nome, int cpf) { this.nome = nome; this.cpf = cpf; } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 25 / 32
  • 116. Tabela de Hash Exemplo Voltemos agora ao nosso exemplo Quantas pessoas teremos, em m´edia? N˜ao sabemos, vamos estimar em 100 class Pessoa { String nome; int cpf; Pessoa(String nome, int cpf) { this.nome = nome; this.cpf = cpf; } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 25 / 32
  • 117. Tabela de Hash Exemplo Voltemos agora ao nosso exemplo Quantas pessoas teremos, em m´edia? N˜ao sabemos, vamos estimar em 100 Ent˜ao |T| = m = 101 → um primo n˜ao muito perto de potˆencias de 2 (26 = 64 e 27 = 128) class Pessoa { String nome; int cpf; Pessoa(String nome, int cpf) { this.nome = nome; this.cpf = cpf; } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 25 / 32
  • 118. Tabela de Hash Exemplo – Passos: Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
  • 119. Tabela de Hash Exemplo – Passos: 1 Criar uma tabela de hash com m = 101 posi¸c˜oes Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
  • 120. Tabela de Hash Exemplo – Passos: 1 Criar uma tabela de hash com m = 101 posi¸c˜oes 2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101) Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
  • 121. Tabela de Hash Exemplo – Passos: 1 Criar uma tabela de hash com m = 101 posi¸c˜oes 2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101) Esta fun¸c˜ao deve ter complexidade assint´otica Θ(1) Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
  • 122. Tabela de Hash Exemplo – Passos: 1 Criar uma tabela de hash com m = 101 posi¸c˜oes 2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101) Esta fun¸c˜ao deve ter complexidade assint´otica Θ(1) h(k) = k mod m Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
  • 123. Tabela de Hash Exemplo – Passos: 1 Criar uma tabela de hash com m = 101 posi¸c˜oes 2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101) Esta fun¸c˜ao deve ter complexidade assint´otica Θ(1) h(k) = k mod m 3 Tratar as poss´ıveis colis˜oes Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
  • 124. Tabela de Hash Exemplo – Passos: 1 Criar uma tabela de hash com m = 101 posi¸c˜oes 2 Encontrar uma fun¸c˜ao de hash h(k) que mapeie o cpf a uma posi¸c˜ao i na tabela (0 ≤ i < 101) Esta fun¸c˜ao deve ter complexidade assint´otica Θ(1) h(k) = k mod m 3 Tratar as poss´ıveis colis˜oes Uma vez que 101 ´e uma m´edia, pode haver mais pessoas que isso, gerando colis˜oes Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 26 / 32
  • 125. Tabela de Hash Exemplo Mas antes, vamos incluir um m´etodo em Pessoa class Pessoa { String nome; int cpf; Pessoa(String nome, int cpf){ this.nome = nome; this.cpf = cpf; } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 27 / 32
  • 126. Tabela de Hash Exemplo Mas antes, vamos incluir um m´etodo em Pessoa class Pessoa { String nome; int cpf; Pessoa(String nome, int cpf){ this.nome = nome; this.cpf = cpf; } boolean equals(Pessoa p) { if (p==null) return(false); return(this.cpf == p.cpf); } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 27 / 32
  • 127. Tabela de Hash Exemplo Mas antes, vamos incluir um m´etodo em Pessoa Ser´a ´util para compara¸c˜oes em LinkedList mais adiante class Pessoa { String nome; int cpf; Pessoa(String nome, int cpf){ this.nome = nome; this.cpf = cpf; } boolean equals(Pessoa p) { if (p==null) return(false); return(this.cpf == p.cpf); } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 27 / 32
  • 128. Tabela de Hash Exemplo import java.util.ListIterator; import java.util.LinkedList; class TabelaHash { LinkedList<Pessoa>[] tabela; TabelaHash(int max) { tabela = new LinkedList[max]; for (int i=0; i<tabela.length; i++) tabela[i] = new LinkedList<Pessoa>(); } int hash(int cpf) { return(cpf % tabela.length); } ... Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 28 / 32
  • 129. Tabela de Hash Exemplo A tabela ser´a um arranjo de listas duplamente ligadas (LinkedList) import java.util.ListIterator; import java.util.LinkedList; class TabelaHash { LinkedList<Pessoa>[] tabela; TabelaHash(int max) { tabela = new LinkedList[max]; for (int i=0; i<tabela.length; i++) tabela[i] = new LinkedList<Pessoa>(); } int hash(int cpf) { return(cpf % tabela.length); } ... Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 28 / 32
  • 130. Tabela de Hash Exemplo Inicializado preferencialmente com um primo n˜ao pr´oximo de uma potˆencia de 2 import java.util.ListIterator; import java.util.LinkedList; class TabelaHash { LinkedList<Pessoa>[] tabela; TabelaHash(int max) { tabela = new LinkedList[max]; for (int i=0; i<tabela.length; i++) tabela[i] = new LinkedList<Pessoa>(); } int hash(int cpf) { return(cpf % tabela.length); } ... Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 28 / 32
  • 131. Tabela de Hash Exemplo Mapeamos cada chave (cpf) a uma posi¸c˜ao na tabela import java.util.ListIterator; import java.util.LinkedList; class TabelaHash { LinkedList<Pessoa>[] tabela; TabelaHash(int max) { tabela = new LinkedList[max]; for (int i=0; i<tabela.length; i++) tabela[i] = new LinkedList<Pessoa>(); } int hash(int cpf) { return(cpf % tabela.length); } ... Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 28 / 32
  • 132. Tabela de Hash Exemplo ... Pessoa busca(int cpf) { int pos = hash(cpf); ListIterator<Pessoa> it = tabela[pos].listIterator(0); while (it.hasNext()) { Pessoa p = it.next(); if (p.cpf == cpf) return(p); } return(null); } ... Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 29 / 32
  • 133. Tabela de Hash Exemplo Na ausˆencia de um m´etodo em LinkedList que fa¸ca exatamente o que quere- mos, implementamos um ... Pessoa busca(int cpf) { int pos = hash(cpf); ListIterator<Pessoa> it = tabela[pos].listIterator(0); while (it.hasNext()) { Pessoa p = it.next(); if (p.cpf == cpf) return(p); } return(null); } ... Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 29 / 32
  • 134. Tabela de Hash Exemplo ... void insere(Pessoa p) { int pos = hash(p.cpf); if (busca(p.cpf) == null) tabela[pos].add(p); } boolean remove(int cpf) { int pos = hash(cpf); Pessoa p = busca(cpf); if (p != null) return(tabela[pos].remove(p)); return(false); } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 30 / 32
  • 135. Tabela de Hash Exemplo Adiciona um elemento ao final da lista em tabela[pos] (m´etodo definido em LinkedList), se ele j´a n˜ao estiver l´a ... void insere(Pessoa p) { int pos = hash(p.cpf); if (busca(p.cpf) == null) tabela[pos].add(p); } boolean remove(int cpf) { int pos = hash(cpf); Pessoa p = busca(cpf); if (p != null) return(tabela[pos].remove(p)); return(false); } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 30 / 32
  • 136. Tabela de Hash Exemplo Usa o m´etodo equals de Pessoa para comparar os objetos na LinkedList ... void insere(Pessoa p) { int pos = hash(p.cpf); if (busca(p.cpf) == null) tabela[pos].add(p); } boolean remove(int cpf) { int pos = hash(cpf); Pessoa p = busca(cpf); if (p != null) return(tabela[pos].remove(p)); return(false); } } Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 30 / 32
  • 137. Tabela de Hash Observa¸c˜oes Hashing ´e um modo eficiente de se implementar uma estrutura em que inclus˜oes, buscas e exclus˜oes s˜ao feitas, em m´edia, em O(1) Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 31 / 32
  • 138. Tabela de Hash Observa¸c˜oes Hashing ´e um modo eficiente de se implementar uma estrutura em que inclus˜oes, buscas e exclus˜oes s˜ao feitas, em m´edia, em O(1) Desde que tomados certos cuidados... Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 31 / 32
  • 139. Tabela de Hash Observa¸c˜oes Hashing ´e um modo eficiente de se implementar uma estrutura em que inclus˜oes, buscas e exclus˜oes s˜ao feitas, em m´edia, em O(1) Desde que tomados certos cuidados... Constru¸c˜ao da fun¸c˜ao de Hash: Outros m´etodos existem, como o da multiplica¸c˜ao e hashing universal Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 31 / 32
  • 140. Tabela de Hash Observa¸c˜oes Hashing ´e um modo eficiente de se implementar uma estrutura em que inclus˜oes, buscas e exclus˜oes s˜ao feitas, em m´edia, em O(1) Desde que tomados certos cuidados... Constru¸c˜ao da fun¸c˜ao de Hash: Outros m´etodos existem, como o da multiplica¸c˜ao e hashing universal Consulte Cormen et al. (2001) para mais detalhes Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 31 / 32
  • 141. Referˆencias Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L., Stein, Clifford. Introduction to Algorithms. 2a ed. MIT Press, 2001. Ziviani, Nivio. Projeto de Algoritmos: com implementa¸c˜oes em Java e C++. Cengage. 2007. Norton Trevisan Romannorton@usp.br Aula 19 – Hashing: Endere¸camento Direto e Resolu¸c˜ao de Colis˜oes8 de novembro de 2018 32 / 32