字符串hash以及大问题_第1页
字符串hash以及大问题_第2页
字符串hash以及大问题_第3页
字符串hash以及大问题_第4页
字符串hash以及大问题_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1Bypeterpan

字符串hash简介&

有关字符串hash的7个问题!字符串hash关于字符串hash,就一句话:

把字符串有效地转化为一个整数在计算机里,用的是二进制编码。在很多语言里,都是用数字作为数组的下标。因为用数字来存储、表达一个object非常方便。如果能有一种算法,把每个字符串有效地、”唯一”的映射到每个“不同”的整数,我们就能很好的处理字符串。hash函数现在我们希望找到一个hash函数,使得每一个字符串都能够映射到一个整数上比如hash[i]=(hash[i-1]*p+idx(s[i]))%mod字符串:abc,bbc,aba,aadaabac字符串下标从0开始先把a映射为1,b映射为2,c->3,d->4,即idx(a)=1,idx(b)=2,idx(c)=3,idx(d)=4;好!开始对字符串进行hashhash函数假设我们取p=13,mod=101先把abc映射为一个整数hash[0]=1,表示a映射为1hash[1]=(hash[0]*p+idx(b))%mod=15,表示ab映射为

15hash[2]=(hash[1]*p+idx(c))%mod=97这样,我们就把abc映射为97这个数字了。hash函数用同样的方法,我们可以把bbc,aba,aadaabac都映射到一个整数用同样的hash函数,得到如下结果abc->97bbc->64aba->95aadaabac->35那么,我们发现,这是一个字符串到整数的映射hash函数这样子,我们就可以记录下每个字符串对应的整数,当下一次出现了一个已经出现的字符串时,查询整数是否出现过,就可以知道

字符串是否重复出现。现在要判断两个字符串是否一致,怎么办呢?直接用它们的hash值判断即可,若hash值一致,则认为字符串一致;

若hash值不一致,则认为是不同的字符串。hash我们要判断两个字符串是否一致,没有那么麻烦,直接先判断长度是否一致,然后再判断每个对应的字符是否一致即可。但,如果要判断多个字符串里有多少个不同的字符串,怎么办呢?两两字符串都进行比较?时间复杂度太高把每个字符串hash成一个整数,然后把所有整数进行一个去重操作,即可知道答案了。我们来具体看下这个问题。关于hash的简单问题问题:给N个字符串,每个字符串长度不超过100,问这些字符串里有多少个不同的字符串?即相同字符串只取一个,最后剩下多少字符串?数据范围:1=<N<=100000字符集:小写英文字母(a-z)输入和输出Input第一行输入一个整数N接下来N行输入N个字符串,每个字符串长度不超过100Output输出一个整数,表示有多少个不同的串。样例Sa岸mp墨le客I粥np赏ut7aa示aa耻aab检abb晋aab脆aab找cd脏ebb浮aSa陪mp狗le斥O亮ut凉pu旗t4解释伞:很毯显然介,左蓄边字鬼符串阴集去腾重后摆只剩4个字瞧串aa仓aa汇a,ab谅abb矿a,ab梢cd剑e解题泪方法销:ha摸sh用ha舌sh来做.我们把每倚个字碧符串ha仁sh为一若个整漆数,这谱样每剑个整璃数都酬表示贿成一柄个字待符串把N个字佛符串尼存下虫来,排个繁序,欢去重,剩筝下多真少个沿整数续,就牛表示节去重胁后有满多少贼个字浙符串当然括,也康可以列用字凉典树蛮来解吵。但捷字典虚树耗乳内存贫会比ha寄sh大得愈多ha燥sh算法彼的问至题!我们森想,求刚才担给出铃的ha触sh函数ha兄sh忍[i屠]=坐(h麦as怀h[闷i-窝1]*p+蛛id睛x(校s[吵i]津))镰%m榜od并且岗我们厦取的惠是p=钩13,mo婆d=咳10致1;这样咳做真字的不朗会有扇问题惑吗?实际烛上是疯会有驴的,筹问题览就是冲突!有没腐有可导能两砌个不危同的陈字符异串,糟映射榆到了拖一个紫整数楼上,拖这样液子就朽会导元致结路果出据错?可能今!怎续么解慎决呢筑?字符币串ha乌sh解决扁的方辛法非烛常简疫单,想办匀法调病整p和mo轻d,使宴得冲语突概止率减阁小之澡又小。那么赛怎么块调整浮才能程使冲梳突概匙率小扮之又帖小呢?一句辅话告伶诉你渡,p取一掠个较老大素棕数,mo蹈d取一父个大屯素数。习惯烈上,p取一璃个6到8位的愧素数筝即可暗,mo浩d一般分取大竞素数1e9遵+7(10惊00希00挤00桌07)或1e运9+犹9(10明00集00澡00糖09)可是怀,为太什么搞这样廊做就天会冲撤突概程率小仙之又颜小?ha绢sh的解户释我们赌想,驱如果mo垒d取的夺很小悔,mo腾d=任97,或雪者更昆小,mo终d=辉13,它理与mo递d取一瓣个大柴数相炸比,上比如1e魂9+香7=盛10责00歉00妨00辽07,是不们是冲沙突的但概率幻玉就会捧更大?同时虎考虑p,p取2,相耻比p取一据个较清大的镰素数较,是纹不是波冲突杆的概标率会歌更大醋?换句业话说逃,我设们希底望取蓬得一奖个p和mo蹦d,使窗得这挪个函奴数”越乱仔越好”,“越没克有规恰律越刘好”,顿这样会才能贴降低阅冲突碍的概感率!p和mo黎d的取碍法我们距一般博认为p和mo贯d一般袖取素蚀数,p取一制个较默大的尸素数邮即可昂(6位到8位)剥,mo遣d取一保个大蛇素数吧,比祝如1e缸9+桑7,或宗者1e墨9+荷9。具体扩为什羽么这葛样做堪就能答够大怎概率乘地避狡免冲骑突,评或者沿它具箱体的光概率童是多拉少,令若想喂钻研椅,请go华og余le但,桐可以宾肯定念的是剃,这原样子由的取估法,冲突孙的概兔率非音常低孙!低到秘我们步可以列基本探放心并地去湾用这晌个函捷数解叶决一似般的ha有sh问题浅。如何花求一想个子僚串的ha籍sh值?实在善抱歉内,算惜法讲您座的除时候蓬,忘手记了射这部好分,恢现在素补上。在之邪前,柜我们咬求出轨了ha裤sh化[i],表耕示第i个前苦缀的ha前sh值。奥现在谜怎么纹求出笛每个扰子串炭的ha随sh值呢吨?我们架看下ha潮sh的公逗式:ha裁sh晓[i]=获(h惧as魄h[状i-脆1]音*p+旗id名x(s雁[i])弃)%春mo摧d这表潜示第i个前望缀的ha具sh值,星是一业个ha毯sh的前枝缀和陡。如何绪求一御个子勿串的ha丢sh值?ha专sh此[i]=泛(h弊as页h[谅i-证1]端*p+贫id邻x(s钱[i])累)%脂p;那么胶,我插要求S[若l…讯r]这个场子串槐的ha吓sh值ha尾sh罢[l.朵.r]=揉(h训as汤h[暑r]体-h亿as辨h[早l-牙1]皱*(稀p^惜(r透-1寒+1买))闲)%突mo羊d(假矮设字钻符串胁下标絮从1开始陡)没啦简!用像这个播方法勿求S[田l…糊r]的ha晓sh值但注磨意下哈取模钩时候日的问摧题!取模刑的问扁题ha脊sh健[l.破.r]=绝(h纽奉as兔h[里r]读-h绪as送h[托l-调1]忧*(舱p^么(r励-1秆+1澡))话)%缺mo然dha袄sh完[l.州.r]是不赶是可宁能有仅负数昂?怎么俊办呢范?当辞得到孙的ha雷sh衬[l.臭.r]<杆0的时主候,ha须sh悼[l.城.r]+阻=m芦od,就饮好啦富。这样零就可穴以保坚证每偿个子俗串的ha避sh值在[0,mo支d-坡1]的范树围内命,准浙确地稀用ha由sh值瓣来处理字持符串常用颗的几称个字烛符串ha猴sh法1.uns屑ig倒ne抗dlo愈nglo皇nghas径h[贱N];ha处sh逝[i]=湾ha多sh厕[i楚-1巨]*取p(自症动取者模)2.has线h[i]=草(h毯as充h[岔i-爆1]*p+质id谷x(s虏[i])眯)%盘mo摘d3.双ha阿shhas苏h1茂[i]=叮(h效as蚁h1摇[i弦-1厘]*p+使id德x(s仓[i])窃)%梢mo豆d1has懂h2湿[i]=痛(h肠as证h2瞒[i背-1元]*p+萍id否x(s饭[i])思)%腹mo墨d2pai耽r<途ha冰sh吐1,幅ha趋sh誓2>表示蜡一个劲字符雷串!has愿h法一un私si同gn灿ed杜l躺on奖g牛lo正ng述h很as钟h[偷N]寸;定义抓一个un丧si咽gn录ed坡l啦on桶g驰lo廉ng类型分的变世量,琴它的亲范围流是在[0麻,豆2^扯64亏)内,译这就隶相当甘于,习当数鹅超不系过2^弊64文-1后,洪它会溢出!这就艰相当份于一树个数侄模2^霞64的过渠程。那么ha慕sh函数紫可以辈理解催为:ha趴sh燃[i碍]=损(h痛as唱h[规i-途1]*p)哲%(仁2^决64遗)P取一怕个大融素数勤,一桌般习俩惯取1e回9+喂7或1e9航+9安全威指数能:三星(所释以并捏不是萄很安在全)ha耀sh取法悲二这个拳之前叹已经键提到每过了滨。has归h[i]=诱(h算as笛h[触i-妙1]*p+饲id氏x(s奏[i])赠)%乌mo塘dp取一门个6到8位的谋素数暴,mo冬d取一荡个大趋素数险,一宵般取1e独9+饶7或1e9助+9安全激指数味:四星(还可伶以)ha面sh取法盐三do易ub扑le抖h币as奏h即取廊两个mod值,mo漆d1和mo方d2has宣h1谎[i]=湿(h竖as百h1负[i秘-1教]*p+胜id载x(s梳[i])占)%至mo鹿d1has阵h2泼[i]=织(h练as抗h2刷[i抵-1充]*p+翼id慎x(s死[i])主)%键mo征d2mo询d1一般程取1e币9+跪7,mod捷2一般集取1e或9+唤9为什啊么这卡么取?10平00增00瘦00第07和10秧00京00片00害09是一虏对孪亦生素歪数,星取它欧们,塘冲突签的概气率极低!安全哪指数侮:五星!(也非常朵稳!喉)更多横的ha斩sh取法可以势这么铅说,ha跳sh某种膏程度液上就番是乱距搞,溪把ha被sh函数算弄的越没裂有规陵律越豆好,使恢得冲冲突的裕概率摸小到大部失分数计据都趟卡不寨掉。如果剥你开挥心,挑你想tr划ip透le堆h针as涉h,ul甲tr钓a神ha角sh,ra狐mp升ag闷e透ha读sh桥…都没梢有问殊题!但请筐注意啄,ha福sh的维纪度越而高,踏耗时推越高慢,耗轧内存描越大础!一般毯情况梨下,员sin河gl汗eha小sh可以盖被ha姨ck掉,但dou汉bl落ehas造h极难躁被ha决ck掉,用do两ub版leha疾sh足以奋解决亦问题字符胞串ha王sh题目下面筝我们除通过7道题块目来售阐述贯字符秃串ha姐sh的用芒法,鞠这7道题协目,违很多徐道还龟需要箭用到二分锁搜索,因挨为字丝式符串新上很壶多性锋质满牵足二奴分的少单调改性,性用二分+h鼻as勿h的办蚀法能勉够在扎高效新时间店内解流决许胶多字夏符串嫁问题扁。字符棚串ha塞sh问题凑一问题皱:给燃两个陪字符古串S1,S2,求S2是否滚是S1的子娃串,竭并求S2在S1中出厘现的凉次数数据盆范围:1=滨<|甜S1掌|,|S闲2|话<=缸10猛00开0(km事p是可风以做傻,但销请用ha尊sh去思检考)字符淹串ha忙sh问题茂二问题饲:给N个单胀词串流,和错一个肤文章港串,求每岭个单荡词串洁是否准是文逆章串查的子脉串,并求己每个怕单词怖在文娇章中炒出现是的次晚数。数据咏范围文章行串长奥度:[1绵,1抬0^敌5]N个单赶词串榨总长传:[1欲,1塔0^击6]字符蜜串ha妖sh问题躁二解法疲:把每轧一个竹单词ha榜sh成整寨数,再把费文章庙的每伤一个仁子串ha污sh成整办数,接挥下来怕只需模要进毒行整乓数上地的查找即可意。复杂恭度:O(喘|A铲|^虹2+失|S馋|)用AC自动援机可欲以做需到O(脾|A辈|+奶|S利|)的复召杂度|S脑|是单距词串飞总长捧,|A饶|是文触章长棕度字符杰串ha啄sh问题蛛三问题鸽:给小两个捧字符量串S1夹,S乞2,求脂它们唱的最长使公共诉子串的长碌度。数据焰范围:1=盼<|田S1穴|,|S稠2|惨<=奋10代^5字符翁串ha多sh问题饰三解法绳:将S1的每阶一个棒子串劈燕都ha潮sh成一沙个整栋数将S2的每边一个顽子串脏都ha缴sh成一皂个整帖数两堆出整数富,相衰同的岂配对惹,并页且找跨到所章表示倍的字规符串榆长度锋最大谈的即进可。复杂瞧度:O(妨|S泛1|泰^2棍+|童S2绸|^框2)用后奥缀数幅组可岗以优队化到O(趁|S摸|*誉lo甩g|规S|王)虽然淹如此澡,但ha夺sh也是棍一种泡可行甘方法ha龄sh+二名分下面斯的问拍题,贫都需葱要用患到ha海sh+二妄分搜汤索的方差法去歼解决兴。会发也现,鸟字符棉串上层的很衡多的额性质泉,都杂能满删足二尝分的至单调防性,乏而has辰h的作翁用是妥判断挺两个从字符召串是雅否一怒致。字符担串ha粉sh问题桨四问题符:给眨一个毫字符奸串S,求S的最甩长回捧文子郑串。比如abc秘bb超ab阵bc的最斜长回镜文子发串是cb话ba黄bb余c,bb曲ab淋b也是龟回文各串,灯但不迫是最猎长的数据眠范围创:1=<|物S|坦<=谦10竞^5什么芹是回寒文串总?字符月串ha绸sh问题笔四解法牺:先抵求子油串长臭度位奇数的,渔再求偶数的。枚举巡寿回文林子串劣的中留心位悉置,然览后二分子串秀的长鄙度,论直到狮找到塞一个沾该位苍置的讨最长先回文瘦子串茂,不开断维愿护长皂度最献大值翠即可序。复杂派度:O(谢|S蒜|*严lo以g|铸S|呆)用ma牛na阴ch喘er可以巩做到O(昌|S贞|)的复则杂度字符爪串ha敏sh问题宿五给一驱个字蒙符串S,求S的每愚个后变缀与S的最聚长公乞共前伴缀(LC阵P)。Lo钟ng忆es柜t产co摧mm巨on壳p亭re破fi玻x数据能范围:氧1侦=<匀|S全|<负=1摸00拖00姜0字符甲串ha能sh问题马五解法权:枚齿举每盖一个贫后缀闸的起名始位停置,演二分矿长度丛,求伏出每沫个后移缀与S的最赴长公灾共前马缀。复杂外度:O

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论