[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Re: Dúvidas
- Subject: Re: Dúvidas
- From: Yoshiharu Kohayakawa <yoshi@ime.usp.br>
- Date: Sun, 24 Jun 2001 03:37:11 -0300
Giuliano Mega wrote (on Thursday, 21 Jun 2001, at 22:17:22 -0300):
> [...]
> > Não sei não, talvez eu esteja errada, mas por ele pedir o valor de M
> > tal que a*x%M é o menor possível, para que todas as chaves daquela
> > tabela sejam diferentes, não seria muito interessante deixar a
> > variável a ser um float, exatamente por estar em uma operação de
> > módulo. Eu faria assim:int M, int a;for( M = N; ; M++) //N é o
> > número de elementos for(a = 1; a < M; a++) //testo as
> > colisões de todas as chaves Assim, ele começa com um M de menor valor
> > possível de se construir a tabela (que é o próprio número de elementos
> > N), e, para cada valor de a que altere o resultado final módulo M
> > (para isso, a tem que estar entre 1 e M-1), verifico se M satisfaz
> > número de colisões = 0.
>
> É, pode ser. Também pensei nisso, mas foi ao olhar o texto que
> verifiquei que o Sedgewick usa a razão áurea como 'a' num exemplo.
> Professor, o senhor poderia nos dar uma mão com este aqui??
Voce deve de fato encontrar a funcao para cada conjunto de chaves dadas. O
mais simples é testar todos os valores de a para cada M. Existem jeitos
melhores, mas eles dependem de teoria.
Estas funcoes de hashing pefeitas sao uteis em situacoes onde o conjunto de
chaves é estatico (ou as atualizacoes são pouco frequentes).
Vejam a documentacao de gperf, o pacote GNU para a geracao de funcoes de
hashing perfeitas.
Yoshi
> []'s
>
> Giuliano
- References:
- Prazo para o EP4
- From: Yoshiharu Kohayakawa <yoshi@ime.usp.br>
- Dúvidas
- From: "Alexandre Murakami" <ale_murakami@bol.com.br>
- Re: Dúvidas
- From: Flávia Rainone <flaviarnn@yahoo.com>
- Re: Dúvidas
- From: Giuliano Mega <megag@terra.com.br>