字符串哈希函数

  1. unsigned int RSHash(char* str, unsigned int len)     
  2. {     
  3.    unsigned int b    = 378551;     
  4.    unsigned int a    = 63689;     
  5.    unsigned int hash = 0;     
  6.    unsigned int i    = 0;     
  7.    for(i = 0; i < len; str++, i++)     
  8.    {     
  9.       hash = hash * a + (*str);     
  10.       a    = a * b;     
  11.    }     
  12.    return hash;     
  13. }     
  14. /* End Of RS Hash Function */    
  15.     
  16. unsigned int JSHash(char* str, unsigned int len)     
  17. {     
  18.    unsigned int hash = 1315423911;     
  19.    unsigned int i    = 0;     
  20.    for(i = 0; i < len; str++, i++)     
  21.    {     
  22.       hash ^= ((hash << 5) + (*str) + (hash >> 2));     
  23.    }     
  24.    return hash;     
  25. }     
  26. /* End Of JS Hash Function */    
  27.     
  28. unsigned int PJWHash(char* str, unsigned int len)     
  29. {     
  30.    const unsigned int BitsInUnsignedInt = (unsigned int)(sizeof(unsigned int) * 8);     
  31.    const unsigned int ThreeQuarters     = (unsigned int)((BitsInUnsignedInt  * 3) / 4);     
  32.    const unsigned int OneEighth         = (unsigned int)(BitsInUnsignedInt / 8);     
  33.    const unsigned int HighBits          = (unsigned int)(0xFFFFFFFF) << (BitsInUnsignedInt - OneEighth);     
  34.    unsigned int hash              = 0;     
  35.    unsigned int test              = 0;     
  36.    unsigned int i                 = 0;     
  37.    for(i = 0; i < len; str++, i++)     
  38.    {     
  39.       hash = (hash << OneEighth) + (*str);     
  40.       if((test = hash & HighBits)  != 0)     
  41.       {     
  42.          hash = (( hash ^ (test >> ThreeQuarters)) & (~HighBits));     
  43.       }     
  44.    }     
  45.    return hash;     
  46. }     
  47. /* End Of  P. J. Weinberger Hash Function */    
  48.     
  49. unsigned int ELFHash(char* str, unsigned int len)     
  50. {     
  51.    unsigned int hash = 0;     
  52.    unsigned int x    = 0;     
  53.    unsigned int i    = 0;     
  54.    for(i = 0; i < len; str++, i++)     
  55.    {     
  56.       hash = (hash << 4) + (*str);     
  57.       if((x = hash & 0xF0000000L) != 0)     
  58.       {     
  59.          hash ^= (x >> 24);     
  60.       }     
  61.       hash &= ~x;     
  62.    }     
  63.    return hash;     
  64. }     
  65. /* End Of ELF Hash Function */    
  66.     
  67. unsigned int BKDRHash(char* str, unsigned int len)     
  68. {     
  69.    unsigned int seed = 131; /* 31 131 1313 13131 131313 etc.. */    
  70.    unsigned int hash = 0;     
  71.    unsigned int i    = 0;     
  72.    for(i = 0; i < len; str++, i++)     
  73.    {     
  74.       hash = (hash * seed) + (*str);     
  75.    }     
  76.    return hash;     
  77. }     
  78. /* End Of BKDR Hash Function */    
  79.     
  80. unsigned int SDBMHash(char* str, unsigned int len)     
  81. {     
  82.    unsigned int hash = 0;     
  83.    unsigned int i    = 0;     
  84.    for(i = 0; i < len; str++, i++)     
  85.    {     
  86.       hash = (*str) + (hash << 6) + (hash << 16) - hash;     
  87.    }     
  88.    return hash;     
  89. }     
  90. /* End Of SDBM Hash Function */    
  91.     
  92. unsigned int DJBHash(char* str, unsigned int len)     
  93. {     
  94.    unsigned int hash = 5381;     
  95.    unsigned int i    = 0;     
  96.    for(i = 0; i < len; str++, i++)     
  97.    {     
  98.       hash = ((hash << 5) + hash) + (*str);     
  99.    }     
  100.    return hash;     
  101. }     
  102. /* End Of DJB Hash Function */    
  103.     
  104. unsigned int DEKHash(char* str, unsigned int len)     
  105. {     
  106.    unsigned int hash = len;     
  107.    unsigned int i    = 0;     
  108.    for(i = 0; i < len; str++, i++)     
  109.    {     
  110.       hash = ((hash << 5) ^ (hash >> 27)) ^ (*str);     
  111.    }     
  112.    return hash;     
  113. }     
  114. /* End Of DEK Hash Function */    
  115.     
  116. unsigned int BPHash(char* str, unsigned int len)     
  117. {     
  118.    unsigned int hash = 0;     
  119.    unsigned int i    = 0;     
  120.    for(i = 0; i < len; str++, i++)     
  121.    {     
  122.       hash = hash << 7 ^ (*str);     
  123.    }     
  124.    return hash;     
  125. }     
  126. /* End Of BP Hash Function */    
  127.     
  128. unsigned int FNVHash(char* str, unsigned int len)     
  129. {     
  130.    const unsigned int fnv_prime = 0x811C9DC5;     
  131.    unsigned int hash      = 0;     
  132.    unsigned int i         = 0;     
  133.    for(i = 0; i < len; str++, i++)     
  134.    {     
  135.       hash *= fnv_prime;     
  136.       hash ^= (*str);     
  137.    }     
  138.    return hash;     
  139. }     
  140. /* End Of FNV Hash Function */    
  141.     
  142. unsigned int APHash(char* str, unsigned int len)     
  143. {     
  144.    unsigned int hash = 0xAAAAAAAA;     
  145.    unsigned int i    = 0;     
  146.    for(i = 0; i < len; str++, i++)     
  147.    {     
  148.       hash ^= ((i & 1) == 0) ? (  (hash <<  7) ^ (*str) * (hash >> 3)) :     
  149.                                (~((hash << 11) + (*str) ^ (hash >> 5)));     
  150.    }     
  151.    return hash;     
  152. }     
  153. /* End Of AP Hash Function */   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值