☰
字符串hash算法
2026/11/6 1:14:05 网站建设 项目流程

hash代码

#include"stdio.h"//ELF Hash算法unsignedintELFHash(char*str){unsignedinthash=0;unsignedintx=0;while(*str){hash=(hash<<4)+(*str++);if((x=hash&0xF0000000L)!=0){hash^=(x>>24);hash&=~x;}}return(hash&0x7FFFFFFF);}//Jenkins Hash算法unsignedintJenkinsHash(char*str,unsignedintlen){unsignedinthash=0;unsignedinti=0;for(i=0;i<len;str++,i++){hash+=(*str)+(hash<<10);hash^=(hash>>6);}hash+=(hash<<3);hash^=(hash>>11);hash+=(hash<<15);return(hash&0x7FFFFFFF);}unsignedintDJBHash(char*str){unsignedinthash=5381;while(*str){hash+=(hash<<5)+(*str++);}return(hash&0x7FFFFFFF);}unsignedintAPHash(char*str){unsignedinthash=0;inti;for(i=0;*str;i++){if((i&1)==0){hash^=((hash<<7)^(*str++)^(hash>>3));}else{hash^=(~((hash<<11)^(*str++)^(hash>>5)));}}return(hash&0x7FFFFFFF);}intmain(){}

对比

下表从核心思路、运算方式、分布特性、适用场景等方面对比上述四种字符串 Hash 算法:

算法核心公式运算方式分布性适用场景
ELF Hash(hash << 4) + c,高 4 位溢出时回卷移位 4 位 + 异或回卷均匀,冲突率低Unix ELF 符号表、文件系统
Jenkins Hashhash += c + (hash << 10),再多次异或移位移位 10/6/11/15,混合充分雪崩效应好通用哈希表、短字符串
DJB Hashhash = hash * 33 + c乘 33(等价于 <<5 后自加)简单高效,分布尚可快速哈希、glibc 字符串
AP Hash奇偶位交替执行不同位移异或移位 7/11/3/5,奇偶分支分布均匀,冲突低通用字符串哈希

选用建议:

  • 追求简单高效、性能优先:DJB Hash。
  • 追求较好分布与通用性:Jenkins Hash或AP Hash。
  • 追求低冲突、偏系统级场景(如符号表):ELF Hash。

四个函数最后都执行hash & 0x7FFFFFFF,只保留低 31 位,保证返回值是非负整数,便于直接作为数组下标或桶编号。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询