保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

经典算法kmp,大神级的存在

  对于字符串匹配,如用一个长度为m的模式串去匹配一个长度为n的主串,我们可以使用暴力法(BF,BruteForce),其时间复杂度为O(mn)。
  字符串匹配kmp算法的时间复杂度只需要O(mn)。
  使用变量i,j表示主串s〔〕和模式串t〔〕的下标,第一轮匹配:
  kmp算法认为,i可以不回退(BF要求退回到主串的第2个位置(第几轮就是第几个位置)),而j可以回退到第2个位置,即j2(BF要求退回到每1个字符的位置)。
  即使使用暴力破解,几轮迭代后,也会迭代匹配到此位置,所以上述i,j的回退不影响整体结果的正确性。
  模式串此时回退为什么是2呢?
  看下面已匹配的公共部分:
  主串以不匹配的位置为基准,考虑前面的字符abaab,有后缀ab与模式串abaabe最前面的字符前缀ab相等。
  也就是模式串本身abaab,有最大后缀部分ab与最大前缀ab相等,相等字符的长度为2。
  从上图可见,假设一个字符串长度为n,其最大前缀和后缀相等的字符数量不会超过n2,例如:
  abcdabcd,长度为8,824,其最大前缀和后缀相等的字符串abcd最大可能的长度为4。
  如何暴力计算下面字符的最大前缀和后缀字符串的长度L呢?
  abcdaabbcdeabcd,长度n为15,其L不会超过n27,暴力匹配的思路可以描述为:前1个字符与后1个字符是否相等?
  前2个字符与后2个字符是否相等?
  前3个字符与后3个字符是否相等?
  前n2个字符与后n2个字符是否相等?
  暴力匹配的思路也可以描述为:
  前n27个字符与后n27个字符是否相等?
  abcdaabbcdeabcd
  前n216个字符与后n216个字符是否相等?
  abcdaabbcdeabcd
  前n225个字符与后n225个字符是否相等?
  abcdaabbcdeabcd
  abcdaabbcdeabcd
  前n234个字符与后n234个字符是否相等?
  abcdaabbcdeabcd
  此时相等,则L为4。
  对于模式串abaabe,如何计算各个子串对应的最大前缀与后缀字符串数量(j回退到的位置)?
  abaab
  2hrabaa
  1hraba
  1hrab
  0hra
  1
  图示:
  对应代码:intgetNextArray(chart〔〕)动态规划{intnstrlen(t);intnext(int)malloc(sizeof(int)n);next〔0〕1;next〔1〕0;intk;for(intj2;jn;j){knext〔j1〕;先假设while(k!1){if(t〔j1〕t〔k〕){next〔j〕k1;break;}elseknext〔k〕;回退next〔j〕0;当k1而跳出循环时,next〔j〕0,否则next〔j〕会在break之前被赋值}}returnnext;}
  对于模式串T的下标j回退位置next〔〕的求解方法,KMP算法应用的动态规划的思想:
  首先大胆假设next〔j〕k,则
  那么next〔j1〕?
  也就是以上子串再分别多考虑一个随后的字符:
  可以区分这两个字符在相等和不等的情况下分别考虑:
  有了确定模式串回退位置的数组,字符串匹配剩下的代码就相对较容易了。
  democcode:includestdio。hincludemalloc。hincludestring。h对主串s和模式串t进行KMP模式匹配计算模式串t需要回退的位置(BF是回退到0)intgetNextArray(chart〔〕)动态规划{intnstrlen(t);intnext(int)malloc(sizeof(int)n);next〔0〕1;next〔1〕0;intk;for(intj2;jn;j){knext〔j1〕;先假设while(k!1){if(t〔j1〕t〔k〕){next〔j〕k1;break;}elseknext〔k〕;回退next〔j〕0;当k1而跳出循环时,next〔j〕0,否则next〔j〕会在break之前被赋值}}returnnext;}对主串s和模式串t进行KMP模式匹配params主串paramt模式串return若匹配成功,返回t在s中的位置(第一个相同字符对应的位置),若匹配失败,返回1intkmpMatch(chars,chart){intnextgetNextArray(t);inti0,j0;while(i(int)strlen(s)j(int)strlen(t)){if(j1s〔i〕t〔j〕){i;j;}elsejnext〔j〕;}printf(ijddd,i,j,ij);if(j(int)strlen(t))returnij;elsereturn1;}intmain(){charstr〔〕{ACBACAACAACACAACAB,ACAACAB};charstr〔〕{abaabaabeca,abaabe};charstr〔〕{abaabaeabaabea,abaabe};intnextgetNextArray(str〔1〕);inti,j;printf(主串s〔〕);for(i0;i(int)strlen(str〔0〕);i)printf(c,str〔0〕〔i〕);printf();for(i0;i2;i){printf(模式串t〔〕);for(j0;j(int)strlen(str〔1〕);j)printf(c,str〔1〕〔j〕);printf();}printf(next〔〕);for(i0;istrlen(str〔1〕);i)printf(d,next〔i〕);intnkmpMatch(str〔0〕,str〔1〕);printf(模式串t首次匹配到主串s的位置:d,n);getchar();}主串s〔〕abaabaabeca模式串t〔〕abaabe模式串t〔〕abaabenext〔〕100112模式串t首次匹配到主串s的位置:3主串s〔〕ACBACAACAACACAACAB模式串t〔〕ACAACAB模式串t〔〕ACAACABnext〔〕1001123模式串t首次匹配到主串s的位置:11主串s〔〕abaabaeabaabea模式串t〔〕abaabe模式串t〔〕abaabenext〔〕100112模式串t首次匹配到主串s的位置:7
  demojavacode:classIdeone{publicstaticint〔〕getNextArray(char〔〕t){int〔〕nextnewint〔t。length〕;next〔0〕1;next〔1〕0;intk;for(intj2;jt。length;j){knext〔j1〕;while(k!1){if(t〔j1〕t〔k〕){next〔j〕k1;break;}else{knext〔k〕;}next〔j〕0;当k1而跳出循环时,next〔j〕0,否则next〔j〕会在break之前被赋值}}returnnext;}对主串s和模式串t进行KMP模式匹配return若匹配成功,返回t在s中的位置(第一个相同字符对应的位置),若匹配失败,返回1publicstaticintkmpMatch(Stringsarr,Stringtarr){char〔〕ssarr。toCharArray();char〔〕ttarr。toCharArray();int〔〕nextgetNextArray(t);for(inti0;it。length;i)System。out。print(next〔i〕);inti0,j0;while(is。lengthjt。length){if(j1s〔i〕t〔j〕){i;j;}elsejnext〔j〕;}System。out。printf(ddd,i,j,t。length);if(jt。length)returnij;elsereturn1;}publicstaticvoidmain(String〔〕args)throwsjava。lang。Exception{intnkmpMatch(ACBACAACAACACAACAB,ACAACAB);System。out。printf(d,n);}}1001123187711
  End

观晨曦公主有感观《晨曦公主》有感一次偶然的机会,让我看到了《晨曦公主》,这部动漫关于一个公主为了活下去,去寻找拥有四龙之血的人。从小备受父王及哈克呵护的高华国公主优娜,在十六岁生……美不曾独自走过E度网专稿未经允许不得转载望着蓝天中偶尔飘过的几朵白云,这是蓝天给人间的美好hellip;hellip;人世间的美好,正如诗人卞之琳所说:ldquo;你站在桥上看风……一年级书信给圣诞老人的一封信亲爱的圣诞爷爷:您好!我是一位中国女孩,我的名字叫朱妙圆。时间过的真快啊,转眼之间一年一度的圣诞节快要到了。街道俩旁的超市、服装店、饭店到处贴满您的画像,还用来了许……待命7个月,一骑掌天宫!神舟十四号用成功向祖国报告中青报中青网记者邱晨辉通讯员张国航毛凌野时小丹不到一个月,又见大红屏!我国载人航天再次用成功向祖国报告。继5月10日天舟四号货运飞船发射成功后,6月5日,由中……神舟14发射成功,美MQ4C逼近汕头70海里,6架F22背后6月5日当天我国再次传来好消息,神舟14号载人航天飞船已经成功发射,神舟14号载人航天飞船的发射成功,也意味着三名宇航员即将再一次进入我国空间站进行一系列的活动,据了解,此次神……我家的三角梅E度网专稿未经允许不得转载妈妈出去逛街,买了一注三角梅,我非常喜欢它,我天天都给它浇水。时间一长,它就成了我的命根子。春天,三角梅抽出嫩芽,换上了新装,春风吹过,三……天宫空间站规模翻倍至180吨,航天员杨利伟披露将来可能有六舱2022年6月5日上午10时44分10秒460毫秒,长征2F遥十四运载火箭在酒泉卫星发射中心点火升空,火箭飞行约577秒后船箭分离,神舟十四号载人飞船成功进入近地点200公里、……我的家乡英语演讲稿范文myhometownmyhometownislhasa,thelargestcityontheroofoftheworld。itistheheartandsoulofti……伊戈达拉当年的FMVP是我凭本事拿的,不是每个人都能防住詹姆伊戈达拉和勇士在2015年的总决赛上击败了骑士队夺冠,但是夺冠之后让人惊讶的是勇士的当家球星斯蒂芬库里并不是总决赛的FMVP,尽管他的数据是球队中最好的,尽管他是公认的领袖,但……关于我的心情的微作文第1篇【微作文】我的心情作文100字晨起拉开窗帘,一缕阳光射入我的小屋,我顿时觉得身上暖洋洋的,又是美好的一天!晚上了,我还在留恋着,这一天,好充实,好快乐!什么?你问我……安以轩分得13亿,70亿给前妻女儿?陈荣炼入狱后豪门太太梦碎陈荣炼因冼米华案出事后,安以轩的现状引起网友们的热议。曾有消息传,安以轩的个人精神状态不是很好,但为了孩子会努力的生活下去。之后又有消息说陈荣炼入狱后,安以轩豪门太太梦彻……与凤行男主行止,不能爱人,被天道所弃,比宇文玥还惨临近暑期档,有的剧暗戳戳准备要上线了,而有的剧才官宣不久,准备开机。《与凤行》作为瓜田里传了许久的剧,剧组死磕赵丽颖,终于是磕到她来出演了。不仅把女主定成了她,而且还将林……
追求梦想初二作文寻梦?撑一支长蒿,向青草更青处漫溯,满载一船星辉,在星辉斑斓里放歌一首《再别康桥》抒发了徐志摩的追求。是的,追求梦想,是古往今来多少人审美的需求。岳飞一生的追求是一种壮烈……泰坦尼克号的女主是不是太胖了?从各种同时期的经典油画作品来看,露丝的身材无可挑剔。以瘦为美是我们现在的主流喜好,不要用我们的喜好去左右另一时代背景下的作品。虽然是拍给我们看的,但太迁就观众,反倒还会被……夜空里的小星星作文范文一个、两个、三个数也数不清的小星星从家里偷偷溜了出来。它们在河边玩起了跳房子的游戏,从这边跳到那边,从那边跳到这边,玩得兴高采烈。咦?一个小流星问:怎么没看到启明星出来玩……我的爸爸四年级作文12篇父爱是一泓清泉,让你的情感即使蒙上岁月的风尘依然纯洁明净。以下是小编整理的我的爸爸四年级作文,希望对大家有帮助!我的爸爸四年级作文篇1打开心灵的小窗,回忆往事。我们……2022年下半年三款新机曝光,iQOO搭载200W快充,小米最近6。18大促,各大手机厂商忙着针对上半年的手机降价清仓。在6。18结束之后,马上又会有一大批新旗舰陆续到来。最近又有消息爆出了3款将会在下半年发布的新机,而且一个比一个劲爆……今日,普跌行情,又一个信号释放!A股拐点要来了?3250点!周二继续反弹,尝试突破3250点,没有意外,冲高折返。普跌行情,下跌股票数量盘中超过3700只,短线追高,又要内心不安了。市场的走势,和预期一样,消费、基建、……父母在,不远游子女才能陪伴生养人,父母不担心能及时扶助侍疾对生养人多花时间陪伴,是对生养人在抚养我们的时候投入了大量的时间、精力的回报。陪伴的方式其实可以有很多种,最简单的莫过于一起生活,或一起做有兴趣的事,比如一起买菜、一起做……赵本山的大女儿在本山传媒有一份工作,有固定的工资,我很知足赵本山:曾为前妻征婚,前妻却因他单身至今,他算不算负心汉?原创2022051517:01R娱记赵本山究竟算不算负心汉?他的前妻葛淑珍,是在他被外人看作二流子、没本事……乙未初冬游西昌邛海泸沽湖(2)乙未初冬游西昌邛海、泸沽湖(2)画中游蜕心堂品玩己画笔记第一仟零六十七篇江南达者童山雷却说当日既至泸沽湖,先是依照旅游合同,仍乘本车作环湖行,由湖滨的湿地,即……去什刹海望海楼品尝私房菜近日,去北京体检,受邀去什刹海的望海楼品尝了私房菜。雨后天晴,空气爽朗。我们到达望海楼后,服务员带着我们欣赏了什刹海的景色,随后又参观了望海楼,介绍了望海楼的前世今生和近……爱在如画清秋细雨初晴,清风徐荡。秋,如一幅丹青古卷,一展静美流芳的画意,悄然落入眉弯。云水烟岚,温凉婉转;冷香幽渡,清虚淡远,令人柔怀悠漾,诗情阑珊。题记秋风秋雨秋满楼,秋月秋……关于中秋节的随笔作文两篇关于中秋节的随笔1中秋节是中华民族最传统的节日之一。除了春节,其次就是中秋了。我们怀着无比激动和欢快的心情,盼来了一个美好的中秋,一个难以忘怀的圆月日。在这天……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网