字符串 Hash 的一些应用
字符串 Hash 可以快速的解决一类需要字符串匹配的问题。同时还可以以较小的思维量和代码量通过一些难题。
P3809 【模板】后缀排序,这题的正解显然是 $\mathcal{O}(n\log n)$ 的 SA,但是蒟蒻不会。所以考虑 hash,我们可以在 $\log n$ 的时间内判断两个字符串的字典序大小,方法是二分最长公共前缀,这个前缀的后一位就是第一个不同的地方,直接比较即可。在这里,我们把这个方法作为 sort
的 compare
函数,可以实现 $\mathcal{O}(n \log^2n)$ 的排序算法。在要求较为宽松时可过。
P3805 【模板】manacher,正解显然是马拉车,但是蒟蒻不会。所以考虑 hash,既然是回文串,我们预处理出前后缀的 hash,对于每个点,枚举当其为回文串中点时的最大扩展长度。
啊?这是 $\mathcal{O}(n)$ 的吗?我们考虑答案是只会递增的,所以每次从之前的最大值开始枚举,这样的话枚举次数会依次减少。证明详见 OI-Wiki。
CF1200E Compress Words:相较于上面两题,在这里,hash 就可以作为正解出现了。直接暴力维护当前总的字符串,加入新的字符时计算 hash 值,每新加入一个字符串就暴力枚举匹配长度,进行添加即可。
时间复杂度:枚举长度和处理 hash 都是 $\mathcal{O}(\sum |S_i|)$。
P3538 [POI2012] OKR-A Horrible Poem:我们要求最短循环节,等价于求满足 $\text{hash}(l,r-len)=\text{hash}(l+len,r)$ 并且 $len|(r-l+1)$ 的最小的 $len$,证明如下。
充分条件:由 $\text{hash}$ 值相等可以得到 $S[l,r-len]=S[l+len,r]$,因为 $len|(r-l+1)$ 所以可得一定能分成若干块,那么每一块左移一个块的位置就能与先前的块重合,也就是说任意相邻两个块都一样。必要条件显然。
字符串 Hash 的一些应用的更多相关文章
- [知识点]字符串Hash
1.前言 字符串的几大主要算法都多少提及过,现在来讲讲一个称不上什么算法, 但是非常常用的东西——字符串Hash. 2.Hash的概念 Hash更详细的概念不多说了,它的作用在于能够对复杂的状态进行简 ...
- 【BZOJ-3555】企鹅QQ 字符串Hash
3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1545 Solved: 593[Submit][Statu ...
- POJ 1200 字符串HASH
题目链接:http://poj.org/problem?id=1200 题意:给定一个字符串,字符串只有NC个不同的字符,问这个字符串所有长度为N的子串有多少个不相同. 思路:字符串HASH,因为只有 ...
- LA4671 K-neighbor substrings(FFT + 字符串Hash)
题目 Source http://acm.hust.edu.cn/vjudge/problem/19225 Description The Hamming distance between two s ...
- 各种字符串Hash函数比较(转)
常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法.这些函数使用位运算使得每一个字符都对最后的函数值产生影响.另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎 ...
- 字符串hash + 二分答案 - 求最长公共子串 --- poj 2774
Long Long Message Problem's Link:http://poj.org/problem?id=2774 Mean: 求两个字符串的最长公共子串的长度. analyse: 前面在 ...
- 字符串hash - POJ 3461 Oulipo
Oulipo Problem's Link ---------------------------------------------------------------------------- M ...
- 长度有限制的字符串hash函数
长度有限制的字符串hash函数 DJBHash是一种非常流行的算法,俗称"Times33"算法.Times33的算法很简单,就是不断的乘33,原型如下 hash(i) = hash ...
- hdu 4622 Reincarnation 字符串hash 模板题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4622 题意:给定一个长度不超过2000的字符串,之后有不超过1e5次的区间查询,输出每次查询区间中不同 ...
- [转]各种字符串Hash函数比较
转自:https://www.byvoid.com/zht/blog/string-hash-compare 常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法.这些 ...
随机推荐
- 用Taro写一个微信小程序——引入外部字体
小程序直接用.ttf字体文件,在开发工具看没有问题,但是打包编译会提示这个字体文件打包上传不成功. 一.字体文件转换为css 1.打开https://transfonter.org/ 注意选择Base ...
- APScheduler可能遇到的问题
uWsgi使用多进程模式启动Django项目,因此我们会有多个进程去执行这个定时任务,导致定时任务被重复执行.解决这个问题的方法,我们直接就会想到采用加锁的方式.第一个拿到锁的进程,执行定时任务,其余 ...
- 4-request对象
前端提交数据 必备知识点 前端form表单中action属性,不写默认是当前路由地址 前端form表单中的method属性,不写默认是GET请求 前端页面 templates\register.htm ...
- proc_sys_reset 复位时序
proc_sys_reset 模块时序 下面为仿真时序,这里做一个record , 后面有使用问题可以参考该时序: 点击查看代码 module test( ); bit slowest_sync_cl ...
- 【应用服务 App Service】 App Service Rewrite 实例 -- 限制站点的访问
问题描述 在Azure App Service中,当需要限制某些特殊的情况对其进行访问时候,可以通过IP限制,逻辑代码判断,或者Rewrite规则.通过IP限制则需要知道客户端访问的IP,而通过逻辑代 ...
- 浅入ABP(2):添加基础集成服务
浅入ABP(2):添加基础集成服务 版权护体作者:痴者工良,微信公众号转载文章需要 <NCC开源社区>同意. 目录 浅入ABP(2):添加基础集成服务 定义一个特性标记 全局统一消息格式 ...
- 如何运维多集群数据库?58 同城 NebulaGraph Database 运维实践
图计算业务背景介绍 我们为什么选择 NebulaGraph? 在公司各个业务线中,有不少部门都有着关系分析等图探索场景,随着业务发展,相关的需求越来越多.大量需求使用多模数据库来实现,开发成本和管理成 ...
- C++ //类模板与友元 //全局函数类内实现 -直接在类内声名由于即可 //全局函数类外实现 -需要提前让编译器知道全局函数的存在
1 //类模板与友元 2 //全局函数类内实现 -直接在类内声名由于即可 3 //全局函数类外实现 -需要提前让编译器知道全局函数的存在 4 5 #include <iostream> 6 ...
- netcore 图片缩略图
/// <summary> /// 取小写文件名后缀 /// </summary> /// <param name="name">文件名< ...
- vetur 和 volar 不要一起装 - vscode插件 已解决
vetur 和 volar 不要一起装 - vscode插件 会有各种稀奇古怪的问题. 解决方案 利用 vscode 工作区 新建工作区 然后全局 将 volar 禁用工作区,起一个新的vue3项目, ...