
常用的几个字符串Hash函数
发布日期:2021-07-18 15:07:54
浏览次数:2
分类:技术文章
本文共 2066 字,大约阅读时间需要 6 分钟。
// RS Hash Function unsigned int RSHash (char *str) { unsigned int b = 378551; unsigned int a = 63689; unsigned int hash = 0; while (*str) { hash = hash * a + (*str++); a *= b; } return (hash & 0x7FFFFFFF); } // JS Hash Function unsigned int JSHash (char *str) { unsigned int hash = 1315423911; while (*str) { hash ^= ((hash << 5) + (*str++) + (hash >> 2)); } return (hash & 0x7FFFFFFF); } // P. J. Weinberger Hash Function unsigned int PJWHash (char *str) { unsigned int BitsInUnignedInt = (unsigned int) (sizeof (unsigned int) * 8); unsigned int ThreeQuarters = (unsigned int) ((BitsInUnignedInt * 3) / 4); unsigned int OneEighth = (unsigned int) (BitsInUnignedInt / 8); unsigned int HighBits = (unsigned int) (0xFFFFFFFF) << (BitsInUnignedInt - OneEighth); unsigned int hash = 0; unsigned int test = 0; while (*str) { hash = (hash << OneEighth) + (*str++); if ((test = hash & HighBits) != 0) { hash = ((hash ^ (test >> ThreeQuarters)) & (~HighBits)); } } return (hash & 0x7FFFFFFF); } // ELF Hash Function unsigned int ELFHash (char *str) { unsigned int hash = 0; unsigned int x = 0; while (*str) { hash = (hash << 4) + (*str++); if ((x = hash & 0xF0000000L) != 0) { hash ^= (x >> 24); hash &= ~x; } } return (hash & 0x7FFFFFFF); } // BKDR Hash Function unsigned int BKDRHash (char *str) { unsigned int seed = 131; // 31 131 1313 13131 131313 etc.. unsigned int hash = 0; while (*str) { hash = hash * seed + (*str++); } return (hash & 0x7FFFFFFF); } // SDBM Hash Function unsigned int SDBMHash (char *str) { unsigned int hash = 0; while (*str) { hash = (*str++) + (hash << 6) + (hash << 16) - hash; } return (hash & 0x7FFFFFFF); } // DJB Hash Function unsigned int DJBHash (char *str) { unsigned int hash = 5381; while (*str) { hash += (hash << 5) + (*str++); } return (hash & 0x7FFFFFFF); } // AP Hash Function unsigned int APHash (char *str) { unsigned int hash = 0; int i; 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); }转载地址:https://blog.csdn.net/iteye_21199/article/details/82478682 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.172.111.71]2022年05月22日 09时05分12秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
最新文章
malloc、calloc和realloc区别
2019-12-22 01:06:27
基于flask+react搭建测试用例管理平台
2019-12-22 01:06:24
TypeScript 备忘录:如何在 React 中完美运用?
2019-12-22 01:06:24
浏览器请求服务流程
2019-12-22 01:06:25
往mysql添加数据
2019-12-22 01:06:25
add.php
2022-02-24
update
2022-02-24
html+css实现菜单栏缓慢下拉效果
2022-02-24
RestTemplate模拟HTTP请求-跨项目调用接口的工具类
2022-02-24
深度解析布局利器---Flex布局
2022-02-24
Vue笔记整理(一)
2022-02-24
测试笔记:测试基础
2022-02-24
python的执行
2022-02-24
欧拉函数快速幂扩展欧几里得算法中国剩余定理
2022-02-24
java简单实用的阿里云短信验证码后端API案例
2022-02-24
再谈位运算
2022-02-24
java后端-携带String参数请求URL
2022-02-24
2020最新Java校验手机号是否合规的工具类
2022-02-24
java获取当前月份第一天和最后一天的时间和时间戳
2022-02-24