用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
jeven2005的公告
文章分类
IT门户
中国软件
互联网实验室
WE BLOG
BEVEN
FUYUN
HAOFANGOO
LEIXIHUA
MAGGIE
MYAN
PLUS
QILIA
WS-man
软件开发
csdn.com
CSDN开发高手
CSDN社区
ITPUB论坛
JavaScript参考手册
Microsoft Visual Studio2003开发中心
sourceforge
VC大本营
VC源动力
VC知识库
中国开发网
中国黑客网
中文JAVA技术网
代码中国
共创软件联盟
内核之旅
开源编程网
编程爱好者
落伍者论坛
社区论坛
DONEWS
西电好网
深信服科技
产品
公司主页
解决方案
思想网站
世纪中国
中国学术论坛
中评网
文化研究
校友录
清中高三(6)班
西电软件学院
中文版媒体
华乐街日报
华盛顿观察
福布斯
财富
中文博客
思维的乐趣
新浪博客
中文媒体
IT时代周刊
IT经理世界
中国经营报
财经杂志
存档

原创  若干经典的字符串哈希函数 收藏

//  RS Hash Function
unsigned  int  RSHash( char   * str)
{
        unsigned 
int  b  =   378551 ;
        unsigned 
int  a  =   63689 ;
        unsigned 
int  hash  =   0 ;

        
while  ( * str)
        
{
                hash 
=  hash  *  a  +  ( * str ++ );
                a 
*=  b;
        }


        
return  (hash  &   0x7FFFFFFF );
}


//  JS Hash Function
unsigned  int  JSHash( char   * str)
{
        unsigned 
int  hash  =   1315423911 ;

        
while  ( * str)
        
{
                hash 
^=  ((hash  <<   5 +  ( * str ++ +  (hash  >>   2 ));
        }


        
return  (hash  &   0x7FFFFFFF );
}


//  P. J. Weinberger Hash Function
unsigned  int  PJWHash( char   * str)
{
        unsigned 
int  BitsInUnignedInt  =  (unsigned  int )( sizeof (unsigned  int *
8 );
        unsigned 
int  ThreeQuarters     =  (unsigned  int )((BitsInUnignedInt   *   3 )
 
/   4 );
        unsigned 
int  OneEighth         =  (unsigned  int )(BitsInUnignedInt  /   8 );

        unsigned 
int  HighBits          =  (unsigned  int )( 0xFFFFFFFF <<  (BitsInU
nignedInt 
-  OneEighth);
        unsigned 
int  hash              =   0 ;
        unsigned 
int  test              =   0 ;

        
while  ( * str)
        
{
                hash 
=  (hash  <<  OneEighth)  +  ( * str ++ );
                
if  ((test  =  hash  &  HighBits)  !=   0 )
                
{
                        hash 
=  ((hash  ^  (test  >>  ThreeQuarters))  &  ( ~ HighBits)
);
                }

        }


        
return  (hash  &   0x7FFFFFFF );
}


//  ELF Hash Function
unsigned  int  ELFHash( char   * str)
{
        unsigned 
int  hash  =   0 ;
        unsigned 
int  x     =   0 ;

        
while  ( * str)
        
{
                hash 
=  (hash  <<   4 +  ( * str ++ );
                
if  ((x  =  hash  &   0xF0000000L !=   0 )
                
{
                        hash 
^=  (x  >>   24 );
                        hash 
&=   ~ x;
                }

        }


        
return  (hash  &   0x7FFFFFFF );
}


//  BKDR Hash Function
unsigned  int  BKDRHash( char   * str)
{
        unsigned 
int  seed  =   131 //  31 131 1313 13131 131313 etc..
        unsigned  int  hash  =   0 ;

        
while  ( * str)
        
{
                hash 
=  hash  *  seed  +  ( * str ++ );
        }


        
return  (hash  &   0x7FFFFFFF );
}


//  SDBM Hash Function
unsigned  int  SDBMHash( char   * str)
{
        unsigned 
int  hash  =   0 ;

        
while  ( * str)
        
{
                hash 
=  ( * str ++ +  (hash  <<   6 +  (hash  <<   16 -  hash;
        }


        
return  (hash  &   0x7FFFFFFF );
}


//  DJB Hash Function
unsigned  int  DJBHash( char   * str)
{
        unsigned 
int  hash  =   5381 ;

        
while  ( * str)
        
{
                hash 
+=  (hash  <<   5 +  ( * str ++ );
        }


        
return  (hash  &   0x7FFFFFFF );
}


//  AP Hash Function
unsigned  int  APHash( char   * str)
{
        unsigned 
int  hash  =   0 ;
        
int  i;

        
for  (i = 0 * str; i ++ )
        
{
                
if  ((i  &   1 ==   0 )
                
{
                        hash 
^=  ((hash  <<   7 ^  ( * str ++ ^  (hash  >>   3 ));
                }

                
else
                
{
                        hash 
^=  ( ~ ((hash  <<   11 ^  ( * str ++ ^  (hash  >>   5 )));
                }

        }


        
return  (hash  &   0x7FFFFFFF );
}

比较经典的字符串hash就这些了吧,"ELF Hash Function" <-这个比较常用.. 

发表于 @ 2007年03月19日 12:46:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:用GDB调试程序 | 新一篇:setsockopt()改善socket网络程序的健壮性

  • 发表评论
  • 评论内容:
  •  
Copyright © jeven2005
Powered by CSDN Blog