改进的Sunday模式匹配算法的设计与实现_巫喜红
- 格式:pdf
- 大小:469.45 KB
- 文档页数:6
天道中的经典语录句子
1. 若能以天道为准则,无论境遇如何,人生定能安然无恙。
2. 天道无私,阳光普照,生命之路亦需融入其中。
3. 顺应天道,无需奢望过多,只为心安与喜悦而已。
4. 天道无常,唯有心境平和,方能跨越时光荣辱。
5. 崇尚天道,守护信仰,则人生问难题亦能迎刃而解。
6. 善行于天道,方能取得内在的宁静与平衡。
7. 天道的律动无所不在,唯有心灵柔软才能顺应其中。
8. 人无法左右天道,只能在命运之河中小心遨游。
9. 与天道相融,生命之树才能生根发芽、蓬勃生长。
10. 做一个积极向上的人,与天道同在,与世界和谐共舞。
sunday算法sunday算法是个特别容易记和理解的算法,但是我看⽹上很多博客都写错了。
所以整理了⼀下,防⽌⾃⼰遗忘,sunday算法的原理很简单。
1. 匹配,然后出现不匹配的时候,看主串最后⼀个元素的下⼀个元素,从右往左(为什么从右往左)检查⼦串是否包含(为什么要这样)为什么从右往左:因为下⼀个如果匹配的⼦串,第⼀个肯定先和最右边的那个i对应上,这样就跳过了好多。
2.重新对上以后,再重复⼀步骤,是不是很简单,但是代码可不简单。
代码:难点是位置的坐标很容易混,有个好记的办法就是,没有常数+1或者-1class Solution {public int strStr(String haystack, String needle) {if(haystack!=null&&needle.equals(""))return 0;int x=0;int j=0;while(x<haystack.length()&&j<needle.length()){int num=0;while(x+num<haystack.length()&&num<needle.length()&&haystack.charAt(x+num)==needle.charAt(num)){num++;}if(num==needle.length())return x;char p=' ';if(x+needle.length()<haystack.length())p=haystack.charAt(x+needle.length());int loc=stIndexOf(p);if(loc==-1)x=x+needle.length();else{x=x+needle.length()-loc;}}return -1;}}。
基于Sunday算法的改良单模式匹配算法朱永强;秦志光;江雪【摘要】Unicode编码的中文环境下应用Sunday算法时,如直接使用中文字符生成失效跳转表,将造成空间膨胀,而将中文字符拆分为两个字节进行处理,虽可以降低空间消耗,但匹配的执行速度又会受影响.针对Sunday算法应用于Unicode编码的字符拆分环境时所产生的时间性能降低问题,结合Unicode中文单元的内部关联性,优化了原Sunday算法的辅助跳转表与匹配规则,从而在解决Unicode下算法空间膨胀问题的同时,提升了Sunday算法在此环境下的时间性能,并利用模拟实验对改良算法的时间与空间性能进行了实验证明.【期刊名称】《计算机应用》【年(卷),期】2014(034)001【总页数】5页(P208-212)【关键词】模式匹配;Unicode编码;KMP算法;B-M算法;Sunday算法【作者】朱永强;秦志光;江雪【作者单位】电子科技大学计算机科学与工程学院,成都 611731;成都网安科技发展有限公司,成都 610092;电子科技大学计算机科学与工程学院,成都 611731;电子科技大学计算机科学与工程学院,成都 611731;成都网安科技发展有限公司,成都610092【正文语种】中文【中图分类】TP301.6模式匹配算法广泛应用在特征码检测、文件索引、生物DNA序列分析等领域。
作为计算机技术中最基本的算法之一,对模式匹配算法的研究起步较早,也是历来计算机算法领域研究的热点。
模式匹配算法的性能,不仅由算法设计方式决定,也受到其所使用的字符与语义环境的影响,同一种模式匹配算法应用于不同的环境时,其性能很可能产生较大的差异,因此设计模式匹配算法时,只有充分分析了算法设计思想与算法所使用环境的匹配度,才能发挥出算法的最高性能。
由于大部分模式匹配算法都是由国外学者提出,因此这些算法通常更适合于英文字符环境,所以这些算法应用于中文环境时,往往存在可继续优化的空间。
第36卷 第1期2016年01月西安科技大学学报JOURNALOFXI’ANUNIVERSITYOFSCIENCEANDTECHNOLOGYVol.36 No 1Jan 2016 DOI:10.13800/j.cnki.xakjdxxb.2016.0119文章编号:1672-9315(2016)01-0111-05字符串匹配算法Sunday的改进朱宁洪(西安科技大学计算机科学与技术学院,陕西西安710054)摘 要:字符串的模式匹配应用十分广泛,在信息的搜索查询等方面具有重要作用,研究串匹配算法的效率具有重要的理论价值和实际意义。
在分析几种经典模式匹配算法的基础上,对当前应用最广泛的Sunday算法提出了改进的算法Zhusunday.算法主要改进之处是:在字符串从右向左匹配过程中,当文本字符中出现不匹配模式字符串的字符且该文本字符不是坏字符时,算法从右向左搜索当前文本字符在模式串中出现的位置;找到当前字符在模式串中的位置后继续再向左匹配模式串字符一次,如果仍不匹配时,模式窗口比Sunday算法多向右移动一个字符。
改进的算法提高了模式匹配的执行效率,通过大量对比实验证明了该算法的有效性。
最后得出结论:在实际应用中,坏字符大量存在的情况下,改进算法的最优时间复杂度可达O(n/m),在同一时间复杂度下,比Sunday算法效率提高25~50%.关键词:Sunday算法;Zhusunday算法;模式匹配;坏字符中图分类号:TP391 文献标志码:AImprovementofSundaypatternmatchingalgorithmZHUNing hong(CollegeofComputerScienceandEngineering,Xi’anUniversityofScienceandTechnology,Xi’an710054,China)Abstract:Stringpatternmatchingiswidelyusedininformationsearchandquery,anditisimportanttostudytheefficiencyofthestringmatchingalgorithmwiththeoreticalvalueandpracticalsignificance.Onthebasisoftheanalysisofseveralclassicalpatternmatchingalgorithms,thepaperputsforwardaZhusundayalgorithmwhichisimprovedfromthemostwidelyusedSundayalgorithm.Theimprovedpositionofthealgorithmis:inthematchingprocessfromtherightofthetextstringtotheleft,whenthecharacterofthetextdoesnotmatchthecharacterofthepatternstring,itisnotabadcharacter,thealgorithmsearchesthepositionofthecurrenttextcharacterfromtherighttotheleftinthepatternstring.Afterfindingtheposition,theimprovedalgorithmcontinuestomatchthetwocharactersintheleftforanothertime.Ifthereisnomatch,thepatternwindowwillmovetorightonestepmorethanthemovementofSundayalgorithm.Theimprovedalgorithmimprovestheefficiencyofthepatternmatching,andtheeffectivenessoftheproposedalgorithmisprovedbyalotofexperiments.Finallythepaperdrawsaconclusion:inpracticalapplicationtherearealargenumberofthebadcharacters,theoptimaltimecomplexityoftheimprovedalgorithmisO(n/m),andatthesametimecomplexity,theimprovedalgorithmismoreefficientthantheSundayalgorithmby25~50%.Keywords:Sundayalgorithm;Zhusundayalgorithm;patternmatching;badcharacter收稿日期:2015-07-29 责任编辑:高 佳基金项目:国家自然基金(煤炭联合基金)(U1261114)作者简介:朱宁洪(1969-),男,山东兖州人,讲师,E mail:zhuninghong@sohu.com博看网 . All Rights Reserved.0 引 言字符串匹配问题是计算机科学中的最基本的问题,如何能在最短的时间内确定特征字符串在文本中是否出现过具有重要的意义。