若干经典哈希算法

来源:互联网 发布:立方米网络 编辑:程序博客网 时间:2024/06/05 15:19
  1. //  RS Hash Function
  2. unsigned  int  RSHash( char   * str)
  3. {
  4.         unsigned  int  b  =   378551 ;
  5.         unsigned  int  a  =   63689 ;
  6.         unsigned  int  hash  =   0 ;

  7.          while  ( * str)
  8.          {
  9.                 hash  =  hash  *  a  +  ( * str ++ );
  10.                 a  *=  b;
  11.         }

  12.          return  (hash  &   0x7FFFFFFF );
  13. }


  14. //  JS Hash Function
  15. unsigned  int  JSHash( char   * str)
  16. {
  17.         unsigned  int  hash  =   1315423911 ;

  18.          while  ( * str)
  19.          {
  20.                 hash  ^=  ((hash  <<   5 )  +  ( * str ++ )  +  (hash  >>   2 ));
  21.         }

  22.          return  (hash  &   0x7FFFFFFF );
  23. }


  24. //  P. J. Weinberger Hash Function
  25. unsigned  int  PJWHash( char   * str)
  26. {
  27.         unsigned  int  BitsInUnignedInt  =  (unsigned  int )( sizeof (unsigned  int )  *
  28. 8 );
  29.         unsigned  int  ThreeQuarters     =  (unsigned  int )((BitsInUnignedInt   *   3 )
  30.   /   4 );
  31.         unsigned  int  OneEighth         =  (unsigned  int )(BitsInUnignedInt  /   8 );

  32.         unsigned  int  HighBits          =  (unsigned  int )( 0xFFFFFFFF )  <<  (BitsInU
  33. nignedInt  -  OneEighth);
  34.         unsigned  int  hash              =   0 ;
  35.         unsigned  int  test              =   0 ;

  36.          while  ( * str)
  37.          {
  38.                 hash  =  (hash  <<  OneEighth)  +  ( * str ++ );
  39.                  if  ((test  =  hash  &  HighBits)  !=   0 )
  40.                  {
  41.                         hash  =  ((hash  ^  (test  >>  ThreeQuarters))  &  ( ~ HighBits)
  42. );
  43.                 }
  44.         }

  45.          return  (hash  &   0x7FFFFFFF );
  46. }

  47. //  ELF Hash Function
  48. unsigned  int  ELFHash( char   * str)
  49. {
  50.         unsigned  int  hash  =   0 ;
  51.         unsigned  int  x     =   0 ;

  52.          while  ( * str)
  53.          {
  54.                 hash  =  (hash  <<   4 )  +  ( * str ++ );
  55.                  if  ((x  =  hash  &   0xF0000000L )  !=   0 )
  56.                  {
  57.                         hash  ^=  (x  >>   24 );
  58.                         hash  &=   ~ x;
  59.                 }
  60.         }

  61.          return  (hash  &   0x7FFFFFFF );
  62. }


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

  68.          while  ( * str)
  69.          {
  70.                 hash  =  hash  *  seed  +  ( * str ++ );
  71.         }

  72.          return  (hash  &   0x7FFFFFFF );
  73. }


  74. //  SDBM Hash Function
  75. unsigned  int  SDBMHash( char   * str)
  76. {
  77.         unsigned  int  hash  =   0 ;

  78.          while  ( * str)
  79.          {
  80.                 hash  =  ( * str ++ )  +  (hash  <<   6 )  +  (hash  <<   16 )  -  hash;
  81.         }

  82.          return  (hash  &   0x7FFFFFFF );
  83. }


  84. //  DJB Hash Function
  85. unsigned  int  DJBHash( char   * str)
  86. {
  87.         unsigned  int  hash  =   5381 ;

  88.          while  ( * str)
  89.          {
  90.                 hash  +=  (hash  <<   5 )  +  ( * str ++ );
  91.         }

  92.          return  (hash  &   0x7FFFFFFF );
  93. }


  94. //  AP Hash Function
  95. unsigned  int  APHash( char   * str)
  96. {
  97.         unsigned  int  hash  =   0 ;
  98.          int  i;

  99.          for  (i = 0 ;  * str; i ++ )
  100.          {
  101.                  if  ((i  &   1 )  ==   0 )
  102.                  {
  103.                         hash  ^=  ((hash  <<   7 )  ^  ( * str ++ )  ^  (hash  >>   3 ));
  104.                 }
  105.                  else
  106.                  {
  107.                         hash  ^=  ( ~ ((hash  <<   11 )  ^  ( * str ++ )  ^  (hash  >>   5 )));
  108.                 }
  109.         }

  110.          return  (hash  &   0x7FFFFFFF );
  111. }
原文地址:http://blog.csdn.net/jeven2005/archive/2007/03/19/1533523.aspx
原创粉丝点击