You are on page 1of 44

Algoritmos: Ordenao e Busca

Prof. Vinicius da Cunha M. Borges. Material Gentilmente concedido pelos Prof. Marcelo Quinta e Prof. Marcos Roriz

Roteiro
Aula Anterior Funes Hash Prxima aula

Aula Anterior
rvores Trie

Roteiro
Aula Anterior Funes Hash Prxima aula

Motivao
Pesquisa sequencial Pesquisa binria
Ineficientes para tabelas muito grandes

Motivao
Pesquisa sequencial Pesquisa binria Ideal
Indexao direta (transformao chave-ndice)
pesq (T:tabela, C:chave) elemento

Ineficientes para tabelas muito grandes

Hash
Significa:

Hash
Significa:
Fazer picadinho de carne e vegetais para cozinhar;

Hash
Significa:
Fazer picadinho de carne e vegetais para cozinhar; Fazer uma baguna;

Funo Hash
Funo de disperso ou de espalhamento. h(chave) [min .. max]

Funo Hash
Funo de disperso ou de espalhamento. h(chave) [min .. max]

c : chave

Funo Hash
Funo de disperso ou de espalhamento. h(chave) [min .. max]

c : chave

h(c)

Funo Hash
Funo de disperso ou de espalhamento. h(chave) [min .. max]
min
c : chave

h(c)

max

Funo Hash
Funo de disperso ou de espalhamento. h(chave) [min .. max]
min
c : chave

h(c)

max

Funo Hash
Ou seja, a funo hash h uma funo que mapeia uma chave k em um inteiro no intervalo [min, max]. Problema?

Funo Hash
Ou seja, a funo hash h uma funo que mapeia uma chave k em um inteiro no intervalo [min, max]. Problema?
A funo pode calcular o mesmo valor para dois ou mais itens diferentes. Isto chamado de coliso.

Funo Hash
Funo de disperso ou de espalhamento. h(chave) [min .. max]
min
c : chave

h(c)

max

Funo Hash
Funo de disperso ou de espalhamento. h(chave) [min .. max]
min
c : chave

h(c)

max

Funo Hash
Uma boa funo de hash aquela que minimiza o nmero de colises.

Aplicao
Tanto a insero, remoo e pesquisa so feitos da mesma maneira. Como?
Calculando o valor de hash da chave do item a ser inserido, removido ou pesquisado.

Processo
Computar o valor da funo de transformao, a qual transforma a chave de pesquisa em um endereo da tabela. Considera que duas ou mais chaves podem ser transformadas em um mesmo endereo de tabela, necessrio existir um mtodo para lidar com colises.

Processo
Uma funo de hash deve mapear chaves em inteiros dentro do intervalo [0..M 1], onde M o tamanho da tabela. A funo de transformao ideal aquela que:
Seja simples de ser computada. Minimiza colises.

Processo
Como as transformaes sobre as chaves so aritmticas, deve-se transformar as chaves nonumricas em nmeros.

Funo de Transformao
Uma funo de transformao deve mapear chaves em inteiros dentro do intervalo [min .. max]. Geralmente: min = 0 e max = M M o tamanho da tabela.

Funo de Transformao
A funo de transformao ideal aquela que:
1. Seja simples de ser computada. 2. Para cada chave de entrada, qualquer uma das sadas possveis igualmente provvel de ocorrer.

Funo de Transformao
Como as transformaes sobre as chaves so aritmticas, deve-se transformar as chaves nonumricas em nmeros. Em Java, basta realizar uma converso de cada caractere da chave no numrica para um nmero inteiro.

Transformao de chaves no numricas

Transformao de chaves no numricas

Transformao de chaves no numricas

Coliso
Funo de disperso ou de espalhamento. h(chave) [min .. max]

c : chave

h(c)

Coliso
Funo de disperso ou de espalhamento. h(chave) [min .. max]
min
c : chave

h(c)

max

Coliso
Funo de disperso ou de espalhamento. h(chave) [min .. max]
min
c : chave

h(c)

max

Coliso
Funo de disperso ou de espalhamento. h(chave) [min .. max]
min
c : chave

h(c)

max

Lista Linear
Uma das formas de resolver as colises simplesmente construir uma lista linear encadeada para cada endereo da tabela. Assim, todas as chaves com mesmo endereo so encadeadas em uma lista linear.

Lista Linear

Lista Linear

Lista Linear
Trabalho:
Implementar uma funo hash simples que recebe strings como entrada e usa a estrutura de lista linear para tratar colises. Use a funo geraPeso e h para os pesos e hash da funo respectivamente. Use M como 31, 79, 151. Entrada: 100, 1000, 10000 strings. Sada: Nmero de colises e tempo de execuo.

Funo mais usada


Usa o resto da diviso por M .
h(K) = K mod M
Onde K um inteiro correspondente chave. M o tamanho da tabela.

Funo mais usada


Usa o resto da diviso por M .
h(K) = K mod M
Onde K um inteiro correspondente chave. M o tamanho da tabela.
K
mod M

Outras funes
Truncamento
Parte da entrada. 3 primeiros dgitos, ou combinar o primeiro par com o ltimo par de dgitos.

Outras funes
Truncamento
Parte da entrada. 3 primeiros dgitos, ou combinar o primeiro par com o ltimo par de dgitos. Ex:
Chave k = 18291789316 h'(k) = 182 h''(k) = 1816

Meio do Quadrado
Elevar a chave ao quadrado e selecionar sequncia de dgitos.
Ex:

Mtodo da multiplicao
A funo h definida como: m normalmente uma potncia de dois. A uma constante, tal que 0 < A < 1 Extrair a parte fracionria de kA, ou seja, kA (mod 1), . Utilizar o piso do resultado.
.

Mtodo da multiplicao

You might also like