KMP模式匹配算法探讨_第1页
KMP模式匹配算法探讨_第2页
KMP模式匹配算法探讨_第3页
KMP模式匹配算法探讨_第4页
KMP模式匹配算法探讨_第5页
全文预览已结束

下载本文档

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

文档简介

1、KMP模式匹配算法探讨    摘  要  介绍了算法并与朴素查找算法进行了比较,提出了前缀函数的概念,并利用改进的前缀函数改进KMP算法,最后结合的改进算法给出了多次匹配的算法。     关键词  串匹配,前缀函数,KMP算法          在计算机科学领域,串的模式匹配(以下简称为串匹配)算法一直都是研究焦点之一。在拼写检查、语言翻译、数据压缩、搜索引擎、网络入侵检测、计算机病毒特征码匹配以及DNA序列匹配等应

2、用中,都需要进行串匹配。串匹配就是在主串中查找模式串的一个或所有出现。在本文中主串表示为S=s1s2s3sn,模式串表示为T=t1t2tm。串匹配从方式上可分为精确匹配、模糊匹配、并行匹配等,著名的匹配算法有BF算法、KMP算法、BM算法及一些改进算法。本文主要在精确匹配方面对KMP算法进行了讨论并对它做一些改进以及利用改进的KMP来实现多次模式匹配。 1  KMP算法     最简单的朴素串匹配算法(BF算法)是从主串的第一个字符和模式串的第一个字符进行比较,若相等则继续逐个比较后续字符,否则从主串的第二个字符起再重新和模式串的第一个字符进行比较。依次

3、类推,直至模式串和主串中的一个子串相等,此时称为匹配成功,否则称为匹配失败。朴素模式匹配算法匹配失败重新比较时只能向前移一个字符,若主串中存在和模式串只有部分匹配的多个子串,匹配指针将多次回溯,而回溯次数越多算法的效率越低,它的时间复杂度一般情况下为O(n-m+1)m) (注:n和m分别为主串和模式串的长度),最坏的情况下为O(m*n),最好的情况下为O(m+n)。KMP模式匹配算法正是针对上述算法的不足做了实质性的改进。其基本思想是:当一趟匹配过程中出现失配时,不需回溯主串,而是充分利用已经得到的部分匹配所隐含的若干个字符,过滤掉那些多余的比较,将模式串向右“滑动”尽可能远的一段距离后,继续

4、进行比较,从而提高模式匹配的效率,该算法的时间复杂度为O(m+n)。     那么如何确定哪些是多余的比较? 在KMP算法中通过引入前缀函数f(x)来确定每次匹配不需要比较的字符,保证了匹配始终向前进行,无须回溯。假设主串为s1s2,sn.,模式串为t1t2,tm.,其中 mn,从si+1开始的子串遇到一个不完全的匹配,使得:               (1.1)     如果我们能确定一个最小的整数 ,

5、使得:              (1.2)     其中 ,所以确定i' 等价于确定k,这里的k值就是我们要求的前缀函数f(x)。由式1.1和1.2中K值与主串s无关,只与给定的模式串t中与主串匹配的q有关,即k=f(q), f(q)=maxi|0 i q且t1.i是t1.q的后缀   (1.3)     确定KMP前缀函数的算法如下 : #define MAXSIZ

6、E  100 Typedef unsigned char  stringMAXSIZE+1;/0号单元用来存放串的长度 void f(sstring  t, int *array)     m=t0;/m为当前模式串的长度     array=(int  *)malloc(m+1)*sizeof(int);/0号元不用     array1=0;k=0;     for(q=2;q<=m;q+)    

7、;     while(k>0&&tk+1!=tq)k=arrayk;              if(tk+1=tq)k=k+1;             arrayq=k;            

8、0; 关于KMP算法的前缀函数f(x)的示例见表1。    表1  模式串abaabcac    I    1    2    3    4    5    6    7    8 

9、;   Ti    a    b    a    a    b    c    a    c    f(i)    0    0&

10、#160;   1    1    2    0    1    0        当模式串中有i个字符串匹配成功,第i+1个字符不匹配时,则从i-f(i)个字符重新开始比较,这样不仅无须回溯,而且一次可以向前滑动i-f(i)个字符,大大提高了模式匹配的效率。下面给出朴素匹配算法和KMP匹配算法的比

11、较,见表2。 表2 朴素匹配算法和KMP匹配算法比较表         朴素算法    KMP算法    时间复杂度    O(n-m+1)m)    O(m+n)    向前移动字符个数    1    q-f(q) 

12、   回溯次数    q-1    无     其中:n为主串长度,m为模式串长度,q为匹配成功的字符个数。其带来的影响:原先上市公司拥有的物业都被计入了固定资产,因此,物业的升值与否,并没有体现在报表中。近几年物业升值迅速,因此,如果上市公司一旦采用公允价值法来计量其早些年购入的投资性房地产,必将大大提高其净资产和当期利润。截至2007年4月27日,在已披露年报的1303家上市公司中,有9家上市公司对投资性房地产选择公允价值计量模式,并对股东权益进行了追

13、溯调整,分别是武汉控股、沱牌曲酒、中国银行、S深发展A、方大A、胜利股份、白云山A、武汉塑料、与津滨发展。涉及金额最大是中国银行,高达33.18亿元,调整金额最小的则是武汉塑料,为140.11万元。然而在此时,究竟什么样的价值才是公允价值,如何防止上市公司利用“公允价值”操纵利润,是监管的难题。公允价值计量模式的引入正式奠定了NAV(重估净资产值)方法作为房地产上市公司估值的核心地位。这必将引导市场对该项方法进一步的认可。而且随着投资性房地产物业的增多,特别是人民币升值和我国经济持续发展,新会计准则采用后,肯定会引导市场更多的关注各项投资性房地产物业的真实价值,并使NAV的估值方法成为评估投资

14、性房地产企业的主要标准之一。即使对以开发业务为主的房地产企业来说,新会计准则的实行也会导致投资者以更为稳健和客观的估值标准来衡量一个公司的价值,这无疑构成制度性的长期利好。 7.金融工具准则的变革 关于金融工具的4项具体会计准则分别为金融工具确认和计量准则、金融资产转移准则、套期保值准则、金融工具列报准则,这些准则主要适用于金融企业,这些准则对金融企业的影响是广泛而深刻的,上市和拟上市的金融机构则首当其冲。未来银行、券商、保险公司等金融企业的利润操纵空间将越来越小。 其带来的影响:(1)金融衍生工具表外业务表内化。新准则规定衍生金融工具一律以公允价值计量,并从表外移到表内反映。这就要求上市银行

15、和证券公司善用衍生工具这把“双刃剑”,因为表内化将对企业利用衍生金融工具进行风险管理的行为产生重大影响,企业不但要考虑现金流等经济因素,还要考虑衍生金融工具对报表的影响,以避免给报表带来过大的波动。(2)公允价值与实际利率摊余法。新准则规定,衍生金融工具一律以公允价值计量,并将相关公允价值变动计入当期损益和所有者权益,而金融资产和金融负债则按实际利率计算其摊余成本及各期利息费用。金融工具计量标准的变动能更好地反映市场因素、时间价值,从而更准确地计量各类金融资产和负债。(3)金融资产减值。新准则规定以摊余成本计量的金融资产发生减值时,应当将该金融资产的账面价值减记至预计未来现金流量(不包括尚未发

16、生的未来信用损失)现值,减记的金额确认为资产减值损失,计入当期损益。未来现金流量折现法与目前的五级分类法相比,能提供更准确的信息,真实地反映贷款地价值。在股份制改造过程中,商业银行能够更准确地把握金融资产减值可能造成地损失。 8.证券投资的变革 新准则要求,交易性证券投资(如公司持有的上市公司股票)期末应按交易所市价(视为公允价值),公允价值的变动计入当期损益。 其带来的影响:原来,上市公司的证券类投资如果市价比成本低,必须计提减值准备,计入当期损益;但如果市价比成本价高,而公司并没有抛售实现收益,这种计算出来的“账面收益”并不能计入当期损益,但新准则要求证券投资的账面盈利也能成为净利润。 2

17、006年末至今,股市一直牛气冲天,在这种背景下,持有大量股票的上市公司交易性证券投资的账面价值按公允市价调整,使得其产生巨额利润。典型案例中国人寿中国人寿一季度实现净利润88.87亿元,每股收益0.31元。在新会计准则下,公允价值变动收益作为营业收入进入利润表,共39.06亿元,占一季度净利润的44%。去年公司按国际会计准则净利润为200亿元而不是国内准则下的96亿元。作为中国最大的机构投资者之一,中国人寿加参股中信证券,并巨资参与工商银行和中国银行战略配售,这些股票价格飙升使公司账面利润大幅增长。根据新准则公允价值原则,这部分浮盈今年一季度就计入了公司的利润。 9.每股收益的变革 新发布企业

18、会计准则第34号每股收益对上市公司每股收益的计算方法作出了较为详细的规定。准则要求,除了计算基本每股收益外,还必须计算稀释每股收益。根据该准则,上市公司在发行新股、回购股份以及发行有可转债、权证时,每股收益的计算将产生重大变化。 其带来的影响:新准则实施后,每股收益计算更科学。当上市公司有发行新股、回购股份等行为时,发行或回购的时间将会影响每股收益的计算结果。新准则规定,对总股本数应当以加权平均数为准。公式为:发行在外普通股加权平均数=期初发行在外普通股股数+当期新发行普通股股数×已发行时间÷报告期时间-当期回购普通股股数×已回购时间÷报告期时间。另外,

19、新准则要求计算稀释每股收益。对于发行有可转债、权证可能影响股本规模的公司,稀释每股收益与原有的每股收益将产生重大区别。根据准则要求,企业存在转债、权证等稀释性普通股的,应当分别调整当期净利润和普通股的加权平均数,其中加权平均的股本数必须加上假定稀释性普通股转换为已发行普通股而增加的部分。 10.非货币性资产交换的变革 新准则规定,非货币性资产交换同时满足如下两个条件,应当以公允价值和应支付的相关税费作为换入资产的成本,公允价值与换出资产账面价值的差额计入当期损益:第一,交换具有商业实质;第二,换入资产和换出资产的公允价值能够可靠计量。如果上述两个条件不能同时满足,则仍以换出资产的账面价值作为换

20、入成本,不确定损益。上述规定特别指出,若交易双方存在关联关系,可能导致发生的交换不具有商业实质。 其带来的影响:新准则实施后,资产置换又能“造富”,主要原因来源于运用了公允价值来计量。由此产生的结果,这一交换将再次产生利润。如以优质资产换取劣质资产等。如果非货币性资产交换具有商业实质,换入资产和换出资产的公允价值能够可靠计量,公允价值与换出资产账面价值的差额可计入当期损益,将会影响企业当期利润,企业将可以通过资产重组提高当期利润。虽然新准则规定关联方关系的存在可能导致发生非货币性资产交换不具有商业实质,但企业如果想操纵利润,会想方设法予以规避,将关联交易非关联化。非货币性资产交换中,企业对商业

21、实质的判断也存在一定的会计弹性。此外,在发达的市场条件下,公允价值比较容易确认,但是在市场不充分的情况下,如何确认公允价值则是一个难题,从而为企业的盈余管理留下一定空间。此前采用的账面价值计算法,基本不产生利润。 3.2.11借款费用的变革 新准则将借款费用资本化的资产范围扩大到包括固定资产、需要相当长时间才能达到可销售状态的存货以及投资性房地产、存货等。同时,也扩大了可以资本化的借款费用的范围,不再限定只有专门借款的费用才可以资本化,为购建或者生产符合资本化条件的资产而占用了一般借款的,当累计资产支出超过专门借款时,一般借款费用也可资本化。 其带来的影响:借款费用资本化的资产范围和可予资本化

22、的借款范围扩大将减少费用资本化当期的财务费用,增加企业的资产价值,进而提高当期的会计利润。如2006年度,华能国际按企业会计准则编制的合并净利润为55.50亿元、在国际财务报告准则下的净利润则上升到68.89亿元,其中仅“借款费用资本化”一项差异因素就高达2.2亿元。对于那些有息负债规模巨大的上市公司来讲,如房地产公司、生产周期长的制造业公司以及资本化支出较大的公司的损益可能产生较大的正面影响,提高公司业绩。如中国石化日前公布的2006年报显示,执行新会计准则后,“一般性借款费用资本化”因素调增期初股东权益高达26.36亿元。     总之,与现行会计制度相比,新准则体系内容

温馨提示

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

评论

0/150

提交评论