各种字符串hash

哈希——字符串哈希 哈希算法 阅读详情
unsigned int SDBMHash(char *str){
 	unsigned int hash = 0; 
 	while (*str) { 
 	// equivalent to:
 	 	hash = 65599*hash + (*str++);
 	 	 hash = (*str++) + (hash << 6) + (hash << 16) - hash; 
 	  } 
    return (hash & 0x7FFFFFFF);
    } 
// 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);
} 
// 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);
}

字符串哈希算法简单入门学习 字符串哈希算法 字符串哈希,最著名的就是BKDRHash,也就是将字符串变成数值,并且最后变成的数值是一个P进制的数(一班取131或者13331),一般来说P最好为素数.然后我们之所以需要前缀和,是因为我们这道题目是求一个区间的字符串,又因为是哈希表,所以我们得求出区间哈希和,又因为是是区间和,所以我们得用前缀和求O(n)预处理,来实现和哈希一般的O(1)常数级别查询.这种Hash常用,且... 阅读详情

相关推荐

字符串为键的自定义哈希表(暴雪字符串哈希算法)

这是个在暴雪字符串哈希算法基础上实现的哈希表。在代码实现上有一定优化。 设计上: 1)加密表是足够长的(unsigned long)无符号型数组。数组的值是由算法计算的固定的一些值。加密表是用来计算字符串(在某种子的情况下)的哈希值。 2)哈希值是字符串(大写)的所有的字符的ascii码相关的。使用单向散列函数,从概率上认为,不同字符串的3种不同的种子的3个哈希值不会是都是相同的。(计算的是10的22.3次方分之一的概率) 3)每个节点有3个hash值(hash1,hash2,hash3),hash1 是寻

陈嘉怡的专栏 4338

编程参考 - 如何计算字符串的哈希值

字符串的哈希值是什么?在C++,Java等编程语言中,有一种hashmap的数据结构,存储一对key / value,分别是两种对象。为了加快存取的速度,键值key对象会被转换成一个hash值,一个整数。一般来讲,可以将任何对象转化成一个固定整数值。比如,key和value都是字符串,那就会将key的字符串转换成整数值,作为索引,这样查找hashmap数据结构就会更快,而不用使用其他遍历方法。那这里说的将字符串转化或简化成一个数字的方法,就是计算一个字符串的哈希值。期望的要求如下:1,要保证同样的字符串,每

guoqx的专栏 4046

181字符串哈希【哈希算法】

字符串哈希把不同的字符串映射成不同的整数。 1.把字符串映射成一个p进制数字。 对于一个长度为n的字符串s, 这样定义Hash函数: 例如,字符串abc,其哈希函数值为ap^2+bp^1+c 即97×131^2+98×131^1+99 2.如果两字符串不一样,Hash函数值却一样,这样的现象称为哈希碰撞。 3.解决哈希碰撞的方法: 巧妙设置p和M的值,保证p与M互质。p通常取质数131或13331, M通常取大整数2^64,把哈希函数值h定义为ULL,超过则自动溢出,等价于取模。 1.求一个字符串的哈希值

lybc2019的博客 1171

java字符串计算hash值

Java中字符串的hash值可以通过String类的hashCode()方法计算得到。这个方法返回的是一个int类型的整数,表示字符串的hash值。具体实现方式是将字符串中每个字符的Unicode码值相加,并乘以一个固定的常数31,最后得到的结果就是字符串的hash值。需要注意的是,由于hash值可能出现冲突,因此不能完全依赖于hash值来判断字符串是否相等。如果需要判断字符串是否相等,应该使用equals()方法来比较。

还在活水泥的未来包工头 2681

科研指南:IEEE期刊LaTeX/Word模板下载与使用全解析

本文详细解析了IEEE期刊LaTeX/Word模板的下载与使用技巧,帮助科研人员高效完成论文排版。从官方模板获取入口到LaTeX文档结构配置,再到Word样式管理与常见问题解决方案,全面覆盖投稿准备的关键步骤。特别针对数学公式、参考文献和图片处理等难点提供实用建议,助力学术写作规范化。

weixin_28396629的博客 567

FineReport SQL查询分页

打开模板>模板web属性>分页预览设置,选择为该模板单独设置,将默认的工具栏按钮全部清除掉,然后依次添加两个自定义按钮,一个邮件按钮,两个自定义按钮,一个Word格式,一个PDF按钮。如下所示:注:使用具体格式按钮,如邮件、Word格式、PDF按钮是为了JS直接使用控件名称获取空间方便修改其内容;

lep的博客 2430

哈希算法(Java版)

哈希碰撞是不能避免的,因为输出的字节长度是固定的,String的hashCode()输出是4字节整数,最多只有4294967296种输出,但输入的数据长度是不固定的,有无数种输入。在用户输入原始口令后,系统计算用户输入的原始口令的MD5并与数据库存储的MD5对比,如果一致,说明口令正确,否则,口令错误。因为相同的输入永远会得到相同的输出,因此,如果输入被修改了,得到的输出就会不同。然后我们只需要自己计算一下本地文件的哈希值,再与官网公开的哈希值对比,如果相同,说明文件下载正确,否则,说明文件已被篡改。

weixin_52572813的博客 2543

Godot 4.x 实现 JRPG 回合制战斗系统:架构、状态机与实战优化

游戏开发中,状态机是管理复杂逻辑流转的核心设计模式,尤其在回合制战斗这类事件驱动的场景中。其原理是通过定义有限的状态和明确的转移条件,来控制系统在不同阶段的行为,从而实现清晰、可维护的流程控制。这项技术的价值在于能够将杂乱的条件判断代码结构化,降低模块间的耦合度,提升代码的可读性和可扩展性。在游戏开发领域,状态机广泛应用于角色AI、UI流程、战斗系统等场景。本文以Godot引擎为例,深入探讨如何运用节点与信号驱动架构,构建一个健壮的JRPG(日式角色扮演游戏)回合制战斗系统。内容涵盖从核心的**状态机**设

weixin_33749242的博客 500

java字符串hash算法_Java常用HASH算法总结【经典实例】

本文实例讲述了Java常用HASH算法。分享给大家供大家参考,具体如下:/*** Hash算法大全* 推荐使用FNV1算法* @algorithm None* @author Goodzzp 2006-11-20* @lastEdit Goodzzp 2006-11-20* @editDetail Create*/public class HashAlgorithms{/**//*** 加法has...

weixin_31362539的博客 2985

SECS/GEM协议中的关键指令详解:从S1F1到S9F9的完整指南

本文详细解析了SECS/GEM协议中从S1F1到S9F9的关键指令,涵盖设备状态管理、控制诊断、报警处理等核心功能。通过实际案例和调试技巧,帮助开发者掌握半导体制造设备通信标准,解决SECS/GEM协议在实际工程应用中的通讯难题,提升生产线智能化水平。

weixin_26899659的博客 399

python特征选择pso_【来点干货】机器学习中常用的特征选择方法及非常详细的Python实例...

花费了很长时间整理编辑,转载请联系作者授权,违者必究。特征选择(Feature selection)是在构建预测模型的过程中减少输入变量的一个过程。它是机器学习中非常重要的一步并在很大程度上可以提高模型预测精度。这里我总结了一些机器学习中常见的比较有用的特征选择方法并附上相关python实现code。希望可以给大家一些启发。首先,我们为什么要进行特征选择呢?它有以下几个优点:减少过拟合:冗余数据常...

weixin_39927158的博客 1165

java字符串hash算法_Hash算法大全(java实现)

packagecom.conan;/***Hash算法大全*推荐使用FNV1算法**@algorithmNone*@authorGoodzzp2006-11-20*@lastEditGoodzzp2006-11-20*@editDetailCreate*/publicclassHashAlgorithms{/***加法hash**@paramkey*...

weixin_35693014的博客 2176

反激电源反馈环路设计:从TL431+PC817原理到动态补偿实战

本文深入解析了反激电源中由TL431和PC817构成的经典反馈环路设计。从静态工作点计算到动态补偿实战,详细阐述了如何通过Type II补偿网络优化环路稳定性与动态响应,并分享了应对光耦CTR离散性、布局噪声等常见调试难题的实用技巧,帮助工程师设计出高性能、高可靠的开关电源。

moon9的博客 703

字符串哈希算法

哈希算法 字符串的哈希算法,通俗的理解,就是将一个字符串,转化成整数 原来我们进行字符串匹配的时候,就是一个个去匹配,那么时间复杂度是o(n),如果转化成数字,去匹配那么时间复杂度会变成o(1)。 哈希算法的引入 首先联想一下二进制数,对于任意一个二进制数,我们将它化为10进制的数的方法如下(以二进制数1101101为例): 1101101=1 * 2 ^ 6+1 * 2 ^ 5+0 * 2 ^ ...

a921893396的博客 5737

前端使用二开Thingsboard一、二、三事(四)-部件库

以项目实战为基础,逐步介绍前端在thingsboard系统二次开发中的一些注意事项以及一些thingsboard一些页面功能讲解,为前端人员开发使用thingsboard提供一种可靠思路,打造一个完美的物联网系统。

weixin_43163457的博客 741

BME688传感器原理图设计,已量产(环境传感器)

在便携式空气质量监测、可穿戴健康设备这类低功耗场景中,BME688 这类集成了 VOC、温湿度、气压的四合一 MEMS 传感器越来越受欢迎 —— 它体积小、功耗低,刚好匹配便携设备的需求。但这类小信号传感器对电源噪声、电平匹配的要求很细,今天结合实际项目里的一款 BME688 接口电路,聊聊硬件设计的关键细节。

不脱发的程序猿 516

算法---哈希及其在字符串中的应用(字符串hash)

字符串哈希详解及例题

Air_thc的博客 1999

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

字符串哈希算法-斤斤计较的小Z

现在给出两个串 S1,S2(只有大写字母),求 S1 在 S2 中出现了多少次。将字符串看作一个多项式,每个字符的 ASCII 值作为系数,基数 b 作为变量。由于哈希值的范围有限,不同的字符串可能会映射到相同的哈希值(哈希冲突)。通过预处理前缀哈希值,可以在 O(1) 时间内计算任意子串的哈希值。为了快速计算任意子串的哈希值,字符串哈希算法通常需要预处理字符串的。通过选择合适的基数 b 和模数 M,可以尽量减少哈希冲突的概率。:尽可能减少哈希冲突,即不同的字符串映射到不同的哈希值。

2301_81354767的博客 774

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

哈希表和字符串哈希算法

哈希表(Hash Table)是一种数据结构,它可以通过一个哈希函数将键(key)映射到存储位置,从而实现高效的数据查找、插入和删除操作。哈希表的特点是能够在常数时间(O(1))内完成查找和更新,前提是哈希冲突处理得当。

buaichifanqie的博客 1230

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

字符串哈希——Hash

字符串哈希 字符串哈希,用通俗点的说法就是将一个字符串转换成一个整数,而且用哈希转换出来的整数,不同的字符串,不出意外整数也不一样(存在极少的情况一样),从而更方便地确定某个字符串是否重复出现过。 基本思想: 假设一个字符串:abcdabcd; 将整个字符串看成一个p(p一般取131或者13331比较好,可以减少冲突的概率)进制数,将a->z看成1->26;然后abcdabcd就变成了...

qq_46197193的博客 534

djb2哈希算法内部揭秘:map哈希表库map_hash字符串哈希原理详解

**map** 是一个面向 C 语言的类型安全哈希表库,它的字符串哈希由 `map_hash` 函数实现,内核正是大名鼎鼎的 **djb2 哈希算法**——只用一个整型变量和一条“移位 + 异或”语句,就完成从键名到哈希桶的映射。本文带你逐行拆解 map_hash 字符串哈希原理,看懂 djb2 算法为什么又快又稳。 ## 一、什么是 djb2 哈希算法 djb2 由计算机科学家 Dan Be

gitblog_00195的博客 438

字符串哈希(BKDR_hash)

当我们要判断两个字符是否相等时,如S1="abc",S2=“abb”。如果我们从头到尾逐个比较,则时间复杂度为O(m)。 这里我们就要用到字符串哈希来降到O(1)。 字符串哈希入门 说得通俗一点,字符串哈希实质上就是把每个不同的字符串转成不同的整数。 为什么会有这样的需要呢?很明显,存储一个超长的字符串和存储一个超大但是能存的下的整数,后者所占的空间会少的多,但主要还是为了方便判断一个字符串是否出现过,这是最基础的部分。 当然也很容易想到,如果有不同的字符串转成同一个整数,那么区分功能就基本废掉 ,所以我

带你回江南的博客 1357

字符串哈希(BKDR_Hash)

详讲BKDR_Hash,并用C语言实现简版代码

日常记录,挨打要立正! 9765

字符串哈希(HASH)

一个字符串的哈希值。

cgl18973281319的博客 3295

字符串哈希算法详解:原理、实现与应用

字符串哈希是一种高效处理字符串匹配和比较的技术,它通过将字符串映射为一个唯一的数值(哈希值),从而在O(1)时间内完成子串的比较。适用于需要频繁比较子串的场景,比直接暴力匹配高效得多。如果需绝对准确,可双哈希(用两个不同的P计算)。PP 是一个质数(通常取131或13331)。MM 是一个大数(如 264264,代码中用。的工作原理,并通过流程图逐步解析其执行过程。:预计算幂次,用于后续子串哈希计算。(比较哈希值而非原始字符串)。是质数,保证哈希分布均匀。(时间复杂度O(1))。常用的字符串哈希方法是。

不语的博客 1387
上一篇: cf 160 div2 A python搞的水题一枚
下一篇: C++&&Mysql&&codeblocks
Java_beginer1
博客等级 码龄16年 22粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值