字符串hash

哈希——字符串哈希 哈希算法 阅读详情

给出N个只有小写字母的字符串,求其中不同的字符串的个数。 

#include<iostream> 
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

const int mod=1000000007;
const int p=10000019;

vector<long long> ans;

long long hashFunc(string str)
{
	long long H=0;
	for(int i=0;i<str.length();i++)
	{
		H=(H*p+str[i]-'a')%mod;
	}
	return H;
}

int main()
{
	string str;
	while(getline(cin,str),str!="#")
	{
		long long id=hashFunc(str);
		ans.push_back(id);
	}
	
	sort(ans.begin(),ans.end());
	int count=0;
	for(int i=0;i<ans.size();i++)
	{
		if(i==0||ans[i]!=ans[i-1])
		{
			count++;
		}
	}
	
	cout<<count<<endl;
	return 0;
}

 

字符串哈希算法简单入门学习 字符串哈希算法 字符串哈希,最著名的就是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

字符串哈希算法

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

a921893396的博客 5737

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的博客 1170

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

字符串哈希详解及例题

Air_thc的博客 1998

字符串匹配:如何借助哈希算法实现高效字符串匹配?

哈希算法是一种将任意长度的输入数据转换为固定长度输出数据的算法。这个输出数据通常被称为哈希值或散列值。确定性:对于相同的输入数据,总是产生相同的哈希值。快速计算:可以在相对较短的时间内计算出哈希值。不可逆性:很难从哈希值反向推导出原始输入数据。常见的哈希算法有 MD5、SHA-1、SHA-256 等。

yonggeit的博客 3281

【水文】calico-node 启动失败 Init:CrashLoopBackOff

Defaulted container "calico-node" out of: calico-node, upgrade-ipam (init), install-cni (init), mount-bpffs (init) Error from server (BadRequest): container "calico-node" in pod "calico-node-4j7td" is waiting to start: PodInitializing

大健的日常的博客 1万+

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

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

2301_81354767的博客 774

AI辅助编程实战指南:从提示工程到开发环境搭建

大型语言模型(LLM)作为现代人工智能的核心技术,通过自然语言理解和生成能力,正在深刻改变软件开发范式。其原理基于海量代码和文本数据的预训练,能够根据上下文生成符合逻辑的代码片段和解决方案。这一技术的核心价值在于将开发者从繁琐的语法和基础逻辑编写中解放出来,提升开发效率与代码质量。在实际工程应用中,AI辅助编程已广泛应用于日常编码、代码调试、文档生成和系统设计等场景。其中,提示工程(Prompt Engineering)和检索增强生成(RAG)是两项关键技术:前者通过结构化、角色化的指令设计,引导AI生成更

weixin_26775679的博客 621

哈希表和字符串哈希算法

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

buaichifanqie的博客 1230

RT-Thread NANO V4.1.1 在Cortex-M0上移植踩坑记:解决内存分配宏导致的线程创建失败

本文详细记录了RT-Thread NANO V4.1.1在Cortex-M0平台移植过程中遇到的内存分配宏配置问题,导致线程创建失败的解决方案。通过分析内存管理算法宏定义,将RT_USING_SMALL_MEM替换为RT_USING_SMALL_MEM_AS_HEAP,成功解决了线程创建问题,为开发者提供了实用的移植经验。

weixin_29189373的博客 307

Ansible 面板工具之AWK ( Anssible Tower )界面介绍

整理这部分笔记博文内容为AWX和UI 界面的简单介绍理解不足小伙伴帮忙指正傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波这里AWX使用的是最新的版本AWX 21.7.0目前最新版是3.8.6,博客中的版本为3.5.0对于Redhat的,官网上看到在 2022 年 11 月之后不在维护了,改版之后现在叫,感兴趣小伙伴可以了解下虽然有AWX是。

山河已无恙 1304

字符串哈希——Hash

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

qq_46197193的博客 534

GlobalBuildingAtlas 建筑物白模数据下载

GlobalBuildingAtlas基于OSM开源数据构建全球建筑物3D白模,提供在线浏览和下载服务。官方资源包括GitHub项目地址和TUM数据库链接,支持行政区划检索建筑物数据。

一醉千秋的专栏 541

字符串哈希(BKDR_hash)

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

带你回江南的博客 1357

QGis软件 —— 1、Windows10下载安装QGis及插件

QGis —— 1、Windows10下载安装QGis及插件

5160

华为OD机试双机位C卷 - 高矮个子排队 (C++/Py/Java/Js/Go/C)

华为OD机试双机位C卷 高矮个子排队,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 高矮个子排队。

qq_45776114的博客 2160

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

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

gitblog_00195的博客 438

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

不语的博客 1387

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

字符串哈希(BKDR_Hash)

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

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

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

字符串哈希(HASH)

一个字符串的哈希值。

cgl18973281319的博客 3295

字符串哈希(Hash)

所谓字符串哈希就是构造一个数字使之唯一代表一个字符串。 构造方法: 假如给你一个数字1166,形式上你只知道它只是1和6的组合,但你知道它代表的实际大小1*10^3+1*10^2+6*10^1+6*10^0。 同理,给你一个字符串,要把它转换为数字,就可以先把每一个字符都先对应一个数字,然后把它们按照顺序乘以进制的幂进行相加。 如abcd,我们取各个字母的ASCII码值减去a的ASCI...

Gaoithe的博客 8998

【算法学习】字符串哈希(Hash)

什么是字符串Hash 构造字符串Hash 1)自然溢出方法 2)单Hash方法 3)双Hash方法 4)三种不同的构造方法的对比 获取子串的Hash O(1) 1)例子 2)公式 具体的题目例子 1)题目链接 2)题意 3)解题分析 4)AC代码(自然溢出 C++) 5)AC代码(单Hash C++) 6)AC代码(双Hash C++) 什么是字符串Hash ...

Mikchy的博客 4万+

字符串哈希算法的应用(超级实用)

字符串哈希的方法: 在刷一些字符串的题目中是非常实用的,是一个不得不掌握的“套路”。 下面讲述字符串哈希的方法。(主要是利用字符串的前缀哈希) 例如 : 字符串 str = “ABCD”; 第一步: 将上面的字符 映射成从1开始的 A - 1; B - 2 … 第二步: 将上面的字符串看成是一个P进制的数 (1234)p 。 这里的P 是一个经验值 : 131 或者是13331. 第三步: 然后将上面的P进制的数转换成 十进制的数字。 然后mod 一个数字264. 为了保证不冲突。 (1 * P..

刘小雨的博客 1022

字符串哈希详解,单hash,双hash,滚动哈希

关于 M,由于 M 我们要取一个比较大的质数,而出题人往往对一些比较经典的质数如1e9 + 7、998244353等构造一堆卡哈希的数据,所以我们往往通过捕获一个随机数,根据随机数往下再取质数,来尽可能避免被hack。,多了也没必要,字符串哈希往往是作为算法优化的某一步骤,如果双hash都能被卡,说明题目可以采取其它优化策略,如:AC自动机、SA等。显然,有时会存在多个不同的字符串哈希值相同的情况,我们通常的处理策略是巧妙设置p和M的值,往往取p为某个质数,M为某个大质数。但是,字符串哈希始终是有风险的。

EQUINOX1的博客 4329
上一篇: 完全背包【动态规划】
下一篇: 最长公共子串的长度
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值