ElfHash算法与HashPJW算法
来源:互联网 发布:交管12123软件下载 编辑:程序博客网 时间:2024/06/08 05:54
最近遇到了两个hash算法,研究了一下,记个笔记。
如有错误望批评指正。
ElfHash算法
unsigned long ElfHash ( const unsigned char*name ){ unsigned long h = 0, g; while ( *name ) { //h左移4位,并在最低8位加上name指向的字符 h = ( h << 4 ) + *name++; //如果最高四位不为零,即h存放字符达到7个,第8个字符将无法存放。g存放h最高4位(29-32位) if ( g = h & 0xF0000000 ) { //h的5-8位与g的最高四位按位异或 h ^= g >> 24; } //清空h的最高四位 h &= ~g; } //返回h return h;}
思路:
每次读入一个8位的字符;
先将原h左移4位,再加上读入的字符;
判断最高4位是否为0000(一般在第7次循环时候最高四位出现不全为零的情况);
若不全为0,则用最高4位与第5-8位进行杂糅;
然后将最高4位改写为0000;
然后进行下一次循环,直至到达字符串的结尾。
一共进行了两种杂糅:
第一种,unsigned char型字符占8位,而h每次左移4位,这样每次读入的新字符的最高4位会与5-8位进行杂糅;
第二种,当循环执行到第7次或第7次之后,最高4位不全为0时,用最高4位和5-8位进行杂糅。
HashPJW算法
//int的位数与char位数的乘积#define BITS_IN_int ( sizeof(int) * CHAR_BIT )//BITS_IN_int的3/4#define THREE_QUARTERS ((int) ((BITS_IN_int * 3) / 4))//BITS_IN_int的1/8#define ONE_EIGHTH ((int) (BITS_IN_int / 8))/*0按位取反位 1111 1111 1111 1111 1111 1111 1111 1111 *右移ONE_EIGHTH位 0000 1111 1111 1111 1111 1111 1111 1111 *再按位取反为 1111 0000 0000 0000 0000 0000 0000 0000 */#define HIGH_BITS ( ~((unsigned int)(~0) >> ONE_EIGHTH )) unsigned int HashPJW ( const char * datum ){ unsignedint hash_value, i; //循环读入datum for( hash_value = 0; *datum; ++datum ) { //hash_value左移4位并在后8位加上datum hash_value= ( hash_value << ONE_EIGHTH ) + *datum; //如果最高4位不全为零,即hash_value存放字符达到7个,第8个字符将无法存放。 if (( i = hash_value & HIGH_BITS ) != 0 ) { //hash_value与自己右移24位的结果按位异或并将最高4位全置为0 //结果存入hash_value hash_value= ( hash_value ^ ( i >>THREE_QUARTERS )) & ~HIGH_BITS; } } return( hash_value );}
思路:
每次读入一个8位的字符;
先将原h左移4位,再加上读入的字符;
判断最高4位是否为0000(一般在第7次循环时候最高四位出现不全为零的情况);
若不全为0,则用最高8位与第1-8位进行杂糅;
然后将最高4位改写为0000;
然后进行下一次循环,直至到达字符串的结尾。
一共进行了两种杂糅:
第一种,unsigned char型字符占8位,而h每次左移4位,这样每次读入的新字符的最高4位会与5-8位进行杂糅;
第二种,当循环执行到第7次或第7次之后,最高4位不全为0时,用最高8位和1-8位进行杂糅。
两算法唯一区别:
第二种杂糅进行时,ElfHash算法杂糅最高4位和第5-8位;HashPJW算法杂糅最高8位和第1-8位
阅读全文
0 0
- ElfHash算法与HashPJW算法
- ELFHash 算法
- ELFHash 算法
- 哈希表的ELFhash算法
- 著名的ELFhash算法
- ELFHash算法解释
- ELFHash算法解释
- ELFHash算法解释
- ELFHash算法解释
- ELFHash算法解释
- ELFHash字符串Hash算法
- ELFHash算法解释
- ELFhash - 优秀的字符串哈希算法
- 再来一个复习一下,ELFhash算法和hash table
- HDU 1800 Flying to the Mars ELFhash算法
- ELFhash
- ELFhash
- HDU 1800 Flying to the Mars 【字符串hash(ELFhash算法) / map】
- 复制文本
- TabLayout设置指示器的宽度
- OpenJ_Bailian
- codevs 1010 过河卒 dfs
- 快速排序之最简单的阐述
- ElfHash算法与HashPJW算法
- 关于tcpip协议栈,tcpudp
- 混淆矩阵以及ROC图像
- 用vue写一个商城的上货组件(简单易懂版,50行js实现效果)
- [iOS] 解决MMDrawController与scrollView手势共存问题
- CRM Common Library
- React 入门实例教程
- KMP 算法(1):如何理解 KMP
- 通过css让标签左右垂直居中的几种