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

 更新时间:2020年4月25日 17:34  点击:1569

如下所示:

#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语言的简单实现)的全部内容了,希望对大家有所帮助,多多支持猪先飞~

[!--infotagslink--]

相关文章

  • C#几种排序算法

    作者:Sabine 【导读】本文介绍了C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序  冒泡排序 using System; namespace BubbleSorter { public class Bubb...2020-06-25
  • 经典实例讲解C#递归算法

    这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • 图文详解Heap Sort堆排序算法及JavaScript的代码实现

    这篇文章以图文详解Heap Sort堆排序算法及JavaScript的代码实现,堆排序算法基于类二叉树的堆数据结构,需要的朋友可以参考下...2016-05-05
  • C#中实现任意List的全组合算法代码

    这篇文章主要是介绍了.net C# 实现任意List的全组合算法实现代码,需要的朋友可以参考下...2020-06-25
  • 同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输)

    这篇文章主要给大家介绍了关于同时兼容JS和C#的RSA加密解密算法,通过该算法可以对web提交的数据进行加密传输,文中通过图文及示例代码介绍的非常详细,需要的朋友们可以参考借鉴,下面来一起看看吧。...2020-06-25
  • JS实现的随机排序功能算法示例

    这篇文章主要介绍了JS实现的随机排序功能算法,结合具体实例形式分析了javascript常用的排序算法实现技巧,需要的朋友可以参考下...2017-06-15
  • C#常用数据结构和算法总结

    这篇文章主要介绍了C#常用数据结构和算法,这里我们总结了一些知识点,可以帮助大家理解这些概念。...2020-06-25
  • C++实现的O(n)复杂度内查找第K大数算法示例

    这篇文章主要介绍了C++实现的O(n)复杂度内查找第K大数算法,结合实例形式分析了算法的原理以及具体实现方法,需要的朋友可以参考下...2020-04-25
  • c# 实现位图算法(BitMap)

    这篇文章主要介绍了c# 如何实现位图算法(BitMap),文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-11-03
  • 一篇文章带你搞懂Vue虚拟Dom与diff算法

    这篇文章主要给大家介绍了关于Vue虚拟Dom与diff算法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-26
  • R语言关于随机森林算法的知识点详解

    在本篇文章里小编给大家整理的是一篇关于R语言关于随机森林算法的知识点详解内容,有兴趣的朋友们可以跟着学习下。...2021-05-13
  • C++并查集亲戚(Relations)算法实例

    这篇文章主要介绍了C++并查集亲戚(Relations)算法,实例分析了并查集亲戚算法的原理与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-04-25
  • 深入浅析React中diff算法

    React 最为核心的就是 Virtual DOM 和 Diff 算法,diff算法的基础是Virtual DOM,接下来通过本文给大家介绍React中diff算法的相关知识,对React中diff算法感兴趣的朋友跟随小编一起学习下吧...2021-05-19
  • C/C++实现八大排序算法汇总

    这篇文章主要为大家详细介绍了C/C++实现八大排序算法汇总,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
  • 基于稀疏图上的Johnson算法的详解

    本篇文章介绍了,稀疏图上的Johnson算法的详解。需要的朋友参考下...2020-04-25
  • C# URL短地址压缩算法及短网址原理解析

    这篇文章主要介绍了C# URL短地址压缩算法及短网址原理解析,本文重点给出了算法代码,需要的朋友可以参考下...2020-06-25
  • VC++实现选择排序算法简单示例

    这篇文章主要介绍了VC++实现选择排序算法简单示例,代码简洁易懂,有助于读者对数据结构与算法的学习,需要的朋友可以参考下...2020-04-25
  • php回溯算法计算组合总和的实例代码

    在本篇文章里小编给大家整理的是一篇关于php回溯算法计算组合总和的实例代码,有需要的朋友们可以学习参考下。...2021-07-14
  • C#中Hash table的一些操作方法讲解

    今天小编就为大家分享一篇关于C#中Hash table的一些操作方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-06-25
  • JavaScript常用数组算法小结

    在开发项目的过程中,我们经常会需要关于javascript数组的一些算法,比方说数组去重、数组求交集、数组扰乱等等。今天就把个人的汇总整理的算法分享给大家。...2016-02-18