常用Hash算法(C语言的简单实现)

 更新时间:2016年09月25日 20:26:39   投稿:jingxian  
下面小编就为大家带来一篇常用Hash算法(C语言的简单实现)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

如下所示:

#include "GeneralHashFunctions.h" 
 
unsigned int RSHash(char* str, unsigned int len) 
{ 
  unsigned int b  = 378551; 
  unsigned int a  = 63689; 
  unsigned int hash = 0; 
  unsigned int i  = 0; 
 
  for(i = 0; i < len; str++, i++) 
  { 
   hash = hash * a + (*str); 
   a  = a * b; 
  } 
 
  return hash; 
} 
/* End Of RS Hash Function */ 
 
 
unsigned int JSHash(char* str, unsigned int len) 
{ 
  unsigned int hash = 1315423911; 
  unsigned int i  = 0; 
 
  for(i = 0; i < len; str++, i++) 
  { 
   hash ^= ((hash << 5) + (*str) + (hash >> 2)); 
  } 
 
  return hash; 
} 
/* End Of JS Hash Function */ 
 
 
unsigned int PJWHash(char* str, unsigned int len) 
{ 
  const unsigned int BitsInUnsignedInt = (unsigned int)(sizeof(unsigned int) * 8); 
  const unsigned int ThreeQuarters   = (unsigned int)((BitsInUnsignedInt * 3) / 4); 
  const unsigned int OneEighth     = (unsigned int)(BitsInUnsignedInt / 8); 
  const unsigned int HighBits     = (unsigned int)(0xFFFFFFFF) << (BitsInUnsignedInt - OneEighth); 
  unsigned int hash       = 0; 
  unsigned int test       = 0; 
  unsigned int i         = 0; 
 
  for(i = 0; i < len; str++, i++) 
  { 
   hash = (hash << OneEighth) + (*str); 
 
   if((test = hash & HighBits) != 0) 
   { 
     hash = (( hash ^ (test >> ThreeQuarters)) & (~HighBits)); 
   } 
  } 
 
  return hash; 
} 
/* End Of P. J. Weinberger Hash Function */ 
 
 
unsigned int ELFHash(char* str, unsigned int len) 
{ 
  unsigned int hash = 0; 
  unsigned int x  = 0; 
  unsigned int i  = 0; 
 
  for(i = 0; i < len; str++, i++) 
  { 
   hash = (hash << 4) + (*str); 
   if((x = hash & 0xF0000000L) != 0) 
   { 
     hash ^= (x >> 24); 
   } 
   hash &= ~x; 
  } 
 
  return hash; 
} 
/* End Of ELF Hash Function */ 
 
 
unsigned int BKDRHash(char* str, unsigned int len) 
{ 
  unsigned int seed = 131; /* 31 131 1313 13131 131313 etc.. */ 
  unsigned int hash = 0; 
  unsigned int i  = 0; 
 
  for(i = 0; i < len; str++, i++) 
  { 
   hash = (hash * seed) + (*str); 
  } 
 
  return hash; 
} 
/* End Of BKDR Hash Function */ 
 
 
unsigned int SDBMHash(char* str, unsigned int len) 
{ 
  unsigned int hash = 0; 
  unsigned int i  = 0; 
 
  for(i = 0; i < len; str++, i++) 
  { 
   hash = (*str) + (hash << 6) + (hash << 16) - hash; 
  } 
 
  return hash; 
} 
/* End Of SDBM Hash Function */ 
 
 
unsigned int DJBHash(char* str, unsigned int len) 
{ 
  unsigned int hash = 5381; 
  unsigned int i  = 0; 
 
  for(i = 0; i < len; str++, i++) 
  { 
   hash = ((hash << 5) + hash) + (*str); 
  } 
 
  return hash; 
} 
/* End Of DJB Hash Function */ 
 
 
unsigned int DEKHash(char* str, unsigned int len) 
{ 
  unsigned int hash = len; 
  unsigned int i  = 0; 
 
  for(i = 0; i < len; str++, i++) 
  { 
   hash = ((hash << 5) ^ (hash >> 27)) ^ (*str); 
  } 
  return hash; 
} 
/* End Of DEK Hash Function */ 
 
 
unsigned int BPHash(char* str, unsigned int len) 
{ 
  unsigned int hash = 0; 
  unsigned int i  = 0; 
  for(i = 0; i < len; str++, i++) 
  { 
   hash = hash << 7 ^ (*str); 
  } 
 
  return hash; 
} 
/* End Of BP Hash Function */ 
 
 
unsigned int FNVHash(char* str, unsigned int len) 
{ 
  const unsigned int fnv_prime = 0x811C9DC5; 
  unsigned int hash   = 0; 
  unsigned int i     = 0; 
 
  for(i = 0; i < len; str++, i++) 
  { 
   hash *= fnv_prime; 
   hash ^= (*str); 
  } 
 
  return hash; 
} 
/* End Of FNV Hash Function */ 
 
 
unsigned int APHash(char* str, unsigned int len) 
{ 
  unsigned int hash = 0xAAAAAAAA; 
  unsigned int i  = 0; 
 
  for(i = 0; i < len; str++, i++) 
  { 
   hash ^= ((i & 1) == 0) ? ( (hash << 7) ^ (*str) * (hash >> 3)) : 
                (~((hash << 11) + ((*str) ^ (hash >> 5)))); 
  } 
 
  return hash; 
} 
/* End Of AP Hash Function */ 

以上就是小编为大家带来的常用Hash算法(C语言的简单实现)的全部内容了,希望对大家有所帮助,多多支持脚本之家~

相关文章

  • C++第三方日志库log4cplus的安装与使用配置教程

    C++第三方日志库log4cplus的安装与使用配置教程

    log4cplus是C++编写的开源的日志系统,log4cplus具有线程安全、灵活、以及多粒度控制的特点,本文给大家介绍C++第三方日志库log4cplus的安装与使用教程,感兴趣的朋友一起看看吧
    2022-02-02
  • STl中的排序算法详细解析

    STl中的排序算法详细解析

    全排序即把所给定范围所有的元素按照大小关系顺序排列。sort采用的是成熟的"快速排序算法"(目前大部分STL版本已经不是采用简单的快速排序,而是结合内插排序算法)
    2013-09-09
  • C语言实现时区转换函数的实例

    C语言实现时区转换函数的实例

    这篇文章主要介绍了C语言实现时区转换函数的实例的相关资料,这里分析需求并提供实现代码,需要的朋友可以参考下
    2017-08-08
  • C++语言pow函数的具体使用

    C++语言pow函数的具体使用

    本文主要介绍了C++语言pow函数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • c++下使用windows api遍历指定文件夹及其子文件夹中的文件

    c++下使用windows api遍历指定文件夹及其子文件夹中的文件

    这篇文章主要介绍了c++下使用windows api遍历指定文件夹及其子文件夹中的文件实现代码,一般都是通过c++自带的函数实现
    2021-07-07
  • c语言可变参数实现示例

    c语言可变参数实现示例

    这篇文章主要介绍了c语言可变参数实现示例,需要的朋友可以参考下
    2014-04-04
  • Qt超时锁屏的实现示例

    Qt超时锁屏的实现示例

    本文主要介绍了Qt超时锁屏的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C++ 类访问控制的条件总结

    C++ 类访问控制的条件总结

    这篇文章主要介绍了C++ 类访问控制的条件总结的相关资料,需要的朋友可以参考下
    2017-05-05
  • C语言数据结构之循环链表的简单实例

    C语言数据结构之循环链表的简单实例

    这篇文章主要介绍了C语言数据结构之循环链表的简单实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • c++线程池实现方法

    c++线程池实现方法

    这篇文章主要介绍了c++线程池实现方法,实例分析了C++线程池的原理与相关实现技巧,需要的朋友可以参考下
    2015-06-06

最新评论