CN111753144B - 一种基于Warshall方法加速epsilon闭包计算的方法及系统 - Google Patents
一种基于Warshall方法加速epsilon闭包计算的方法及系统 Download PDFInfo
- Publication number
- CN111753144B CN111753144B CN202010412343.4A CN202010412343A CN111753144B CN 111753144 B CN111753144 B CN 111753144B CN 202010412343 A CN202010412343 A CN 202010412343A CN 111753144 B CN111753144 B CN 111753144B
- Authority
- CN
- China
- Prior art keywords
- state
- edge
- array
- warshall
- closure
- 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/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
Abstract
本发明提出一种基于Warshall方法加速epsilon闭包计算的方法及系统,针对传统闭包计算整体消耗时间长的缺陷,涉及计算机领域,为了优化闭包算法,利用Warshall方法,在NFA构造DFA的过程中对现有的方法进行了优化,加速了DFA的构造过程。
Description
技术领域
本发明涉及计算机领域,具体涉及一种基于Warshall方法加速epsilon闭包计算的方法及系统。
背景技术
正则表达式匹配通常应用在扫描过滤场景下,在安全检测、信息过滤等应用中发挥着重要作用。通常实现正则表达式匹配需要将多个正则表达式进行解析,形成解析树,根据解析树构造NFA(Nondeterministic Finite Automaton,非确定有限状态自动机),再从NFA转化为DFA(Deterministic Finite Automaton,确定有限状态机)。当待匹配的字符串需要匹配时,从DFA初始状态进行匹配,如果匹配成功,则到达终止状态,报告此正则表达式匹配成功;如果匹配不成功,则无法到达终止状态,或者在其转移过程中就匹配失败。当然,也有直接应用NFA对字符串进行匹配,但是由于空转移或转移状态的不确定性,匹配时间会延长。图1是文本中搜索正则表达式的经典方法。本发明中只讨论将NFA转化为DFA,并使用DFA搜索的匹配方式。
通常从NFA构造DFA的方法仅依赖于那些可到达的状态。该算法使NFA的状态集合标识DFA中的状态,简单的办法是使用布尔数组来表示这些集合。下述的伪代码给出了对NFA中的每个状态s计算epsilon闭包E(s)的算法,其结果是状态s对应的一个状态集合。该算法由开始E(s)={s}开始,重复遍历整个自动机寻找epsilon转移。对于每一个epsilon转移,将目标状态的epsilon闭包加入源状态的epsilon闭包。一直重复这个过程,直到没有新的状态(或闭包)出现。
正则匹配领域中将此种方法称为epsilon闭包算法。而这种方法针对正则表达式为或的规则下效率比较低。正则表达式例如为(AT|GA)((AG|AAA)*),其按照Thompson方法构造的NFA如图2所示,按照传统的epsilon闭包算法构造的DFA如图3所示,构造过程见表1。
表1最终NFA的epsilon闭包E(s)
现有的技术方案对于正则规则为或(例如AA|GA中的“|”)时,在构造NFA时会造成很多空转移状态,在进行闭包运算时,很容易造成状态空间的爆炸,即在从NFA构造DFA的传统算法中会有大量频繁加入的状态集合,使得整个构建DFA过程的时间变得很长。
发明内容
本发明针对传统闭包计算整体消耗时间长的缺陷,提出一种基于Warshall方法加速epsilon闭包计算的方法及系统,为了优化闭包算法,利用Warshall方法,在NFA构造DFA的过程中对现有的方法进行了优化,加速了DFA的构造过程。
为实现上述目的,本发明采用的技术方案如下:
一种基于Warshall方法加速epsilon闭包计算的方法,包括以下步骤:
1)统计NFA的全部的状态集合,存储于一数组A;
2)对于数组A的空转移状态的集合,判断每条出边状态i与入边状态j是否存在空转移边;
3)对数组A进行遍历,如果出边状态i到入边状态j存在一条空转移边且i与j不相等时,对于数组A的任意一入边状态k,直接判断i到k是否存在空转移边,或者判断j到k之间是否存在空转移边,如果存在,则知i到k之间存在空转移边;
4)对于全部的状态集合,从小到大将原状态i依次加入到epsilon闭包集合中,然后重排列新的状态编号,转化为DFA。
进一步地,数组A优选为一维数组或二维数组。
进一步地,数组A的值以二进制存储时,从右边数第j个位置为1或0来分别表示i和j之间的存在边或不存在边。
进一步地,步骤2)采用的方法为:如果出边i到入边j之间存在一条空转移边,则将1左移j位,与数组A的当前值做逻辑或运算,防止多个重复的边出现。
进一步地,步骤3)中判断i到j存在边的方法是:利用Warshall算法,用1左移j位与数组A的关于i到j的值做逻辑与判断,若为1,则存在边。
进一步地,步骤4)采用的方法为:对于全部的状态集合,从小到大依次将原状态i加入到闭包集合中;在遍历到某出边i时,再次从小到大遍历全部的状态集合,假使此时遍历的状态为j,如果满足用1左移j位与当前的数组A的关于i到j的值做逻辑与判断,将此时的状态编号j加入到集合中,直至遍历完整个数组A。
一种基于Warshall方法加速epsilon闭包计算的系统,包括存储器和处理器,该存储器存储由该处理器执行的计算机程序,该计算机程序用于执行上述方法中的各个步骤。
一种存储计算机程序的计算机可读存储介质,该计算机程序当由系统的处理器执行时使得该系统执行上述方法中的各个步骤。
附图说明
图1是文本中搜索正则表达式的经典方法示意图。
图2是正则表达式(AA|GA)((AG|AAA)*)的Thompson自动机构造示意图。
图3是从Thompson NFA构造的DFA示意图。
图4是一种基于Warshall方法加速epsilon闭包计算的方法的流程图。
图5是示例传递闭包示意图。
图6是应用本发明方法进行匹配的示意图。
具体实施方式
为使本发明的技术方案能更明显易懂,特举实施例并结合附图详细说明如下。
本实施例提出一种基于Warshall方法加速epsilon闭包计算的方法,为了更好地说明本方法,本发明将会对所做出的描述进行形式化的定义,下面对其所应用的符号加以说明。
Warshall方法:
表2 Warshall方法所用符号与定义
下面说明阐述下此种方法的具体方式。
Warshall方法:
Warshall方法是离散中的一个二元关系传递闭包的算法。它的主要思想是如果两个节点v1、v2之间有一条边,节点v2与第三个节点v3也有一条边,那么v1与v3之间也会有一条边连接。这种关系可以用关系矩阵或者关系图来表示。形式化描述为:
如果v1→v2,v2→v3,则v1→v3。
传递闭包:设R是集合A上的二元关系,则A上包含R的所有传递关系的交,称为关系R的传递闭包。例如图5中,A={(1,3),(2,1),(2,4),(4,2)},则最终的关系闭包为R+={(1,3),(2,1),(2,2),(2,3),(2,4),(4,1),(4,2),(4,3),(4,4)}。
本方法为Warshall闭包运算的优化算法,利用位向量的存储性,进行逻辑与和或运算,用来表示其是否匹配当前状态,故需要临时数组A来存储现在总的状态集合,如图4所示,具体说明如下:
1预处理阶段,统计全部的状态集合数目为N,创建二维数组A[N][N],初始化设置为0,对于空转移状态的集合依次进行如下操作:
A[i][j]=A[i][j]|(1<<j);
其中,i表示空转移状态集合的出边状态(from),j表示空转移状态集合的入边状态(to);
上述式子的含义为:用A[i][j]来表示边的存在与否,如果存在,则A[i][j]的值以二进制存储时从右边数第j个位置为1,该位置若不存在则为0。如果i到j之间存在一条空转移边,则将1左移j位,与A[i][j]当前值做逻辑或,以防止有多个重复的边出现,对A[i][j]当前值无影响。
然后,对于上述所建立的表A[N][N]进行遍历,运用Warshall算法,同时满足以下条件:
1)A[i][j]&(1<<j)==1(或为真,即true);该式子对是否存在i到j的边做判断,从上述逻辑或运算完后再运用Warshall算法,利用逻辑与做判断,针对以i为出边,判断i到j之间是否存在边,用1左移j位与当前A[i][j]值做逻辑与判断,若为1,则存在边,否则不存在。
2)i与j不相等;
则对于数组A[i][k](0≤k≤N-1,下同)这一行需要做的操作为将A[j][k]这一行所有元素与A[i][k]对应的元素逻辑或,即
A[i][k]=A[i][k]|A[j][k]。
该式子的含义为:在满足存在边和i、j不相等的情况下,对于任意的k,做左侧操作,由于i到j存在一条边,那么i到k之间是否存在边,即A[i][k]值从右数第k位是否为1,分两种情况。第一种是本来就有边,由于是逻辑或运算,不影响当前值A[i][k];第二种是没有边,由传递闭包的性质可知,只需找j到k有无边即可,如果j到k有边,则A[i][k]不为0,否则,A[i][k]还等于原来的值。
2闭包运算:
对于全部的状态集合从小到大,依次现将自身加入到闭包集合中,即将状态i加入到集合E[i]中;
在遍历到某状态i时,即数组A[i][k]这一行,再次从小到大遍历全部的状态集合,假使此时遍历的状态为j,则如果满足以下条件:
A[i][j]&(1<<j)==1(或为真,即true);
则将此时的状态编号j加入到集合E[i]中,直至遍历完全整个A数组。
上述式子的含义为:针对以i为出边,i到j之间是否存在边,用1左移j位与当前的A[i][j]值做逻辑与判断,若为1,则存在边,否则不存在。
当然,在实际计算机编程中,由于状态数目不确定,随着正则表示式的不断加入,状态的数目通常会是一个很大的数字,在存储左移运算时往往会超出位数的限制,所以上述的临时数组A可以利用一维数组,采取左移或右移的方式实现记录当前的闭包集合,因此数组A的维数不做限制,仅仅为了描述算法举例说明方法的思想,另一种存储形式举例如下:
本方法对于在文本匹配、信息过滤及相关正则匹配中的应用场景中均可适用,图6是应用本发明方法进行匹配的示意图,包括以下步骤:
从外部存储输入待匹配的多个正则表达式规则,在内存中先建立解析树并构造NFA;
将所存储的NFA的状态集合及空转移集合初始化,初始化相应的状态数据并添加临时存储的变量;
基于Warshall方法优化原始的闭包算法部件,将转化完成的闭包状态转化为确定性的DFA;
待匹配的数据流从外部存储来匹配正则表达式规则时,返回最终是否匹配及匹配的位置。
下面举例说明具体运算形式。
正则表达式(AA|GA)((AG|AAA)*)所构造的NFA如图2所示,在本发明中空转移的状态集合为:
表3空转移的状态集合出入边表示
序号 | from | to | 序号 | from | to |
1 | 16 | 8 | 8 | 7 | 17 |
2 | 16 | 17 | 9 | 7 | 8 |
3 | 15 | 16 | 10 | 6 | 7 |
4 | 13 | 16 | 11 | 3 | 7 |
5 | 11 | 16 | 12 | 0 | 4 |
6 | 8 | 12 | 13 | 0 | 1 |
7 | 8 | 9 |
Warshall方法:
1)数组A初始化为0,列出如下表所示,由于状态集合总共有18个,数组A过于庞大,所以下面的步骤仅展示排序后相关状态列表。
表4 A数组初始化后的状态
2)A数组预处理空转移状态的集合后的状态,空转移状态集合见表3。
表5 A数组预处理空转移状态的集合后的状态
A数组 | 预处理空转移状态的集合后 | A数组 | 预处理空转移状态的集合后 |
A[16][8] | 1000 0000 | A[7][8] | 1000 0000 |
A[16][17] | 1 0000 0000 0000 0000 | A[7][17] | 1 0000 0000 0000 0000 |
A[15][16] | 1000 0000 0000 0000 | A[6][7] | 100 0000 |
A[13][16] | 1000 0000 0000 0000 | A[3][7] | 100 0000 |
A[11][16] | 1000 0000 0000 0000 | A[0][4] | 1000 |
A[8][12] | 1000 0000 0000 | A[0][1] | 1 |
A[8][9] | 10000 0000 |
3)A数组在运行完Warshall算法后所得到的状态。
表6 A数组完成Warshall方法后的状态
A数组 | Warshall算法 | A数组 | Warshall算法 |
A[16][8] | 1001 1000 0000 | A[7][8] | 1001 1000 0000 |
A[16][17] | 1 0000 0000 0000 0000 | A[7][17] | 1 0000 0000 0000 0000 |
A[15][16] | 1 1000 1001 1000 0000 | A[6][7] | 1 0000 1001 1100 0000 |
A[13][16] | 1 1000 1001 1000 0000 | A[3][7] | 1 0000 1001 1100 0000 |
A[11][16] | 1 1000 1001 1000 0000 | A[0][4] | 1000 |
A[8][12] | 1000 0000 0000 | A[0][1] | 1 |
A[8][9] | 1 0000 0000 |
4)进行闭包运算,现将自身的编号加入闭包集合,后续的闭包运算实际上是对其按照位数的大小加入闭包集合,最终得到闭包集合结果:
表7经过Warshall闭包运算后得到的闭包集合
以下通过实验来验证本发明方法的优越性
规则集:
实验随机选取了snort中包含或(|)的12条规则和构造了一条规则,包含256个字符同时为或(|),具体规则如下所示:
表8规则表
实验环境:
系统:CentOS Linux release 7.2.1511(Core);
CPU:Intel(R)Core(TM)i7-3820 CPU@3.60GHz;
cpu cores:4;
内存:32GB;
硬盘:2T。
积极效果:
统计在各方法下计算闭包的时间,选取每条规则执行的平均值,其结果见下表。
表9实验统计结果
闭包算法 | 计算闭包运算的时间(s/条) |
原始闭包算法 | 334.65 |
Warshall闭包算法 | 0.014 |
可以看出,相比于传统的闭包算法,优化的方法在时间上的优势极大,也可对后面构造确定性DFA的部件提高了效率,从而降低了正则表达式的整体预处理时间。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,本发明的保护范围以权利要求所述为准。
Claims (8)
1.一种基于Warshall方法加速epsilon闭包计算的方法,其特征在于,包括以下步骤:
1)从外部存储输入待匹配的多个正则表达式规则,在内存中先建立解析树并构造NFA;统计非确定有限状态自动机NFA的全部的状态集合,存储于一数组A;
2)对于数组A的空转移状态的集合,判断每条出边状态i与入边状态j是否存在空转移边;
3)对数组A进行遍历,如果出边状态i到入边状态j存在一条空转移边且i与j不相等时,对于数组A的任意一入边状态k,直接判断i到k是否存在空转移边,或者判断j到k之间是否存在空转移边,如果存在,则知i到k之间存在空转移边;
4)对于全部的状态集合,从小到大将原状态i依次加入到epsilon闭包集合中,然后重排列新的状态编号,转化为确定有限状态机DFA;
5)将从外部存储输入的待匹配的文本匹配上述步骤构建的正则表达式规则,然后返回最终是否匹配及匹配的位置,输出到外部存储。
2.如权利要求1所述的方法,其特征在于,数组A优选为一维数组或二维数组。
3.如权利要求2所述的方法,其特征在于,数组A的值以二进制存储时,从右边数第j个位置为1或0来分别表示i和j之间的存在边或不存在边。
4.如权利要求1所述的方法,其特征在于,步骤2)采用的方法为:如果出边i到入边j之间存在一条空转移边,则将1左移j位,与数组A的当前值做逻辑或运算,防止多个重复的边出现。
5.如权利要求1所述的方法,其特征在于,步骤3)中判断i到j存在边的方法是:利用Warshall算法,用1左移j位与数组A的关于i到j的值做逻辑与判断,若为1,则存在边。
6.如权利要求1所述的方法,其特征在于,步骤4)采用的方法为:对于全部的状态集合,从小到大依次将原状态i加入到闭包集合中;在遍历到某出边i时,再次从小到大遍历全部的状态集合,假使此时遍历的状态为j,如果满足用1左移j位与当前的数组A的关于i到j的值做逻辑与判断,将此时的状态编号j加入到集合中,直至遍历完整个数组A。
7.一种基于Warshall方法加速epsilon闭包计算的系统,包括存储器和处理器,该存储器存储由该处理器执行的计算机程序,其特征在于,该计算机程序用于执行上述权利要求1-6任一项所述方法中的各个步骤。
8.一种存储计算机程序的计算机可读存储介质,其特征在于,该计算机程序当由系统的处理器执行时使得该系统执行上述权利要求1-6任一项所述方法中的各个步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010412343.4A CN111753144B (zh) | 2020-05-15 | 2020-05-15 | 一种基于Warshall方法加速epsilon闭包计算的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010412343.4A CN111753144B (zh) | 2020-05-15 | 2020-05-15 | 一种基于Warshall方法加速epsilon闭包计算的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111753144A CN111753144A (zh) | 2020-10-09 |
CN111753144B true CN111753144B (zh) | 2023-10-17 |
Family
ID=72674554
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010412343.4A Active CN111753144B (zh) | 2020-05-15 | 2020-05-15 | 一种基于Warshall方法加速epsilon闭包计算的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111753144B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103259793A (zh) * | 2013-05-02 | 2013-08-21 | 东北大学 | 基于后缀自动机正则引擎构造的深度包检测方法 |
CN109800337A (zh) * | 2018-12-06 | 2019-05-24 | 成都网安科技发展有限公司 | 一种适用于大字母表的多模式正则匹配算法 |
CN111078963A (zh) * | 2019-12-31 | 2020-04-28 | 奇安信科技集团股份有限公司 | Nfa到dfa的转换方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8938454B2 (en) * | 2012-10-10 | 2015-01-20 | Polytechnic Institute Of New York University | Using a tunable finite automaton for regular expression matching |
US8943063B2 (en) * | 2012-10-10 | 2015-01-27 | Polytechnic Institute Of New York University | Generating a tunable finite automaton for regular expression matching |
-
2020
- 2020-05-15 CN CN202010412343.4A patent/CN111753144B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103259793A (zh) * | 2013-05-02 | 2013-08-21 | 东北大学 | 基于后缀自动机正则引擎构造的深度包检测方法 |
CN109800337A (zh) * | 2018-12-06 | 2019-05-24 | 成都网安科技发展有限公司 | 一种适用于大字母表的多模式正则匹配算法 |
CN111078963A (zh) * | 2019-12-31 | 2020-04-28 | 奇安信科技集团股份有限公司 | Nfa到dfa的转换方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111753144A (zh) | 2020-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Dharmapurikar et al. | Fast and scalable pattern matching for content filtering | |
US7725510B2 (en) | Method and system for multi-character multi-pattern pattern matching | |
EP1436718B1 (en) | Method of generating a DFA state machine that groups transitions into classes in order to conserve memory | |
US7411418B2 (en) | Efficient representation of state transition tables | |
US6871262B1 (en) | Method and apparatus for matching a string with multiple lookups using a single associative memory | |
JP4810915B2 (ja) | データ検索装置及び方法、並びにコンピュータ・プログラム | |
US20160028766A1 (en) | Method for compressing matching automata through common prefixes in regular expressions | |
JP2009517782A (ja) | 高性能正規表現パターンマッチングのための方法および装置 | |
US9128686B2 (en) | Sorting | |
US10397263B2 (en) | Hierarchical pattern matching for deep packet analysis | |
CN109800337B (zh) | 一种适用于大字母表的多模式正则匹配算法 | |
Kudłacik et al. | Effective synchronizing algorithms | |
CN103955539B (zh) | 一种获取二进制协议数据中控制字段划分点的方法及装置 | |
CN101500012B (zh) | 一种报文分类方法和系统 | |
Harris | Deterministic algorithms for the Lovász local lemma: simpler, more general, and more parallel | |
US8935270B1 (en) | Content search system including multiple deterministic finite automaton engines having shared memory resources | |
US9900409B2 (en) | Classification engine for data packet classification | |
CN111753144B (zh) | 一种基于Warshall方法加速epsilon闭包计算的方法及系统 | |
CN106469218A (zh) | 一种基于位图的布尔表达式存储、匹配方法和系统 | |
EP1281178B1 (en) | Multiple entry matching in a content addressable memory | |
US20080306948A1 (en) | String and binary data sorting | |
García et al. | Learning automata teams | |
Selig | The stochastic sandpile model on complete graphs | |
CN109086815B (zh) | 基于fpga的决策树模型中的浮点数离散化方法 | |
CN111753150B (zh) | 一种基于图搜索方法加速epsilon闭包计算的方法及系统 |
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 |