[发明专利]一种快速进行多字符串匹配的方法有效
申请号: | 201911068908.5 | 申请日: | 2019-11-04 |
公开(公告)号: | CN110825925B | 公开(公告)日: | 2023-05-26 |
发明(设计)人: | 沈华伟 | 申请(专利权)人: | 沈华伟 |
主分类号: | G06F16/903 | 分类号: | G06F16/903 |
代理公司: | 上海思牛达专利代理事务所(特殊普通合伙) 31355 | 代理人: | 雍常明 |
地址: | 116000 辽宁省大连*** | 国省代码: | 辽宁;21 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 快速 进行 多字 匹配 方法 | ||
1.一种快速进行多字符串匹配的方法,其特征在于,包括以下步骤:
S1、当程序在获取到关键词表之后自动产生并构造一张字符定位表,所述字符定位表的每一行是所述关键词表里各个关键词内所有可能出现的字符,以字典顺序(A~Z,a~z,0~9)保存,第N列是该字符在要进行匹配的关键词中出现在第N位的关键词的编号集合;
S2、程序自左向右逐个扫描输入字符,并执行运算过程;
所述运算过程包括以下步骤:
(1)、定义候选集合s=();定义临时候选集temp_s=();定义单词内位置指示器idx=0;定义输入字符串中,各个单词之间的分隔符为空白符(ASCII 0x20);
(2)、从输入流中读取一个字符,针对该字符,执行以下运算,若:
该字符为分隔符,执行运算步骤(3);
该字符为非分隔符,执行运算步骤(4);
该字符为输入串末尾(0x00),完成运算,退出匹配程序;
(3)、针对候选集s的情况,分别进行以下运算,若:
候选集s为空集合,匹配失败,将临时候选集temp_s重置为空集合,单词内位置指示器idx重置为0,连续读取输入字符直到读取到分隔符,执行运算步骤(2);
候选集s为非空集合,查找s中保存的关键词编号所对应的关键词中,是否存在一个关键词w,其长度与当前的单词内位置指示器idx的值相等;若存在,则匹配成功,匹配到关键词w,将临时候选集temp_s重置为空集合,单词内位置指示器idx重置为0,执行运算步骤(2);若s中保存的关键词编号所对应的关键词中,不存在长度与当前的单词内位置指示器idx的值相等的关键词,则匹配失败;连续读取输入字符直到读取到分隔符,将候选集s与临时候选集temp_s全部重置为空集合,单词内位置指示器idx重置为0,执行运算步骤(2);
(4)、由于字符定位表在构造时以字典顺序(A~Z,a~z,0~9)保存,故可以常数时间复杂度O(1)查找到当前读取到的字符在字符定位表中的行,以及当前读取到的字符在当前单词中的位置idx所对应的列,由此得到字符定位表中对应的单元格中,该字符出现在idx位置的关键词集合d;针对集合d执行以下运算,若:
集合d为空集合,执行运算步骤(3);
集合d为非空集合,将集合d与候选集s取交集,赋予临时候选集temp_s,temp_s=d∩s,执行运算步骤(5);
(5)、针对临时候选集temp_s,若:
临时候选集temp_s为空集合,执行运算步骤(3);
临时候选集temp_s为非空集合,将临时候选集temp_s赋予候选集s,形成新的候选集s,s=temp_s,单词内位置指示器idx的值加1,idx=idx+1,执行运算步骤(2)。
2.根据权利要求1所述的一种快速进行多字符串匹配的方法,其特征在于:针对上述运算步骤(3),根据匹配策略进行调整,若算法要求的匹配策略为贪心匹配,则如上文所述,在候选集s中找到长度与当前idx值相等的关键字,即为匹配的关键字;若算法要求的匹配策略为非贪心匹配,则必须在当前读取输入流的字符为分隔符时,从s中查找与当前idx值相等的关键字,找到即为匹配成功,未找到即为匹配失败,继续上述运算步骤(2)。
3.根据权利要求1所述的一种快速进行多字符串匹配的方法,其特征在于:本方法的输入之一是一张关键词表,关键词表的每一行有且仅有一个关键词,关键词表的每一行被单独赋予一个从0开始的编号,关键词表中的每一行同时记录关键词的长度。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于沈华伟,未经沈华伟许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911068908.5/1.html,转载请声明来源钻瓜专利网。