CN103425739B - 一种字符串匹配方法 - Google Patents
一种字符串匹配方法 Download PDFInfo
- Publication number
- CN103425739B CN103425739B CN201310287683.9A CN201310287683A CN103425739B CN 103425739 B CN103425739 B CN 103425739B CN 201310287683 A CN201310287683 A CN 201310287683A CN 103425739 B CN103425739 B CN 103425739B
- Authority
- CN
- China
- Prior art keywords
- character
- string
- target
- target string
- coupling
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
Abstract
本发明涉及信息处理技术领域,尤其是一种快速字符串匹配方法。本发明首先对目标字符串进行预先处理,得到其各个字符的一个简单哈希表;当匹配到首个字符后即进行匹配目标字符串的最后一个字符。本发明可以有效提升匹配效果,避免重复匹配效率低下等问题;可以应用于文本编辑器、搜索引擎、全文检索系统等需要用到快速字符串搜索的领域。
Description
技术领域
本发明涉及信息处理技术领域,尤其是一种一种快速字符串匹配方法。
背景技术
在文本编辑器、搜索引擎、数据处理、通信系统等应用中,经常需要在一大段源字符串之中对一个目标字符串进行快速的搜索定位和统计。假设源字符串长度为m,目标字符串长度为n。对于朴素字符串匹配算法而言,比如C标准库函数strstr()所使用的算法;这种算法依次序从头到尾对字符串进行匹配,存在大量的对目标字符串字符的重复匹配,效率低下,最坏情况下的时间复杂度是O(m*n)。对于KMP等改进的匹配算法,其降低了对目标字符串字符的重复匹配,相对朴素算法而言提高了效率,但是仍然存在对整个m长度源字符串的匹配,效率有待进一步提升。
发明内容
本发明解决的技术问题在于提供一种快速的字符串匹配方法;可以有效提升对目标字符串匹配、搜索的效率。
本发明解决上述技术问题的技术方案是:
包括如下步骤,
步骤1:对目标字符串进行预先处理,得到其各个字符的一个简单哈希表,使确定任意一个字符是否从属于目标字符串的时间复杂度为1;
步骤2:开始匹配,查找源字符串中与目标字符串第一个字符匹配的首个字符,如果搜索到源字符串末尾,结束搜索;
步骤3:如匹配到目标字符串的第一个字符,跳转到步骤5;
步骤4:如果不匹配,把源字符的字符指针移向下一个字符,继续步骤2;
步骤5:检查源字符串中以匹配的首个字符为开头的目标字符串长度的最后一个字符是否属于目标字符串中的一个,如果是,则到步骤6,否则到步骤8;
步骤6:检查目标字符串是否全部或部分位于由匹配字符开始到目标字符串长度后范围内的字符串之内并且整个字符串得到匹配,如果匹配,到步骤7,否到步骤8;
步骤7:字符指针从新匹配的首个字符位置处再向后偏移目标字符串长度的偏移量,回到步骤2;
步骤8:字符指针从原来匹配的首个字符位置处再向后偏移目标字符串长度的偏移量,回到步骤2。
本发明的工作原理基于实际应用中的一种高概率的事件,源字符指代要被检索的字符串,目标字符指代要被匹配的字符串:
1、字符串中的字符不是随机字符。
2、因为不是随机字符,也就是字符之间尤其是相邻字符之间是有某种相关关系的。例如,非元音字母旁边出现元音字母的概率就要比非元音字母高,‘我’字旁边出现‘的’字的概率就要远高于‘地’字。相互靠得更近的两个或多个字符,如果匹配了其中一部分,那么其旁边的字符匹配的概率相对更远距离的字符也越高。这个事实等价于距离已匹配部分的字符越远的字符不匹配的概率相对更高。
3、即便是对于完全随机的字符串来说,任意一个字符是欲搜索字符串的一部分的概率也要远低于不是其一部分的概率。如果把这个位于最后的字符属于目标字符串中的一个视为匹配,则如果匹配了目标字符串首个字符但是最后一个字符不匹配(由上面论述可知不匹配的概率要高于匹配),则马上可以肯定从首个到最后一个字符之间的这段字符不用比较就可以确定是不匹配的,从而可以直接忽略这部分字符,直接跳到最后一个字符之后的一个字符,继续剩下的匹配运算。
4、在源字符串中,不匹配的字符串远多于匹配的字符串,因此提高查找不匹配字符串的效率相对提高查找匹配字符串效率有更积极的意义。
5、本算法基于以上这些实际应用中的情况,通过比对最后一个字符,提高匹配“不匹配”字符串的效率从而得到更高的匹配“匹配”字符串的效率。与以上所述条件愈匹配,则效能越高。
6、即便在随机字符的模式匹配中,本算法相对朴素算法也具有效率上的优势。
经测试,本发明所述算法相对朴素字符串匹配算法平均有不低于20%的时间效率优势,可以有效提高字符串匹配的效率。
附图说明
下面结合附图对本发明进一步说明:
图1是本发明的算法流程图;
图2是本发明匹配示例框图。
具体实施方式
如图1所示,本发明以target指代目标字符串,text指代源字符串,pos为源字符串的位置指针,found为匹配到的数目;假设字符为ASCII编码;示例代码以C语言代码给出。
首先,对目标字符串进行预处理,生成一个用于快速检索的简单哈希表,使确定任意一个字符是否从属于目标字符串的时间复杂度为1。
具体程序如下:
然后,对text进行以target为目标的检索,进行如下步骤:
步骤2:查找匹配的首个字符,如果搜索到源字符串末尾,结束搜索;
步骤3:如匹配到目标字符串的第一个字符,跳转到步骤5;
步骤4:如果不匹配,把源字符的字符指针移向下一个字符,继续步骤2;
步骤5:检查源字符串中以匹配的首个字符为开头的最后一个字符是否属于目的字符串中的一个,如果是,则到步骤6,否则到步骤8;
步骤6:检查目标字符串是否全部或部分位于由匹配字符开始到目标字符串长度后范围内的字符串之内并且整个字符串得到匹配,如果匹配,到步骤7,否到步骤8;
步骤7:字符指针从新匹配的首个字符位置处再向后偏移目标字符串长度的偏移量,回到步骤2;
步骤8:字符指针从原来匹配的首个字符位置处再向后偏移目标字符串长度的偏移量,回到步骤2。
具体程序如下:
如图2所示,是本发明匹配字符串的具体示例;其中,目标字符串:HANDLER,源字符串:HEAD AND SHOULDERS。具体匹配如下:
1、如图2a,匹配首个字符,皆为‘H’,匹配成功,如果不匹配,则把源字符串的字符指针后移一个位置;
2、如图2b,匹配最后一个字符,字符‘N’从属于于目标字符串,匹配成功;
3、如图2c,根据匹配的最后一个字符在目标字符串中的位置,移动字符指针;
4、如图2d,把字符指针移动到和目标字符串首个字符‘H’对应的位置处,发现源字符串该位置处是空格,和目标字符串字符‘H’不对应,匹配失败;尝试匹配目标字符串的另外一个‘N’,发现不存在,则此次匹配彻底失败。将字符指针从源字符串中的‘H’处向后移动目标字符串长度的距离,即移动7个位置。
5、然后回到步骤1,继续下一轮匹配。
因此,不论最终能否完整匹配到整个目标字符串,都将最少略过对目标字符串长度的字符的匹配,从而提高效率。
本发明所说明的字符串搜索算法比朴素字符串搜索算法等常规搜索算法的效率要高,可以加快字符串匹配的速度。在简单测试中,对一段包含程序源代码的文本进行指定的字符串检索,得结果如下(Pentium(R)Dual-Core CPUE58003.20GHz,4G,无编译优化):
>>./search list./stringsrc
search text is[list]
strstr()found 42 in 0 sec 350 usec
fastsearch()found 42in 0 sec 267 usec,make 0 step
对存在的字符串的搜索中,本发明的算法时间效率比朴素字符串搜索算法高24%。
>>./search vector./stringsrc
search text is[vector]
strstr()found 0 in 0 sec 335 usec
fastsearch()found 0 in 0 sec 261 usec,make 0 step
对不存在的字符串的搜索中,本发明的算法时间效率比朴素字符串搜索算法高22%。
>>./search ffffffffffffffffffffffffffff./stringsrc
search text is[ffffffffffffffffffffffffffff]
strstr()found 0 in 0 sec 919 usec
fastsearch()found 0 in 0 sec 467 usec,make 0 step
对某些特殊字符串的搜索的时间效率则要高得多,如上面示例则有接近50%的提升。
Claims (1)
1.一种字符串匹配方法,其特征在于:包括如下步骤,
步骤1:对目标字符串进行预先处理,得到其各个字符的一个简单哈希表,使确定任意一个字符是否从属于目标字符串的时间复杂度为1;
步骤2:开始匹配,查找源字符串中与目标字符串第一个字符匹配的首个字符,如果搜索到源字符串末尾,结束搜索;
步骤3:如匹配到目标字符串的第一个字符,跳转到步骤5;
步骤4:如果不匹配,把源字符的字符指针移向下一个字符,继续步骤2;
步骤5:检查源字符串中以匹配的首个字符为开头的目标字符串长度的最后一个字符是否属于目标字符串中的一个,如果是,则到步骤6,否则到步骤8;
步骤6:检查目标字符串是否全部或部分位于由匹配字符开始到目标字符串长度后范围内的字符串之内并且整个字符串得到匹配,如果匹配,到步骤7,否到步骤8;
步骤7:字符指针从新匹配的首个字符位置处再向后偏移目标字符串长度的偏移量,回到步骤2;
步骤8:字符指针从原来匹配的首个字符位置处再向后偏移目标字符串长度的偏移量,回到步骤2。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310287683.9A CN103425739B (zh) | 2013-07-09 | 2013-07-09 | 一种字符串匹配方法 |
EP13883842.0A EP2860645A4 (en) | 2013-07-09 | 2013-08-12 | ALGORITHM FOR QUICK CHARACTERIZATION |
PCT/CN2013/081309 WO2015003421A1 (zh) | 2013-07-09 | 2013-08-12 | 一种可以快速进行字符串匹配的算法 |
US14/397,194 US20160224552A1 (en) | 2013-07-09 | 2013-08-12 | Rapid string matching method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310287683.9A CN103425739B (zh) | 2013-07-09 | 2013-07-09 | 一种字符串匹配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103425739A CN103425739A (zh) | 2013-12-04 |
CN103425739B true CN103425739B (zh) | 2016-09-14 |
Family
ID=49650478
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310287683.9A Active CN103425739B (zh) | 2013-07-09 | 2013-07-09 | 一种字符串匹配方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20160224552A1 (zh) |
EP (1) | EP2860645A4 (zh) |
CN (1) | CN103425739B (zh) |
WO (1) | WO2015003421A1 (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104750683A (zh) * | 2013-12-25 | 2015-07-01 | 中国移动通信集团公司 | 一种字符串匹配方法及装置 |
CN106484730A (zh) * | 2015-08-31 | 2017-03-08 | 北京国双科技有限公司 | 字符串匹配方法和装置 |
CN108108373B (zh) * | 2016-11-25 | 2020-09-25 | 阿里巴巴集团控股有限公司 | 一种名称匹配方法及装置 |
CN106649836B (zh) * | 2016-12-29 | 2019-11-29 | 武汉新芯集成电路制造有限公司 | 一种基于硬件查找表的模式字符的查找方法 |
CN107480479B (zh) * | 2017-08-15 | 2020-08-07 | 北京奇虎科技有限公司 | 应用程序的加固方法及装置、计算设备、计算机存储介质 |
US10169451B1 (en) | 2018-04-20 | 2019-01-01 | International Business Machines Corporation | Rapid character substring searching |
US10747819B2 (en) | 2018-04-20 | 2020-08-18 | International Business Machines Corporation | Rapid partial substring matching |
CN108984695B (zh) * | 2018-07-04 | 2021-04-06 | 科大讯飞股份有限公司 | 一种字符串匹配方法及装置 |
US10782968B2 (en) | 2018-08-23 | 2020-09-22 | International Business Machines Corporation | Rapid substring detection within a data element string |
US10732972B2 (en) | 2018-08-23 | 2020-08-04 | International Business Machines Corporation | Non-overlapping substring detection within a data element string |
CN109977276B (zh) * | 2019-03-22 | 2020-12-22 | 华南理工大学 | 一种基于Sunday算法改进的单模式匹配方法 |
US10996951B2 (en) | 2019-09-11 | 2021-05-04 | International Business Machines Corporation | Plausibility-driven fault detection in string termination logic for fast exact substring match |
US11042371B2 (en) | 2019-09-11 | 2021-06-22 | International Business Machines Corporation | Plausability-driven fault detection in result logic and condition codes for fast exact substring match |
CN111125459A (zh) * | 2019-12-25 | 2020-05-08 | 中消云(北京)物联网科技研究院有限公司 | 字符串处理方法和装置 |
CN112069303B (zh) * | 2020-09-17 | 2022-08-16 | 四川长虹电器股份有限公司 | 字符串的匹配查找方法、装置及终端 |
CN113887223B (zh) * | 2021-09-29 | 2023-08-29 | 苏州浪潮智能科技有限公司 | 一种字符串匹配方法和相关装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2056221A1 (en) * | 2007-10-30 | 2009-05-06 | Mitsubishi Electric Corporation | Split state machines for matching |
CN102063510A (zh) * | 2011-01-17 | 2011-05-18 | 珠海全志科技有限公司 | 字符串的匹配查找方法 |
CN102163221A (zh) * | 2011-04-02 | 2011-08-24 | 华为技术有限公司 | 模式匹配方法和装置 |
CN102831232A (zh) * | 2012-08-30 | 2012-12-19 | 山石网科通信技术(北京)有限公司 | 字符串的匹配方法及装置 |
CN102929900A (zh) * | 2012-01-16 | 2013-02-13 | 中国科学院北京基因组研究所 | 一种字符串匹配的方法及装置 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5228133A (en) * | 1990-10-01 | 1993-07-13 | Carl Oppedahl | Method to perform text search in application programs in computer by selecting a character and scanning the text string to/from the selected character offset position |
JP4328358B2 (ja) * | 2004-12-07 | 2009-09-09 | 日本電信電話株式会社 | 情報圧縮符号化装置、その復号化装置、これらの方法、およびこれらのプログラムとその記録媒体 |
CN1811776A (zh) * | 2006-03-07 | 2006-08-02 | 丁光耀 | 用于信息输入与检索的随机缺省子串模式匹配判定及定位方法 |
CN100421114C (zh) * | 2006-04-21 | 2008-09-24 | 华为技术有限公司 | 基于关键字进行数据匹配查询的方法 |
GB2440560A (en) * | 2006-07-28 | 2008-02-06 | Roke Manor Research | A method of searching for patterns in a text using Boyer-Moore methodology |
US8843508B2 (en) * | 2009-12-21 | 2014-09-23 | At&T Intellectual Property I, L.P. | System and method for regular expression matching with multi-strings and intervals |
US8775457B2 (en) * | 2010-05-31 | 2014-07-08 | Red Hat, Inc. | Efficient string matching state machine |
CN103270699B (zh) * | 2010-12-28 | 2016-08-10 | 国际商业机器公司 | 用于确定搜索起点的装置和方法 |
-
2013
- 2013-07-09 CN CN201310287683.9A patent/CN103425739B/zh active Active
- 2013-08-12 WO PCT/CN2013/081309 patent/WO2015003421A1/zh active Application Filing
- 2013-08-12 EP EP13883842.0A patent/EP2860645A4/en not_active Withdrawn
- 2013-08-12 US US14/397,194 patent/US20160224552A1/en active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2056221A1 (en) * | 2007-10-30 | 2009-05-06 | Mitsubishi Electric Corporation | Split state machines for matching |
CN102063510A (zh) * | 2011-01-17 | 2011-05-18 | 珠海全志科技有限公司 | 字符串的匹配查找方法 |
CN102163221A (zh) * | 2011-04-02 | 2011-08-24 | 华为技术有限公司 | 模式匹配方法和装置 |
CN102929900A (zh) * | 2012-01-16 | 2013-02-13 | 中国科学院北京基因组研究所 | 一种字符串匹配的方法及装置 |
CN102831232A (zh) * | 2012-08-30 | 2012-12-19 | 山石网科通信技术(北京)有限公司 | 字符串的匹配方法及装置 |
Non-Patent Citations (3)
Title |
---|
一种改进的字符串模式匹配算法;胡金柱等;《模式识别与人工智能》;20100215;第104页 * |
一种用于内容过滤和检测的快速多关键词识别算法;宋华等;《计算机研究与发展》;20040616;第941-942页 * |
一种面向中文的快速字串多模式匹配算法;沈洲等;《上海交通大学学报》;20010930;第1288页 * |
Also Published As
Publication number | Publication date |
---|---|
EP2860645A1 (en) | 2015-04-15 |
EP2860645A4 (en) | 2016-04-13 |
WO2015003421A1 (zh) | 2015-01-15 |
US20160224552A1 (en) | 2016-08-04 |
CN103425739A (zh) | 2013-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103425739B (zh) | 一种字符串匹配方法 | |
KR102230661B1 (ko) | Sql 검토 방법, 장치, 서버 및 저장 매체 | |
Ture et al. | No free lunch: brute force vs. locality-sensitive hashing for cross-lingual pairwise similarity | |
CN102831198A (zh) | 一种基于文档签名技术的相似文档识别装置及方法 | |
Vinga et al. | Pattern matching through Chaos Game Representation: bridging numerical and discrete data structures for biological sequence analysis | |
Cheng et al. | Clcminer: detecting cross-language clones without intermediates | |
CN103577598B (zh) | 模式串与文本串的匹配方法和装置 | |
CN105095381A (zh) | 新词识别方法和装置 | |
CN104462041A (zh) | 一种实现对热点事件从开始到结束实现完整检测的方法 | |
US20160196303A1 (en) | String search device, string search method, and string search program | |
CN109828785B (zh) | 一种采用gpu加速的近似代码克隆检测方法 | |
Kadhim et al. | Maximum-shift string matching algorithms | |
US10514889B2 (en) | Multipattern regular expression search systems and methods therefor | |
CN109002423A (zh) | 文本搜索方法及装置 | |
JP2010272006A (ja) | 関係抽出装置、関係抽出方法、及びプログラム | |
CN117390130A (zh) | 一种基于多模态表示的代码搜索方法 | |
CN101271468A (zh) | 一种利用越界保护机制对字符串匹配进行加速的方法 | |
CN102184245A (zh) | 一种海量文本数据关键词的快速查找方法 | |
Zhang | An improved Wu-Manber multiple patterns matching algorithm | |
JP2008243074A (ja) | 文書検索装置、方法及びプログラム | |
CN104461099A (zh) | 一种手写简笔字输入方法和系统 | |
CN102663287A (zh) | 利用编码转化实现基于序列比对的攻击特征提取的方法 | |
Pandey et al. | Plagiarism detection in software using efficient string matching | |
KR101856293B1 (ko) | 회문 정보를 이용하는 패턴 매칭 방법 및 장치 | |
Le et al. | Improving efficiency of incremental mining by trie structure and pre-large itemsets |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder | ||
CP02 | Change in the address of a patent holder |
Address after: 523808 19th Floor, Cloud Computing Center, Chinese Academy of Sciences, No. 1 Kehui Road, Songshan Lake Hi-tech Industrial Development Zone, Dongguan City, Guangdong Province Patentee after: G-Cloud Technology Co., Ltd. Address before: 523808 No. 14 Building, Songke Garden, Songshan Lake Science and Technology Industrial Park, Dongguan City, Guangdong Province Patentee before: G-Cloud Technology Co., Ltd. |