CN110909214A - 基于kmp匹配算法的字符串快速匹配方法 - Google Patents

基于kmp匹配算法的字符串快速匹配方法 Download PDF

Info

Publication number
CN110909214A
CN110909214A CN201911120073.3A CN201911120073A CN110909214A CN 110909214 A CN110909214 A CN 110909214A CN 201911120073 A CN201911120073 A CN 201911120073A CN 110909214 A CN110909214 A CN 110909214A
Authority
CN
China
Prior art keywords
string
character
matching
mode
prefix
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201911120073.3A
Other languages
English (en)
Inventor
冯驰
蔡翔
陈清萍
毛峰
吴丽莎
陈山
李超
夏雨潇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Anqing Power Supply Co of State Grid Anhui Electric Power Co Ltd
Original Assignee
Anqing Power Supply Co of State Grid Anhui Electric Power Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Anqing Power Supply Co of State Grid Anhui Electric Power Co Ltd filed Critical Anqing Power Supply Co of State Grid Anhui Electric Power Co Ltd
Priority to CN201911120073.3A priority Critical patent/CN110909214A/zh
Publication of CN110909214A publication Critical patent/CN110909214A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了基于KMP匹配算法的字符串快速匹配方法,涉及数据处理技术领域。本发明包括将模式串最后一个字符x与文本串进行匹配;若字符x匹配失败;采用坏字符规则移动;若字符x匹配时;采用模式串前缀与文本串比较,若模式串前缀与文本串同配,则字符串找到;若失配,则根据KMP算法得到模式串右移的距离使模式串在新位置进行一下轮的匹配。本发明通过将模式串最后一个字符x与文本串进行匹配;若字符x匹配失败;采用坏字符规则移动;若字符x匹配时;采用模式串前缀与文本串比较;降低字符匹配时间复杂度,提高匹配效率。

Description

基于KMP匹配算法的字符串快速匹配方法
技术领域
本发明属于数据处理技术领域,特别是涉及一种基于KMP匹配算法的字符串快速匹配方法。
背景技术
字符串匹配阵是数字处理过程中的基本问题,实际上是字符的模式匹配,即在给定的文本串中找出与模式串匹配的子串的起始位置。最基本的串匹配问题是关键词匹配;所谓关键词匹配,是指给定一个长为n的文本串T[1,n]和长为m的模式串P[1,m],找出文本串T中与模式串所有精确匹配的子串的起始位置。
常见的字符匹配算法包括BF算法;BF算法思想是从文本串的第一个字符开始和模式串进行匹配;若匹配成功,则继续比较后面的字符;否则文本串指针回溯到后一个位置从第二个字符开始和模式串第一个字符进行匹配。依此下去,直到和模式串匹配成功或到文本串的末尾为止。它的时间复杂度一般情况下为O((n-m+1)m)其中:n和m分别为主串和模式串的长度,最坏的情况下为O(m*n),最好的情况下为O(m+n);基于BF算法的时间复杂度明显较高,字符匹配效率较低。
KMP模式匹配算法针对BF算法做了改进;其基本思想是:设计一个与模式串本身局部匹配信息构造的模式值数组next,当匹配过程中出现失配时,利用模式值将模式串向右“滑动”尽可能远的一段距离了,从而跳过一些不必要的比较以提高模式匹配的效率。例如:对给出的的文本串T[0,n-1]与模式串P[0,m-1],假设在模式匹配的进程中,执行T[i]和P[j]的匹配检查;若T[i]=P[j],则继续检查T[i+1]和P[j+1]是否匹配;若T[i]≠P[j],则分成两种情况:若j=0,则模式串右移一位,检查T[i+1]和P[0]是否匹配;若1≤j<m,则模式串右移j-next(j)位,检查T[i]和P[next(j)]是否匹配。重复此过程直到j=m-1或i=n-1结束;该算法的时间复杂度为O(m+n)。
而BM算法包含两个并行的规则,坏字符规则和好后缀规则,这两种规则的目的就是让模式串在失配时,向右移动尽可能大的距离;设文本串为T[0,n-1],模式串为P[0,m-1],坏字符规则:即是在文本串T与模式串P从右向左匹配过程中,主串中的字符x与P[j]位置字符不匹配,如果这个字符x在模式串P[0,j]中没有出现,直接跳过P[0,j]如果x在P[0,j]中出现,移动P使x字符对齐。好后缀规则:当出现不匹配字符时,已有部分字符P[j,m-1]匹配成功,如果P[j,m-1]在P[0,j]的某位置k(k<j)也出现,且P[k-1]≠P[j-1],则将P[k-1]移到P[j-1]位置;如果P[j,m-1]在P[0,j]没有出现,则找到与P[j,m-1]的后缀相同的最长前缀,移动P使之对齐。BM进行模式匹配时,将文本串T与模式串P进行左对齐,然后进行从右向左比较,一旦发现不匹配,通过查询预处理好的坏字符移动表与好后缀移动表,选择移动距离较大值向后移动模式串P,再进行下一轮匹配尝试。BM算法预处理阶段时间复杂度为O(m+s)(s为与模式串P和文本串T相关的有限字符集长度),搜索阶段的时间复杂度为O(mn)。
进行搜索实践时,常常遇到一部分前缀匹配而后缀却不匹配,或后缀匹配而前缀不匹配的情况,这就进行了许多次不必要的比较。因此,亟需一种时间复杂度低的字符串匹配方法,以解决现有字符匹配时间复杂度高、效率低的问题。
发明内容
本发明的目的在于提供基于KMP匹配算法的字符串快速匹配方法,通过将模式串最后一个字符x与文本串进行匹配;若字符x匹配失败;采用坏字符规则移动;若字符x匹配时;采用模式串前缀与文本串比较;降低字符匹配时间复杂度,提高匹配效率。
为解决上述技术问题,本发明是通过以下技术方案实现的:
本发明为基于KMP匹配算法的字符串快速匹配方法,包括如下步骤:
将模式串最后一个字符x与文本串进行匹配;
若字符x匹配失败;采用坏字符规则移动;
若字符x匹配时;
采用模式串前缀与文本串比较,若模式串前缀与文本串同配,则字符串找到;若失配,则根据KMP算法得到模式串右移的距离使模式串在新位置进行一下轮的匹配;
当字符x在模式串前缀中出现,而模式串在这个新位置并未使主串的字符x与模式串前缀中出现的字符x对齐,则向右增大模式串的移动距离,使主串中的字符x与模式串前缀中出现的字符x对齐,然后再进行比较;
若字符x并未在模式串前缀中出现,采用好字符规则直接跳过该区域获得最大的右移距离。
优选地,所述好字符规则还需增加一个好字符数组GC以记录模式串最末字符在字符串前缀中出现的位置信息;所述好字符数组GC与模式串长度一致。
优选地,还包括如下:
所述文本串进行全文扫描时分为末字符匹配和前缀匹配两部分,首先在index位置对模式串P最末字符x进行匹配;
若失配,则直接取坏字符表值移动字符串在下一个位置进行比较;
若同配,则匹配模式串前缀,若所述前缀也同配,则字符串找到;当所述前缀j位置失配,则求出由KMP算法模式值next决定的移动距离,再访问好字符数组GC,计算模式串P的最大移动距离。
本发明具有以下有益效果:
本发明通过将模式串最后一个字符x与文本串进行匹配;若字符x匹配失败;采用坏字符规则移动;若字符x匹配时;采用模式串前缀与文本串比较;降低字符匹配时间复杂度,提高匹配效率。
当然,实施本发明的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的基于KMP匹配算法的字符串快速匹配方法的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1所示,本发明为基于KMP匹配算法的字符串快速匹配方法,包括如下步骤:
将模式串最后一个字符x与文本串进行匹配;
若字符x匹配失败;采用坏字符规则移动;
若字符x匹配时;
采用模式串前缀与文本串比较,若模式串前缀与文本串同配,则字符串找到;若失配,则根据KMP算法得到模式串右移的距离使模式串在新位置进行一下轮的匹配;
当字符x在模式串前缀中出现,而模式串在这个新位置并未使主串的字符x与模式串前缀中出现的字符x对齐,则向右增大模式串的移动距离,使主串中的字符x与模式串前缀中出现的字符x对齐,然后再进行比较;
若字符x并未在模式串前缀中出现,采用好字符规则直接跳过该区域获得最大的右移距离。
其中,好字符规则还需增加一个好字符数组GC以记录模式串最末字符在字符串前缀中出现的位置信息;好字符数组GC与模式串长度一致;
具体的建立数组GC的算法描述如下:
Figure BDA0002275205000000051
Figure BDA0002275205000000061
其中,还包括如下:
文本串进行全文扫描时分为末字符匹配和前缀匹配两部分,首先在index位置对模式串P最末字符x进行匹配;
若失配,则直接取坏字符表值移动字符串在下一个位置进行比较;
若同配,则匹配模式串前缀,若前缀也同配,则字符串找到;当前缀j位置失配,则求出由KMP算法模式值next决定的移动距离,再访问好字符数组GC,计算模式串P的最大移动距离;
具体的实现如下:
while(T[i+Plen-1]!='\0')
//文本串均未越界
{
if(T[index+Plen-1]!=P[Plen-1])
{
shift=Plen-1-bc[(unsigned int)T[index+Plen-1]];index+=shift;
i=index;
}
else
{//最末字符匹配成功while(T[i]==P[j]&&j<Plen-1)//匹配前缀
{i++;j++;}
if(j<Plen-1)
{//前缀匹配失败,据好字符数组移动模式串
shift=j-next[j];i=i+shift+GC[Plen-1-shift];j=0;
index=i;
}
else
{return index;//前缀匹配成功}
}
}。
值得注意的是,上述系统实施例中,所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
另外,本领域普通技术人员可以理解实现上述各实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,相应的程序可以存储于一计算机可读取存储介质中。
以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制。

Claims (3)

1.基于KMP匹配算法的字符串快速匹配方法,其特征在于,包括如下步骤:
将模式串最后一个字符x与文本串进行匹配;
若字符x匹配失败;采用坏字符规则移动;
若字符x匹配时;
采用模式串前缀与文本串比较,若模式串前缀与文本串同配,则字符串找到;若失配,则根据KMP算法得到模式串右移的距离使模式串在新位置进行一下轮的匹配;
当字符x在模式串前缀中出现,而模式串在这个新位置并未使主串的字符x与模式串前缀中出现的字符x对齐,则向右增大模式串的移动距离,使主串中的字符x与模式串前缀中出现的字符x对齐,然后再进行比较;
若字符x并未在模式串前缀中出现,采用好字符规则直接跳过该区域获得最大的右移距离。
2.根据权利要求1所述的基于KMP匹配算法的字符串快速匹配方法,其特征在于,所述好字符规则还需增加一个好字符数组GC以记录模式串最末字符在字符串前缀中出现的位置信息;所述好字符数组GC与模式串长度一致。
3.根据权利要求1所述的基于KMP匹配算法的字符串快速匹配方法,还包括如下:
所述文本串进行全文扫描时分为末字符匹配和前缀匹配两部分,首先在index位置对模式串P最末字符x进行匹配;
若失配,则直接取坏字符表值移动字符串在下一个位置进行比较;
若同配,则匹配模式串前缀,若所述前缀也同配,则字符串找到;当所述前缀j位置失配,则求出由KMP算法模式值next决定的移动距离,再访问好字符数组GC,计算模式串P的最大移动距离。
CN201911120073.3A 2019-11-15 2019-11-15 基于kmp匹配算法的字符串快速匹配方法 Pending CN110909214A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911120073.3A CN110909214A (zh) 2019-11-15 2019-11-15 基于kmp匹配算法的字符串快速匹配方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911120073.3A CN110909214A (zh) 2019-11-15 2019-11-15 基于kmp匹配算法的字符串快速匹配方法

Publications (1)

Publication Number Publication Date
CN110909214A true CN110909214A (zh) 2020-03-24

Family

ID=69816504

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911120073.3A Pending CN110909214A (zh) 2019-11-15 2019-11-15 基于kmp匹配算法的字符串快速匹配方法

Country Status (1)

Country Link
CN (1) CN110909214A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113836367A (zh) * 2021-09-26 2021-12-24 杭州迪普科技股份有限公司 一种字符反向匹配的方法及装置
CN117668527A (zh) * 2024-01-31 2024-03-08 国网湖北省电力有限公司信息通信公司 一种大流量模型下的多特征识别方法及系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
叶煜: "一种基于KMP的高效字符串匹配算法", 《西南民族大学学报(自然科学版)》 *
蔡婷等: "一种改进的字符串模式匹配算法", 《物联网技术》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113836367A (zh) * 2021-09-26 2021-12-24 杭州迪普科技股份有限公司 一种字符反向匹配的方法及装置
CN113836367B (zh) * 2021-09-26 2023-04-28 杭州迪普科技股份有限公司 一种字符反向匹配的方法及装置
CN117668527A (zh) * 2024-01-31 2024-03-08 国网湖北省电力有限公司信息通信公司 一种大流量模型下的多特征识别方法及系统
CN117668527B (zh) * 2024-01-31 2024-04-26 国网湖北省电力有限公司信息通信公司 一种大流量模型下的多特征识别方法及系统

Similar Documents

Publication Publication Date Title
US9768802B2 (en) Look-ahead hash chain matching for data compression
US5406278A (en) Method and apparatus for data compression having an improved matching algorithm which utilizes a parallel hashing technique
US5049881A (en) Apparatus and method for very high data rate-compression incorporating lossless data compression and expansion utilizing a hashing technique
US5371499A (en) Data compression using hashing
Bowe et al. Succinct de Bruijn graphs
KR100950607B1 (ko) 허프만 코딩
CN106326475B (zh) 一种高效的静态哈希表实现方法及系统
US10224957B1 (en) Hash-based data matching enhanced with backward matching for data compression
US9916314B2 (en) File extraction method, computer product, file extracting apparatus, and file extracting system
JPWO2004062110A1 (ja) データ圧縮方法、プログラム及び装置
US20060132336A1 (en) Character code conversion methods and systems
WO2017128763A1 (zh) 数据压缩装置及方法
US20050187898A1 (en) Data Lookup architecture
CN104268157A (zh) 一种数据搜索中的纠错装置及其方法
CN110909214A (zh) 基于kmp匹配算法的字符串快速匹配方法
CN106599097B (zh) 海量特征串集合的匹配方法和装置
US20120254190A1 (en) Extracting method, computer product, extracting system, information generating method, and information contents
CN108628907A (zh) 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法
CN107220333B (zh) 一种基于Sunday算法的字符搜索方法
CN108628953A (zh) 一种基于fpga的并行字符串匹配算法
Lee et al. Telescoping filter: A practical adaptive filter
Okanohara et al. An online algorithm for finding the longest previous factors
CN116562297B (zh) 基于HTrie树的中文敏感词变形体识别方法及系统
CN108399152B (zh) 数字查找树的压缩表示方法、系统、存储介质及规则匹配装置
CN113407693B (zh) 一种用于全媒体审读的文本相似度比对方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20200324