CN107220333B - 一种基于Sunday算法的字符搜索方法 - Google Patents
一种基于Sunday算法的字符搜索方法 Download PDFInfo
- Publication number
- CN107220333B CN107220333B CN201710375615.6A CN201710375615A CN107220333B CN 107220333 B CN107220333 B CN 107220333B CN 201710375615 A CN201710375615 A CN 201710375615A CN 107220333 B CN107220333 B CN 107220333B
- Authority
- CN
- China
- Prior art keywords
- string
- characters
- character
- text
- pattern string
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 23
- 230000009191 jumping Effects 0.000 claims description 25
- 238000013507 mapping Methods 0.000 claims description 3
- 238000001514 detection method Methods 0.000 description 2
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 241000700605 Viruses Species 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
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/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
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
本发明属于计算机软件应用领域,公开了一种基于Sunday算法的字符搜索方法。通过判断文本窗口的末位和文本窗口外的下一位字符的组合是否出现在模式串中,来对模式串和文本模式串进行匹配,若匹配成功,程序结束;若匹配不成功,则移动文本窗口,继续利用上述的方法进行判断,直到文本窗口到达文本字符串的末端或者匹配成功,程序才会结束;利用此方法,可有效的减小原算法的无效匹配次数,提升文本的匹配效率。
Description
技术领域
本发明涉及字符搜索,特别是一种基于Sunday算法的字符搜索方法,用于计算机网络领域中对字符进行搜索。
背景技术
字符串是计算机科学中常见的基本概念,搜索问题也是计算机科学中的基本问题。随着互联网的日渐庞大,信息也是越来越多,如何在海量的信息中快速查找自己所要的信息是网络搜索研究的热点所在;在这其中,字符串匹配算法起着非常重要的作用,一个高效的字符串匹配算法,可以极大的提高搜索的效率和质量。字符串匹配在网络领域有着广泛的应用。比如,拼写检查、语言翻译、数据压缩、搜索引擎、网络入侵检测等。
现有的常见的字符串匹配算法有Brute force、KMP、Boyer Moore、Sunday、robin_karp和bitap等。其中,Sunday算法是平均效率较高的一种匹配方案。
Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法。其核心思想是:在匹配过程中,模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较,它在发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配,从而提高了匹配效率。
Sunday算法思想跟BM算法很相似,在匹配失败时关注的是文本串中参加匹配的最末位字符的下一位字符。如果该字符没有在匹配串中出现则直接跳过,即移动步长=匹配串长度+1;否则,同BM算法一样其移动步长=匹配串中最右端的该字符到末尾的距离+1。
Sunday算法在模式串很长的时候(很多实际应用中,模式串都会很长),文本窗口外下一个字符在模式串中出现的概率会很高,这样会增加很多无效匹配,由此Sunday算法的效率会显著降低。
发明内容
基于以上技术问题,本发明提供了一种基于Sunday算法的字符搜索方法,从而解决了在字符搜索中产生很多无效匹配的技术问题。
本发明的技术方案如下:
一种基于Sunday算法的字符搜索方法,包括以下步骤:
步骤1:利用模式串中相邻两字符的信息构建辅助数组,所述模式串为待匹配的字符串;
步骤2:文本窗口与文本字符串左对齐,所述文本字符串为待搜索文本,所述文本窗口在所述文本字符串上滑动;利用所述辅助数组判断所述文本窗口内最后两个字符是否在模式串中出现;若未出现,跳转到步骤4;若出现,则将模式串中出现的字符与所述最后两个字符对齐,判断模式串与文本字符串对应位置上的字符是否匹配,若匹配,则匹配成功程序结束;若不匹配,则跳转到步骤3;
步骤3:采用Sunday算法进行下一次的匹配和跳转,若采用Sunday算法匹配成功,则程序结束;若采用Sunday算法匹配失败,则判断Sunday算法跳转的长度是否超过文本窗口的长度,若超过文本窗口长度,则跳转到步骤4;若未超过文本窗口长度,则重复步骤3;
步骤4:文本窗口向右移动J个字符长度,将文本窗口中的末位字符和文本窗外与所述末位字符相邻的字符作为组合字符,利用辅助数组判断所述组合字符是否在模式串中出现;若出现,跳转到步骤5;若未出现,判断文本窗口是否超出文本字符串,若超出,则匹配失败程序结束;若未超出,重复步骤4的内容;其中模式串的长度和文本窗口的长度均为J个字符长度;
步骤5:模式串中出现的字符与所述组合字符对齐,判断模式串与文本字符串对应位置上的字符是否匹配;若匹配则匹配成功程序结束;若不匹配,跳转到步骤3。
进一步的,步骤1中辅助数组构建方式如下:
S201:利用模式串中字符的ASCII码值和设定的index值,计算模式串中相邻两字符的哈希值,采用如下公式:
H[i]=A[i]×index+A[i+1]×(index+1) (1)
其中,i表示模式串中字符的位置序号;H[i]表示模式串中相邻两字符的哈希值;A[i]表示第i个字符的ASCII码值;
S202:利用所有字符两两组合产生的最大哈希值作为辅助数组中元素的个数,且字符两两组合产生的哈希值的大小为所述元素的位置序号;
S203:将S201中计算出的哈希值映射到辅助数组中,具体方式如下:
哈希值H[i]对应位置上的元素为1,若模式串中两组及以上相邻两字符组合产生的哈希值H[i]相同,则将该哈希值H[i]对应位置上的元素设为大于1的数,辅助数组中其余位置上的元素均为0。
进一步的,所述利用辅助数组进行判断方法为:计算文本字符串中需要判断的相邻两字符的哈希值,利用该哈希值查找辅助数组中对应位置上的元素,若元素为1,则代表文本字符串中相邻两字符与模式串匹配或出现在模式串中;若元素为0,则代表文本字符串中相邻两字符与模式串不匹配或未出现在模式串中;若元素为大于1的数,则代表该字符组合与其余字符组合的哈希值相同,则进行步骤3的内容。
综上所述,由于采用了上述技术方案,本发明的有益效果是:
采用字符的ASCII值和index值进行哈希值的计算,简便易行;利用组合字符形式来进行匹配,可有效的降低无效匹配的概率,从而提高Sunday算法的效率。
模式串一旦确定,通过预处理得出辅助数组后再匹配,提高在实际应用中的使用效率;比如网络入侵中恶意代码的检测、论文检索中大段文本的搜索,病毒多特征扫描,由于这些应用的模式串一般都很长,所以在本发明的应用上能有较大效率的提升。
附图说明
图1是本发明的流程图;
图2是本发明的实验结果图
具体实施方式
本说明书中公开的所有特征,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。
下面结合附图对本发明作详细说明。
一种基于Sunday算法的字符搜索方法,包括以下步骤:
步骤1:利用模式串中相邻两字符的信息构建辅助数组,所述模式串为待匹配的字符串;
辅助数组构建方式如下:
S201:利用模式串中字符的ASCII码值和设定的index值,计算模式串中相邻两字符的哈希值,采用如下公式:
H[i]=A[i]×index+A[i+1]×(index+1) (2)
其中,i表示模式串中字符的位置序号;H[i]表示模式串中相邻两字符的哈希值;A[i]表示第i个字符的ASCII码值;
S202:利用所有字符两两组合产生的最大哈希值作为辅助数组中元素的个数,且字符两两组合产生的哈希值的大小为所述元素的位置序号;
S203:将S201中计算出的哈希值映射到辅助数组中,具体方式如下:
哈希值H[i]对应位置上的元素为1,若模式串中两组及以上相邻两字符组合产生的哈希值H[i]相同,则将该哈希值H[i]对应位置上的元素设为大于1的数,辅助数组中其余位置上的元素均为0。
步骤2:文本窗口与文本字符串左对齐,所述文本字符串为待搜索文本,所述文本窗口在所述文本字符串上滑动;计算所述文本窗口内最后两个字符的哈希值,在辅助数组中,若计算出的哈希值对应位置上的元素为0,则代表最后两个字符未出现在模式串中,跳转到步骤4;若计算出的哈希值对应位置上的元素为1,则代表则代表最后两个字符出现在模式串中,则将模式串中出现的字符与所述最后两个字符对齐,判断模式串与文本字符串对应位置上的字符是否匹配,若匹配,则匹配成功程序结束;若不匹配,则跳转到步骤3;若计算出的哈希值对应位置上的元素为大于1的值,则代表存在另外组合字符的哈希值与该哈希值相同,为减小错误率,跳转到步骤3。
步骤3:采用Sunday算法进行下一次的匹配和跳转,若采用Sunday算法匹配成功,则程序结束;若采用Sunday算法匹配失败,则判断Sunday算法跳转的长度是否超过文本窗口的长度,若超过文本窗口长度,则跳转到步骤4;若未超过文本窗口长度,则重复步骤3;
步骤4:文本窗口向右移动J个字符长度,将文本窗口中的末位字符和文本窗外与所述末位字符相邻的字符作为组合字符,计算所述组合字符的哈希值,在辅助数组中,若计算出的哈希值对应位置上的元素为0,则代表最后两个字符未出现在模式串中,判断文本窗口是否超出文本字符串,若超出,则匹配失败程序结束;若未超出,重复步骤4的内容;若计算出的哈希值对应位置上的元素为1,则代表则代表最后两个字符出现在模式串中,跳转到步骤5;若计算出的哈希值对应位置上的元素为大于1的值,则代表存在另外组合字符的哈希值与该哈希值相同,为减小错误率,跳转到步骤3;其中模式串的长度和文本窗口的长度均为J个字符长度;
步骤5:模式串中出现的字符与所述组合字符对齐,判断模式串与文本字符串对应位置上的字符是否匹配;若匹配则匹配成功程序结束;若不匹配,跳转到步骤3。
本发明的工作原理是:构建辅助数组,文本窗口在文本字符串上滑动,滑动长度为模式串的长度;将文本窗口的最后一个字符与文本窗外的下一个字符进行组合,通过辅助数组来判断该字符组合是否出现在模式串中,以此来对字符串进行匹配。
下面,结合具体实施例来对本发明做进一步详细说明。
具体实施例
具体实施例1
以下为本发明C语言的实现程序:
具体实施例2
以下为本发明的实验结果图,具体为与Sunday算法的效率比较图。
生成10KB的随机纯英文字母和数字作为文本字符串,选取特定特点的字符串作模式串,用原Sunday算法和本发明采用的算法进行搜索,比较它们的实际效率,重复调用1000次求总时间(单位:毫秒),得出下列统计图。
图中,A代表Sunday算法,B代表本发明采用的算法;
柱体1采用的模式串为:abcdef;
柱体2采用模式串为:abcdefghijklmnopqrstuvwxyz;
柱体3采用模式串为:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;
柱体4采用模式串为:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567
如上所述即为本发明的实施例。本发明不局限于上述实施方式,任何人应该得知在本发明的启示下做出的结构变化,凡是与本发明具有相同或相近的技术方案,均落入本发明的保护范围之内。
Claims (3)
1.一种基于Sunday算法的字符搜索方法,其特征在于:包括以下步骤:
步骤1:利用模式串中相邻两字符的信息构建辅助数组,所述模式串为待匹配的字符串;
步骤2:文本窗口与文本字符串左对齐,所述文本字符串为待搜索文本,所述文本窗口在所述文本字符串上滑动;利用所述辅助数组判断所述文本窗口内最后两个字符是否在模式串中出现;若未出现,跳转到步骤4;若出现,则将模式串中出现的字符与所述最后两个字符对齐,判断模式串与文本字符串对应位置上的字符是否匹配,若匹配,则匹配成功程序结束;若不匹配,则跳转到步骤3;
步骤3:采用Sunday算法进行下一次的匹配和跳转,若采用Sunday算法匹配成功,则程序结束;若采用Sunday算法匹配失败,则判断Sunday算法跳转的长度是否超过文本窗口的长度,若超过文本窗口长度,则跳转到步骤4;若未超过文本窗口长度,则重复步骤3;
步骤4:文本窗口向右移动J个字符长度,将文本窗口中的末位字符和文本窗外与所述末位字符相邻的字符作为组合字符,利用辅助数组判断所述组合字符是否在模式串中出现;若出现,跳转到步骤5;若未出现,判断文本窗口是否超出文本字符串,若超出,则匹配失败程序结束;若未超出,重复步骤4的内容;其中模式串的长度和文本窗口的长度均为J个字符长度;
步骤5:模式串中出现的字符与所述组合字符对齐,判断模式串与文本字符串对应位置上的字符是否匹配;若匹配则匹配成功程序结束;若不匹配,跳转到步骤3。
2.根据权利要求1所述的一种基于Sunday算法的字符搜索方法,其特征在于:步骤1中辅助数组构建方式如下:
S201:利用模式串中字符的ASCII码值和设定的index值,计算模式串中相邻两字符的哈希值,采用如下公式:
H[i]=A[i]×index+A[i+1]×(index+1)
其中,i表示模式串中字符的位置序号;H[i]表示模式串中相邻两字符的哈希值;A[i]表示第i个字符的ASCII码值;
S202:利用所有字符两两组合产生的最大哈希值作为辅助数组中元素的个数,且字符两两组合产生的哈希值的大小为所述元素的位置序号;
S203:将S201中计算出的哈希值映射到辅助数组中,具体方式如下:
哈希值H[i]对应位置上的元素为1,若模式串中两组及以上相邻两字符组合产生的哈希值H[i]相同,则将该哈希值H[i]对应位置上的元素设为大于1的数,辅助数组中其余位置上的元素均为0。
3.根据权利要求2所述的一种基于Sunday算法的字符搜索方法,其特征在于:所述利用辅助数组进行判断方法为:计算文本字符串中需要判断的相邻两字符的哈希值,利用该哈希值查找辅助数组中对应位置上的元素,若元素为1,则代表文本字符串中相邻两字符与模式串匹配或出现在模式串中:若元素为0,则代表文本字符串中相邻两字符与模式串不匹配或未出现在模式串中;若元素为大于1的数,则代表该字符组合与其余字符组合的哈希值相同,则进行步骤3的内容。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710375615.6A CN107220333B (zh) | 2017-05-24 | 2017-05-24 | 一种基于Sunday算法的字符搜索方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710375615.6A CN107220333B (zh) | 2017-05-24 | 2017-05-24 | 一种基于Sunday算法的字符搜索方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107220333A CN107220333A (zh) | 2017-09-29 |
CN107220333B true CN107220333B (zh) | 2020-01-31 |
Family
ID=59944598
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710375615.6A Expired - Fee Related CN107220333B (zh) | 2017-05-24 | 2017-05-24 | 一种基于Sunday算法的字符搜索方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107220333B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109348304B (zh) * | 2018-09-30 | 2021-04-27 | 武汉斗鱼网络科技有限公司 | 一种弹幕数据的校验方法、装置及终端 |
CN109977276B (zh) * | 2019-03-22 | 2020-12-22 | 华南理工大学 | 一种基于Sunday算法改进的单模式匹配方法 |
CN111814009B (zh) * | 2020-06-28 | 2022-03-01 | 四川长虹电器股份有限公司 | 一种基于搜索引擎检索信息的模式匹配方法 |
CN112671413B (zh) * | 2020-12-25 | 2022-09-06 | 浪潮云信息技术股份公司 | 基于LZSS算法和Sunday算法的数据压缩方法及*** |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20120063879A (ko) * | 2010-12-08 | 2012-06-18 | 서울대학교산학협력단 | 다중 바이트 문자 집합 텍스트에서의 문자열 일치 검색 방법 |
CN104519056A (zh) * | 2014-12-15 | 2015-04-15 | 广东科学技术职业学院 | 一种基于双跳跃的单模式匹配方法 |
-
2017
- 2017-05-24 CN CN201710375615.6A patent/CN107220333B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20120063879A (ko) * | 2010-12-08 | 2012-06-18 | 서울대학교산학협력단 | 다중 바이트 문자 집합 텍스트에서의 문자열 일치 검색 방법 |
CN104519056A (zh) * | 2014-12-15 | 2015-04-15 | 广东科学技术职业学院 | 一种基于双跳跃的单模式匹配方法 |
Non-Patent Citations (3)
Title |
---|
Poster:A Y_C sunday algorithm based on improved sunday algorithm;Yang Z等;《International conference oncommunications & networking in china》;20151231;正文第680-681页 * |
Sunday字符串匹配算法的效率改进;徐珊等;《计算机工程与应用》;20111231;正文第96-98页 * |
改进的SUnday模式匹配算法;万晓榆等;《计算机工程》;20090430;正文第125-126页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107220333A (zh) | 2017-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107220333B (zh) | 一种基于Sunday算法的字符搜索方法 | |
EP2585962B1 (en) | Password checking | |
JP3889762B2 (ja) | データ圧縮方法、プログラム及び装置 | |
CN109977276B (zh) | 一种基于Sunday算法改进的单模式匹配方法 | |
JP5862413B2 (ja) | 情報変換規則生成プログラム、情報変換規則生成装置および情報変換規則生成方法 | |
EP3179383A1 (en) | Device and method for error correction in data search | |
JP2013206187A (ja) | 情報変換装置、情報検索装置、情報変換方法、情報検索方法、情報変換プログラム、情報検索プログラム | |
JP6447161B2 (ja) | 意味構造検索プログラム、意味構造検索装置、及び意味構造検索方法 | |
JP4114600B2 (ja) | 可変長文字列検索装置及び可変長文字列検索方法並びにプログラム | |
CN111801665A (zh) | 用于大数据应用的分层局部敏感哈希(lsh)分区索引 | |
CN111382298A (zh) | 基于图片内容的图像检索方法、装置与电子设备 | |
CN112163145A (zh) | 基于编辑距离与余弦夹角的网站检索方法、装置及设备 | |
CN101685502A (zh) | 模式匹配方法及装置 | |
CN113626645B (zh) | 分级优化的高效密文模糊检索方法及相关设备 | |
CN116975864A (zh) | 恶意代码检测方法、装置、电子设备及存储介质 | |
CN1243431C (zh) | 宽带网络通信产品的通用路由平台命令行的解析方法 | |
CN110909214A (zh) | 基于kmp匹配算法的字符串快速匹配方法 | |
US20220171815A1 (en) | System and method for generating filters for k-mismatch search | |
CN113065419B (zh) | 一种基于流量高频内容的模式匹配算法及*** | |
CN115088038A (zh) | 基于新上下文的经比对的测序数据中的改进质量值压缩框架 | |
CN109710607A (zh) | 一种面向高维大数据的基于权重求解的哈希查询方法 | |
Petri et al. | Efficient indexing algorithms for approximate pattern matching in text | |
CN109857264B (zh) | 一种基于空间键位的拼音纠错方法及装置 | |
CN107798060B (zh) | 一种实时流式数据处理应用软件特征识别方法 | |
Rădescu et al. | The Original Method of Fixed Constraints Transform for Lossless Text Compression |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20200131 |
|
CF01 | Termination of patent right due to non-payment of annual fee |