位操作哈希 rotate_hash
2010-12-25 11:06
155 查看
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#include <stdint.h>
uint32_t rotate_hash(char *key, uint32_t len, uint32_t mask)
{
uint32_t hash, i;
for (hash=0, i=0; i<len; ++i)
hash = (hash<<5)^(hash>>27)^key[i];
return hash = (hash ^ (hash>>10) ^ (hash>>20)) & mask; // replace (hash % prime);
}
int main(int argc, char **argv)
{
char name[1024];
int init =0;
if(argc == 2) {
init = atoi(argv[1]);
}
while(gets(name)>0){
int len = strlen(name);
printf("%u\n",rotate_hash(name, len, 0xffffffff));
}
return 0;
}
测试后,冲突率在1/1000. 比time33差一些。
这个hash,出现在《计算机编程艺术》卷3中。
相关文章推荐
- Oracle表连接操作——Hash Join(哈希连接)
- reids的hash哈希数据类型操作
- 第二百九十六节,python操作redis缓存-Hash哈希类型,可以理解为字典类型
- Redis 哈希hash基本操作命令
- Oracle表连接操作——Hash Join(哈希连接)上
- Oracle表连接操作——Hash Join(哈希连接)下
- redis 哈希类型(hash)操作使用
- Oracle表连接操作——Hash Join(哈希连接)
- Oracle表连接操作——Hash Join(哈希连接)
- 4.Python操作Redis:哈希(Hash)
- redis基础简介(二)- hash(哈希)、set(集合)、sorted set(有序集合)以及键操作
- Oracle表连接操作——Hash Join(哈希连接)
- Hash魔法:哈希表的工作原理与常用操作
- Python操作redis系列以 哈希(Hash)命令详解(四)
- “一致性哈希即Consistent Hashing” 和 “libconhash” 的学习感悟
- 偷师某高人的 散列HASH,用来做字符串散列分表HASH操作
- 双端链表实现hash(哈希)
- 跟我学Redis 2.5 Jedis的基本操作之Hash
- redis:hash数据类型与操作
- 【转】哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用