CN111753150A - 一种基于图搜索方法加速epsilon闭包计算的方法及系统 - Google Patents
一种基于图搜索方法加速epsilon闭包计算的方法及系统 Download PDFInfo
- Publication number
- CN111753150A CN111753150A CN202010412344.9A CN202010412344A CN111753150A CN 111753150 A CN111753150 A CN 111753150A CN 202010412344 A CN202010412344 A CN 202010412344A CN 111753150 A CN111753150 A CN 111753150A
- Authority
- CN
- China
- Prior art keywords
- state
- stack
- closure
- pushed
- outgoing
- 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.)
- Granted
Links
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/9032—Query formulation
-
- 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)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种基于图搜索方法加速epsilon闭包计算的方法及系统,涉及计算机领域,针对传统闭包计算整体消耗时间长的缺陷,为了优化闭包算法,利用图搜索的方法,在NFA构造DFA的过程中对现有的方法进行优化,加速了DFA的构造过程。
Description
技术领域
本发明涉及计算机领域,具体涉及一种基于图搜索方法加速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过程的时间变得很长。
发明内容
本发明针对传统闭包计算整体消耗时间长的缺陷,提出一种基于图搜索方法加速epsilon闭包计算的方法及系统,为了优化闭包算法,利用图搜索的方法,在NFA构造DFA的过程中对现有的方法进行优化,加速了DFA的构造过程。
为实现上述目的,本发明采用的技术方案如下:
一种基于图搜索方法加速epsilon闭包计算的方法,包括以下步骤:
将NFA状态下空转移集合的出边状态和入边状态按照入边状态编号由大到小排序,将排序第一的状态作为当前状态开始计算;
每次循环当前状态时,首先默认所有状态都未被标注过,利用一个栈来标注出已经计算过的空转移状态,标注出所有NFA未进栈的状态和已进栈的状态,将当前状态压入栈中并标注为已进栈,未入栈表示还未标注;然后弹出栈顶元素并加入到当前闭包集合中,对弹出栈顶元素的状态能到达并未标注过的空转移边,即出边状态压进栈中,便于后续遍历栈中含有空转移边状态;
如果对应入边的出边状态已经进栈,则继续遍历,否则查询该出边状态的闭包集合并判断是否为空,如果不为空,则将出边状态对应的闭包集合加入到当前状态的闭包集合中,否则将出边状态压入栈中并标记为已经进栈;
按照上述步骤直到遍历完所有的状态集合至栈中元素为空为止,找出全部的闭包集合,转化为DFA。
进一步地,通过标注flag的方式标注出所有NFA未进栈的状态和已进栈的状态。
一种基于图搜索方法加速epsilon闭包计算的系统,包括存储器和处理器,该存储器存储由该处理器执行的计算机程序,该计算机程序用于执行上述方法中的各个步骤。
一种存储计算机程序的计算机可读存储介质,该计算机程序当由系统的处理器执行时使得该系统执行上述方法中的各个步骤。
附图说明
图1是文本中搜索正则表达式的经典方法示意图。
图2是正则表达式(AA|GA)((AG|AAA)*)的Thompson自动机构造示意图。
图3是从Thompson NFA构造的DFA示意图。
图4是一种基于图搜索方法加速epsilon闭包计算的方法的流程图。
图5是当前处理的状态编号s=17时,经图搜索方法得出的栈stack、flag数组和闭包集合E的变化示意图。
图6是当前处理的状态编号s=16时,经图搜索方法得出的第一次栈stack、flag数组和闭包集合E的变化示意图。
图7是当前处理的状态编号s=16时,经图搜索方法得出的第二次栈stack、flag数组和闭包集合E的变化示意图。
图8是当前处理的状态编号s=16时,经图搜索方法得出的最终栈stack、flag数组示意图。
图9是应用本发明方法进行匹配的示意图。
具体实施方式
为使本发明的技术方案能更明显易懂,特举实施例并结合附图详细说明如下。
为了更好地说明本发明方法,本实施例对其所做出的描述进行形式化的定义,下面对其所应用的符号加以说明。
图搜索方法:
表2图搜索方法符号及定义
下面说明阐述下本方法的具体方式。
图搜索方法:
图搜索的方法是Floyd算法的一种变体,是为求出多源最短路径(All PairsShortest Path,APSP)长度所应用的算法。它的主要思想是将图结构转化为邻接矩阵或邻接链表,在邻接矩阵或者邻接链表中利用动态规划的方法不断寻找两点间的最短距离。
Floyd算法描述:
a.从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。
b.对于每一对顶点u和v,看看是否存在一个顶点w使得从u到w再到v比己知的路径更短。如果是,更新它。其伪代码如下:
图搜索Floyd的算法运用到闭包算法中去除了动态规划中寻找最短路径的思想,作为本发明方法的核心算法,处理过程如图4所示,具体说明如下。
1.将NFA状态下转移集合的入边状态(from)和出边状态(to)按照状态顺序进行倒序排序,从最高序号即第一个的状态作为当前状态s开始计算,转到步骤2;
2.对所有状态标注flag为0,表示还未进栈,如果flag为1,则说明已经进栈,待计算,转到步骤3;
3.将当前状态s的flag[s]=1,且当前状态s压入栈stack中,首先将栈顶元素j加入到当前闭包集合E[s]中,然后输出栈顶元素,从状态编号由小到大遍历含有空转移边状态的集合,寻找同时满足以下两个条件的状况:
1)入边的状态编号为j;
2)出边状态编号t对应的flag为0;
如果满足以上两个条件,转到步骤4,否则继续遍历含有空转移边状态的集合并寻找满足的条件;
4.此时,记录下出边的状态编号t,查询当前E[t]中包含的闭包集合,如果不为空,将其加入到E[s]中,否则,将t压入栈stack中,并记录t状态下的flag为1。然后转到步骤5;
5.如果栈stack不为空,转到步骤3,否则如果当前s不小于0,则s=s-1,转到步骤2,直到s小于0,得到最终的闭包集合E,转化为DFA。
下面举例说明具体运算形式。
正则表达式(AA|GA)((AG|AAA)*)所构造的NFA如图4所示,在本发明中空转移的状态集合为:
表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 |
图搜索方法:
上述表3已经按照空转移状态集合出边的倒序进行排列,按照图搜索的方法,由于全体的状态集合总数为18,s最大为17。
第一步:s=17时,各部分存储结构和闭包集合变化如图5所示.
第二步:s=16时,由于此时栈stack为空,flag会全部置为0,由于编号16是空转移状态集合的入边,并且有两条,分别是(16,17),(16,8),经过算法的步骤3,可以得到如图6所示的变化。
由于现在的栈不为空,按照算法的步骤可以得出如图7所示的变化。
由此最终得到s=16时的结果如图8所示。
和闭包集合E的变化,其中flag数组为了简便书写,代表编号16、17、8、9、12都标记为1。
由此按照其算法步骤,当s不断减小时,得出的闭包集合见下表:
表4经过图搜索闭包运算后得到的闭包集合
可看到除了跟表1中的闭包集合(闭包集合是顺序无关的)的顺序有些差异外,得到的结果是一致的。
图9是本发明方法的一种应用,具体说明如下:
从外部存储输入待匹配的多个正则表达式规则,在内存中先建立解析树并构造NFA;
将所存储的NFA的状态集合及空转移集合初始化,初始化相应的状态数据并添加临时存储的变量;
基于图搜索方法优化原始的闭包算法,将转化完成的闭包状态转化为DFA;
待匹配的数据流从外部存储来匹配规则时,返回结果部件,返回最终是否匹配及匹配位置。
以下通过实验来验证本发明方法的优越性
规则集:
实验随机选取了snort中包含或(|)的12条规则和构造了一条规则,包含256个字符同时为或(|),具体规则如下所示:
表5规则表
实验环境:
系统:CentOS Linux release 7.2.1511(Core);
CPU:Intel(R)Core(TM)i7-3820 CPU@3.60GHz;
cpu cores:4;
内存:32GB;
硬盘:2T。
积极效果:
统计在各方法下计算闭包的时间,选取每条规则执行的平均值,其结果见下表。
表6实验统计结果
闭包算法 | 计算闭包运算的时间(s/条) |
原始闭包算法 | 334.65 |
图搜索闭包算法 | 0.011 |
可以看出,相比于传统的闭包算法,优化的方法在时间上的优势极大,也可对后面构造确定性DFA的部件提高了效率,从而降低了正则表达式的整体预处理时间。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,本发明的保护范围以权利要求所述为准。
Claims (4)
1.一种基于图搜索方法加速epsilon闭包计算的方法,其特征在于,包括以下步骤:
将非确定有限状态自动机NFA状态下空转移集合的出边状态和入边状态按照入边状态编号由大到小排序,将排序第一的状态作为当前状态开始计算;
每次循环当前状态时,首先默认所有状态都未被标注过,利用一个栈来标注出已经计算过的空转移状态,标注出所有NFA未进栈的状态和已进栈的状态,将当前状态压入栈中并标注为已进栈,未入栈表示还未标注;然后弹出栈顶元素并加入到当前闭包集合中,对弹出栈顶元素的状态能到达并未标注过的空转移边,即出边状态压进栈中,便于后续遍历栈中含有空转移边状态;
如果对应入边的出边状态已经进栈,则继续遍历,否则查询该出边状态的闭包集合并判断是否为空,如果不为空,则将出边状态对应的闭包集合加入到当前状态的闭包集合中,否则将出边状态压入栈中并标记为已经进栈;
按照上述步骤直到遍历完所有的状态集合至栈中元素为空为止,找出全部的闭包集合,转化为确定有限状态机DFA。
2.如权利要求1所述的方法,其特征在于,通过标注flag的方式标注出所有NFA未进栈的状态和已进栈的状态。
3.一种基于图搜索方法加速epsilon闭包计算的系统,包括存储器和处理器,该存储器存储由该处理器执行的计算机程序,其特征在于,该计算机程序用于执行上述权利要求1或2所述方法中的各个步骤。
4.一种存储计算机程序的计算机可读存储介质,其特征在于,该计算机程序当由系统的处理器执行时使得该系统执行上述权利要求1或2所述方法中的各个步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010412344.9A CN111753150B (zh) | 2020-05-15 | 2020-05-15 | 一种基于图搜索方法加速epsilon闭包计算的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010412344.9A CN111753150B (zh) | 2020-05-15 | 2020-05-15 | 一种基于图搜索方法加速epsilon闭包计算的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111753150A true CN111753150A (zh) | 2020-10-09 |
CN111753150B CN111753150B (zh) | 2023-10-13 |
Family
ID=72674275
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010412344.9A Active CN111753150B (zh) | 2020-05-15 | 2020-05-15 | 一种基于图搜索方法加速epsilon闭包计算的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111753150B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120331554A1 (en) * | 2011-06-24 | 2012-12-27 | Rajan Goyal | Regex Compiler |
CN103888460A (zh) * | 2014-03-26 | 2014-06-25 | 南京邮电大学 | 基于状态空间搜索的控制器局域网协议验证方法 |
US20180365289A1 (en) * | 2017-06-15 | 2018-12-20 | Crowdstrike, Inc. | Information Retrieval Using Automata |
CN109800337A (zh) * | 2018-12-06 | 2019-05-24 | 成都网安科技发展有限公司 | 一种适用于大字母表的多模式正则匹配算法 |
CN111078963A (zh) * | 2019-12-31 | 2020-04-28 | 奇安信科技集团股份有限公司 | Nfa到dfa的转换方法及装置 |
-
2020
- 2020-05-15 CN CN202010412344.9A patent/CN111753150B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120331554A1 (en) * | 2011-06-24 | 2012-12-27 | Rajan Goyal | Regex Compiler |
CN103888460A (zh) * | 2014-03-26 | 2014-06-25 | 南京邮电大学 | 基于状态空间搜索的控制器局域网协议验证方法 |
US20180365289A1 (en) * | 2017-06-15 | 2018-12-20 | Crowdstrike, Inc. | Information Retrieval Using Automata |
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 |
---|---|
CN111753150B (zh) | 2023-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7240048B2 (en) | System and method of parallel pattern matching | |
US7240040B2 (en) | Method of generating of DFA state machine that groups transitions into classes in order to conserve memory | |
US6856981B2 (en) | High speed data stream pattern recognition | |
Kirsch et al. | Hash-based techniques for high-speed packet processing | |
US10009372B2 (en) | Method for compressing matching automata through common prefixes in regular expressions | |
US20150242429A1 (en) | Data matching based on hash table representations of hash tables | |
Shinde et al. | Similarity search and locality sensitive hashing using ternary content addressable memories | |
CN109033833B (zh) | 一种基于多特征与特征选择的恶意代码分类方法 | |
US20230056760A1 (en) | Method and apparatus for processing graph data, device, storage medium, and program product | |
CN112100361A (zh) | 一种基于ac自动机的字符串多模模糊匹配方法 | |
CN112699375A (zh) | 基于网络嵌入相似性的区块链智能合约安全漏洞检测方法 | |
CN109800337B (zh) | 一种适用于大字母表的多模式正则匹配算法 | |
US20080306948A1 (en) | String and binary data sorting | |
CN111753150A (zh) | 一种基于图搜索方法加速epsilon闭包计算的方法及系统 | |
CN114827030B (zh) | 一种基于折叠sram的流分类装置及表项压缩方法 | |
CN114332745B (zh) | 一种基于深度神经网络的近重复视频大数据清洗方法 | |
US20220066988A1 (en) | Hash suppression | |
CN115577147A (zh) | 可视化情报图谱检索方法、装置、电子设备及存储介质 | |
CN111753144B (zh) | 一种基于Warshall方法加速epsilon闭包计算的方法及系统 | |
CN113554145B (zh) | 确定神经网络的输出的方法、电子设备和计算机程序产品 | |
Chayapathi | Survey and comparison of string matching algorithms | |
US20130173647A1 (en) | String matching device based on multi-core processor and string matching method thereof | |
KR102358508B1 (ko) | 업데이트 횟수에 기초한 프루닝 방법 및 장치 | |
CN116028609B (zh) | 一种多关键词匹配方法和设备 | |
US20160371331A1 (en) | Computer-implemented method of performing a search using signatures |
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 |