本篇文章是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 日常摸鱼笔记的更多相关文章

  1. 【FCS NOI2018】福建省冬摸鱼笔记 day3

    第三天. 计算几何,讲师:叶芃(péng). dalao们日常不记笔记.@ghostfly233说他都知道了,就盼着自适应辛普森积分. 我计算几何基础不好……然而还是没怎么讲实现,感觉没听什么东西进去 ...

  2. 【FCS NOI2018】福建省冬摸鱼笔记 day2

    第二天. 同学还是不带本子记笔记.dalao. 第二天:图论,讲师:@ExfJoe 全程划水,前面都讲水算法[虽然我可能已经忘记了]什么最短路,Tarjan,最小生成树,2SAT,差分约束啥的,我现在 ...

  3. 【FCS NOI2018】福建省冬摸鱼笔记 day1

    省冬的第一天. 带了本子,笔,一本<算法导论>就去了.惊讶于为什么同学不带本子记笔记. 他们说:“都学过了.”,果然这才是巨神吧. 第一天:数论,讲师:zzx 前几页的课件挺水,瞎记了点笔 ...

  4. 【FCS NOI2018】福建省冬摸鱼笔记 day6【FJOI 2018】福建省选混分滚蛋记 day1

    记录一下day6发生的事情吧. 7:30 到达附中求索碑,被人膜,掉RP. 7:50 进考场,6楼的最后一排的最左边的位置,世界上最角落的地方,没有任何想法. 发现电脑时间和别人不一样,赶快调了一下. ...

  5. 【FCS NOI2018】福建省冬摸鱼笔记 day5

    第五天,也是讲课的最后一天. 数据结构专题,讲师:杨志灿 他的blog我似乎找不到了……以前肯定是在百度博客里面.但是现在百度博客消失了. PPT做的很有感觉,说了很多实用的技巧. 我觉得其实是收获最 ...

  6. 【FCS NOI2018】福建省冬摸鱼笔记 day4

    第四天. 动态规划专题,讲师:闫神 讲了一些DP优化技巧,然而思想难度好大啊……根本没想到能优化那地步,连DP方程都没有呢. 不过有几题我还是想明白了. 讲了单调队列,决策单调性,四边形不等式,斜率优 ...

  7. 可持久化Treap 赛前摸鱼笔记

    1.基本结构 随机化工具 unsigned int SEED = 19260817; //+1s inline int Rand(){ SEED=SEED*1103515245+12345; retu ...

  8. [日常摸鱼]HDU1724 Ellipse-自适应Simpson法

    模板题~ QAQ话说Simpson法的原理我还是不太懂-如果有懂的dalao麻烦告诉我~ 题意:每次给一个椭圆的标准方程,求夹在直线$x=l$和$x=r$之间的面积 Simpson法 (好像有时候也被 ...

  9. [日常摸鱼]bzoj1257余数之和

    题意:输入$k,n$,求$\sum_{i=1}^n k \mod i$ $k \mod i=k-i*\lfloor \frac{k}{i} \rfloor $,$n$个$k$直接求和,后面那个东西像比 ...

随机推荐

  1. Ubuntu16.04 ARM平台移植libcurl curl-7.63.0

    libcurl是免费的轻量级的客户端网络库,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS,POP3, P ...

  2. Python3 Scrapy + Selenium + 阿布云爬取拉钩网学习笔记

    1 需求分析 想要一个能爬取拉钩网职位详情页的爬虫,来获取详情页内的公司名称.职位名称.薪资待遇.学历要求.岗位需求等信息.该爬虫能够通过配置搜索职位关键字和搜索城市来爬取不同城市的不同职位详情信息, ...

  3. 专题2-通过按键玩中断\第1课-中断处理流程深度剖析-lesson1

    中断概念 1.中断生命周期 串口先产生一个事件,该事件传送到中断控制器里面,中断控制器会进行相应过滤,能通过过滤,那么就交给CPU去处理. 2.中断源 2440芯片手册 6410芯片手册 3.中断过滤 ...

  4. 2.8.2 并发下的ArrayList,以及源码分析

    package 第二章.并发下的ArrayList; import java.util.ArrayList;import java.util.List; /** * Created by zzq on ...

  5. (转)MongoDB入门分享-笔记整理精选

    原文地址:http://www.cnblogs.com/Kummy/p/3372729.html 最近在学习MongoDB,怕以后忘记,自己做了一个整理,给不知道的小伙伴一起分享学习一下. 第一步&g ...

  6. Entity Framework快速入门--直接修改(简要介绍ObjectContext处理机制)

    在介绍Entity Framework的修改实体到数据库的方法之前呢,我们先简要的介绍一下ObjectContext的处理机制. 1.ObjectContext的处理机制 ObjectContext是 ...

  7. 关于 XML 字段内容查询

    找到个总结相当好的知识点的归纳,记在自己的博客里也方便查询 /* sql xml 入门:     --by jinjazz     --http://blog.csdn.net/jinjazz     ...

  8. arp欺骗进行流量截获-2

    上一篇讲了原理,那么这一篇主要讲如何实现.基本上也就是实现上面的两个步骤,这里基于gopacket实现,我会带着大家一步步详细把每个步骤都讲到. ARP 欺骗 首先就是伪造ARP请求,让A和B把数据包 ...

  9. StackOverflow: 你没见过的七个最好的Java答案

    StackOverflow发展到目前,已经成为了全球开发者的金矿.它能够帮助我们找到在各个领域遇到的问题的最有用的解决方案,同时我们也会从中学习到很多新的东西.这篇文章是在我们审阅了StackOver ...

  10. Multimap的初使用

    之前不知道这个类型使用,在朋友的推荐下进行了个实际操作. 类似这种查询,我需要将他们归类拿出来,如果招以前那么拿的话可能要套挺多个循环的. 首先根据查询得到一个 List<Map<Stri ...