Hash 日常摸鱼笔记
本篇文章是Hash在信息学竞赛中的应用的学习笔记,分多次更新(已经有很多坑了)
一维递推
首先是Rabin-Karp,对于一个长度为\(m\)的串\(S\)
\(f(S)=\sum_{i=1}^{m}s[i]*p^{m-i} \mod q\)
那么在一个长度为\(n\)的文本串中找长度为\(m\)的子串,设该子串的首位下标为\(i\)
\(f(S_i)=\sum_{j=i}^{m+i-1}s[j]*p^{(m+i-1)-j} \mod q\)
\(f(S_{i+1})=\sum_{j=i+1}^{m+i}s[j]*p^{m+i-j} \mod q\)
\(f(S_{i+1})=p*[\sum_{j=i}^{m+i-1}s[j]*p^{(m+i-1)-j}]-p^m*s[i]+s[i+m] \mod q\)
\(f(S_{i+1})=p*f(S_i)+s[i+m]-p^m*s[i] \mod q\)
二维扩展
设文本串为二维,维度尺寸分别为\(n1,n2\),模式串也为二维,\(m1≤n1,m2≤n2\)
对于模式串的处理
\(f_2(S)=\sum_{i1=1}^{m1}\sum_{i2=1}^{m2}p_1^{m1-i1}*p_2^{m2-i2}*s[i1][i2] \mod q\)
对于一个文本串中开始下标为\(i1,i2\),尺寸大小为\(m1,m2\)的子串
\(f_2(S_{i1,i2})=\sum_{j1=i1}^{m1+i1-1}\sum_{j2=i2}^{m2+i2-1}p_1^{(m1+i1-1)-j1}*p_2^{(m2+i2-1)-j2}*s[j1][j2] \mod q\)
\(f_2(S_{i1,i2+1})=\sum_{j1=i1}^{m1+i1-1}\sum_{j2=i2+1}^{m2+i2}p_1^{(m1+i1-1)-j1}*p_2^{(m2+i2)-j2}*s[j1][j2] \mod q\)
\(f_2(S_{i1,i2+1})=\sum_{j1=i1}^{m1+i1-1}p_1^{(m1+i1-1)-j1}(p_2*\sum_{j2=i2}^{m2+i2-1}s[j1][j2]*p_2^{(m2+i2-1)-j2}+s[j1][i2+m2]-p_2^{m2}*s[j1][i2]) \mod q\)
\(f_2(S_{i1,i2+1})=p_2*f_2(S_{i1,i2})+\sum_{j1=i1}^{m1+i1-1}p_1^{(m1+i1-1)-j1}*s[j1][i2+m2]-p_2^{m2}\sum_{j1=i1}^{m1+i1-1}p_1^{(m1+i1-1)-j1}*s[j1][i2] \mod q\)
三维扩展
我可去他妈的
动态匹配
1.拼接Hash
比较显然,\(f(S_1+S_2)=p^{len_2}f(S_1)+f(S_2)\)
2.截断Hash
可以看成上式的逆运算,\(f(S_1)=f(S_1+S_2-S_2)=\frac{f(S_1+S_2)-f(S_2)}{p^{len_2}}\)
3.插入Hash
如果在\(i\)后插入,先截去\(i+1\)后的部分,拼接插入部分,再拼接截去部分
4.删去Hash
同理
5.平衡树上维护Hash
\(f(S)=f(S_l)*(size[rc]+1)+f(s)*size[rc]+f(S_r)\)
要点:
1.\(p\)在不同的维度选取不同的数
2.\(q\)选取一个较大素数,至少大于\(n/k\),其中\(n=n1*n2...*nk\)
3.\(p^{i} \mod q ≠ 1,i∈[1,p-2]\)
(所以简单地说就是\(p\)和\(q\)都选大素数)
个人的口胡:
1.对于原字符串的值,可以再多加一层哈希映射,把每个值都映射为均不同与\(p\)和\(q\)的的素数,翻车概率down
2.unordered_map支持的\(O(1)\)操作也许能哈希出奇迹
Hash 日常摸鱼笔记的更多相关文章
- 【FCS NOI2018】福建省冬摸鱼笔记 day3
第三天. 计算几何,讲师:叶芃(péng). dalao们日常不记笔记.@ghostfly233说他都知道了,就盼着自适应辛普森积分. 我计算几何基础不好……然而还是没怎么讲实现,感觉没听什么东西进去 ...
- 【FCS NOI2018】福建省冬摸鱼笔记 day2
第二天. 同学还是不带本子记笔记.dalao. 第二天:图论,讲师:@ExfJoe 全程划水,前面都讲水算法[虽然我可能已经忘记了]什么最短路,Tarjan,最小生成树,2SAT,差分约束啥的,我现在 ...
- 【FCS NOI2018】福建省冬摸鱼笔记 day1
省冬的第一天. 带了本子,笔,一本<算法导论>就去了.惊讶于为什么同学不带本子记笔记. 他们说:“都学过了.”,果然这才是巨神吧. 第一天:数论,讲师:zzx 前几页的课件挺水,瞎记了点笔 ...
- 【FCS NOI2018】福建省冬摸鱼笔记 day6【FJOI 2018】福建省选混分滚蛋记 day1
记录一下day6发生的事情吧. 7:30 到达附中求索碑,被人膜,掉RP. 7:50 进考场,6楼的最后一排的最左边的位置,世界上最角落的地方,没有任何想法. 发现电脑时间和别人不一样,赶快调了一下. ...
- 【FCS NOI2018】福建省冬摸鱼笔记 day5
第五天,也是讲课的最后一天. 数据结构专题,讲师:杨志灿 他的blog我似乎找不到了……以前肯定是在百度博客里面.但是现在百度博客消失了. PPT做的很有感觉,说了很多实用的技巧. 我觉得其实是收获最 ...
- 【FCS NOI2018】福建省冬摸鱼笔记 day4
第四天. 动态规划专题,讲师:闫神 讲了一些DP优化技巧,然而思想难度好大啊……根本没想到能优化那地步,连DP方程都没有呢. 不过有几题我还是想明白了. 讲了单调队列,决策单调性,四边形不等式,斜率优 ...
- 可持久化Treap 赛前摸鱼笔记
1.基本结构 随机化工具 unsigned int SEED = 19260817; //+1s inline int Rand(){ SEED=SEED*1103515245+12345; retu ...
- [日常摸鱼]HDU1724 Ellipse-自适应Simpson法
模板题~ QAQ话说Simpson法的原理我还是不太懂-如果有懂的dalao麻烦告诉我~ 题意:每次给一个椭圆的标准方程,求夹在直线$x=l$和$x=r$之间的面积 Simpson法 (好像有时候也被 ...
- [日常摸鱼]bzoj1257余数之和
题意:输入$k,n$,求$\sum_{i=1}^n k \mod i$ $k \mod i=k-i*\lfloor \frac{k}{i} \rfloor $,$n$个$k$直接求和,后面那个东西像比 ...
随机推荐
- Spring--入门第二天
一.通过工厂方法配置bean Spring 中有两种类型的 Bean, 一种是普通Bean, 另一种是工厂Bean, 即FactoryBean. 工厂 Bean 跟普通Bean不同, 其返回的对象不是 ...
- hdu 4277 USACO ORZ (Dfs)
题意: 给你n个数,要你用光所有数字组成一个三角形,问能组成多少种不同的三角形 时间分析: 3^15左右 #include<stdio.h> #include<set> usi ...
- 第17章-Spring消息
1 异步消息简介 像RMI和Hessian/Burlap这样的远程调用机制是同步的.如图17.1所示,当客户端调用远程方法时,客户端必须等到远程方法完成后,才能继续执行.即使远程方法不向客户端返回任何 ...
- Diameter协议摘要
---------选择同学整理文档 1. 协议概述 Diameter协议主要为应用程序提供认证.鉴权.计费框架,即AAA,并支持本地AAA和漫游场景下的AAA. 1.1. 特点介绍 以前的AAA ...
- JVM调用类的main方法的过程
jvm先装载类,再链接类,再初始化类(以代码的文本顺序执行类变量初始化器.类静态初始化方法或接口的属性(field)初始化器),完成类的初始化后,才执行类的main方法.在链接过程中,可以静态链接(解 ...
- WinForm中TabControl的使用
TabControl和TabPage之间有一个默认颜色的边框,很难去除,需要重写TabControl控件重绘区域 public class FullTabControl : TabControl { ...
- ubuntu14.04,安装Chrome(谷歌浏览器)
Linux:ubuntu14.04 一直都很喜欢谷歌浏览器,进入linux怎么能没有? 安装方法:谷歌浏览器官方下载的ubuntu版本,下载后点击即可安装. 下载地址:http://download. ...
- ASP.NET -- 获取浏览器信息
1. 获取浏览器信息 private void GetBrowserInfo() { StringBuilder sb = new StringBuilder(); sb.AppendLine(str ...
- web渗透测试(上传漏洞)
一句话木马—— 一句话木马短小精悍,而且功能强大,隐蔽性非常好,在入侵中扮演着强大的作用. 黑客在注册信息的电子邮箱或者个人主页等插入类似如下代码: <%execute request(“val ...
- 在虚拟机中连接oracle数据库报错ORA-12154,其他服务器连接无问题
在一台服务器上使用sqlplus登录oracle数据库,cmd->sqlplus->name/passwd@orcl2登录某个数据库用户,提示ORA-12154.使用当前服务器的PLSQL ...