首页 > 其他 > 详细

一个好的散列函数

时间:2014-03-31 09:19:35      阅读:480      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
/* hash function */

typedef unsigned int Index;
 
Index
Hash( const char *Key, int TableSize )        //Key为要散列的关键字, TableSize为散列表的大小
{
    unsigned int HashVal = 0;

    while( *Key != \0 )
        HashVal = ( HashVal << 5 ) + *Key++;   //计算一个32的多项式(乘32用移位实现)

    return HashVal % TableSize;
}
bubuko.com,布布扣

这个散列函数涉及到关键字中的所有字符,并且一般可以分布得很好。

它计算Key[0] * 32^(KeySize-1) + Key[1] * 32^(KeySize-2) + Key[2] * 32^(KeySize-3) + …+Key[KeySize-1] * 32^0.

观察程序,可以发现,程序中并没有直接计算上面的关于32的多项式,而是使用了Horner法则(http://www.cnblogs.com/nufangrensheng/p/3633493.html)来计算这个关于32的多项式。

如果关键字特别长,通常的做法是不使用所有的字符,比如,只使用奇数位置上的字符来实现它们的散列函数。

一个好的散列函数,布布扣,bubuko.com

一个好的散列函数

原文:http://www.cnblogs.com/nufangrensheng/p/3635003.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!