常见字符串哈希函数

最常用的两个:

 1          
 2 const int MAXN = 1000003;
 3 
 4 常用1
 5 1  SDBMHash
 6 int SDBMHash(char *str)
 7 {
 8     int hash = 0;
 9     while (*str) hash = (*str++) + (hash << 6) + (hash << 16) - hash;
10     return (hash & 0x7FFFFFFF) % MAXN;
11 }
12  
13 
14 常用2 
15 
16 int BKDRHash(char *str)
17 {
18     int seed = 131; 
19     int hash = 0;
20     while (*str) hash = hash * seed + (*str++);
21     return (hash & 0x7FFFFFFF) % MAXN;
22 }

最常见的8个:

  1 const int MAXN = 1000003;
  2 
  3 //常用 1
  4 1  SDBMHash
  5 unsigned int SDBMHash(char *str)
  6 {
  7     unsigned int hash = 0;
  8     while (*str)
  9     {
 10         // equivalent to: hash = 65599*hash + (*str++);
 11         hash = (*str++) + (hash << 6) + (hash << 16) - hash;
 12     }
 13     return (hash & 0x7FFFFFFF)%MAXN;
 14 }
 15  
 16 2  RS Hash Function
 17 unsigned int RSHash(char *str)
 18 {
 19     unsigned int b = 378551;
 20     unsigned int a = 63689;
 21     unsigned int hash = 0;
 22  
 23     while (*str)
 24     {
 25         hash = hash * a + (*str++);
 26         a *= b;
 27     }
 28     return (hash & 0x7FFFFFFF)%MAXN;
 29 }
 30  
 31 3 JS Hash Function
 32 unsigned int JSHash(char *str)
 33 {
 34     unsigned int hash = 1315423911;
 35  
 36     while (*str)
 37     {
 38         hash ^= ((hash << 5) + (*str++) + (hash >> 2));
 39     }
 40     return (hash & 0x7FFFFFFF)%MAXN;
 41 }
 42  
 43 4 P. J. Weinberger Hash Function
 44 unsigned int PJWHash(char *str)
 45 {
 46     unsigned int BitsInUnignedInt = (unsigned int)(sizeof(unsigned int) * 8);
 47     unsigned int ThreeQuarters    = (unsigned int)((BitsInUnignedInt  * 3) / 4);
 48     unsigned int OneEighth        = (unsigned int)(BitsInUnignedInt / 8);
 49     unsigned int HighBits         = (unsigned int)(0xFFFFFFFF) << (BitsInUnignedInt - OneEighth);
 50     unsigned int hash             = 0;
 51     unsigned int test             = 0;
 52     while (*str)
 53     {
 54         hash = (hash << OneEighth) + (*str++);
 55         if ((test = hash & HighBits) != 0)
 56         {
 57             hash = ((hash ^ (test >> ThreeQuarters)) & (~HighBits));
 58         }
 59     }
 60     return (hash & 0x7FFFFFFF)%MAXN;
 61 }
 62  
 63 5 ELF Hash Function
 64 unsigned int ELFHash(char *str)
 65 {
 66     unsigned int hash = 0;
 67     unsigned int x    = 0;
 68     while (*str)
 69     {
 70         hash = (hash << 4) + (*str++);
 71         if ((x = hash & 0xF0000000L) != 0)
 72         {
 73             hash ^= (x >> 24);
 74             hash &= ~x;
 75         }
 76     }
 77     return (hash & 0x7FFFFFFF)%MAXN;
 78 }
 79  
 80 //常用2 
 81 6 BKDR Hash Function
 82 unsigned int BKDRHash(char *str)
 83 {
 84     unsigned int seed = 131; // 31 131 1313 13131 131313 etc..
 85     unsigned int hash = 0;
 86     while (*str)
 87     {
 88         hash = hash * seed + (*str++);
 89     }
 90     return (hash & 0x7FFFFFFF)%MAXN;
 91 }
 92  
 93 7 DJB Hash Function
 94 unsigned int DJBHash(char *str)
 95 {
 96     unsigned int hash = 5381;
 97     while (*str)
 98     {
 99         hash += (hash << 5) + (*str++);
100     }
101     return (hash & 0x7FFFFFFF)%MAXN;
102 }
103  
104 8 AP Hash Function
105 unsigned int APHash(char *str)
106 {
107     unsigned int hash = 0;
108     int i;
109     for (i=0; *str; i++)
110     {
111         if ((i & 1) == 0)
112         {
113             hash ^= ((hash << 7) ^ (*str++) ^ (hash >> 3));
114         }
115         else
116         {
117             hash ^= (~((hash << 11) ^ (*str++) ^ (hash >> 5)));
118         }
119     }
120     return (hash & 0x7FFFFFFF)%MAXN;
121 }

原文链接:http://blog.csdn.net/cgl1079743846/article/details/7833794

原文地址:https://www.cnblogs.com/10jschen/p/2646090.html