用于自动机空间压缩的线性同余字符集变换方法及系统与流程

文档序号:19065810发布日期:2019-11-06 02:21阅读:214来源:国知局
用于自动机空间压缩的线性同余字符集变换方法及系统与流程
本发明属于信息
技术领域
,具体涉及一种用于自动机空间压缩的线性同余字符集变换方法及系统。
背景技术
:字符串匹配算法是一类搜索算法,广泛应用于生物信息学、信息检索、数据压缩、网络入侵检测等领域。一个字符串是一个定义在有限字母表σ上的有限字符序列,字符串匹配算法在一个大的字符串t上搜索某个字符串集合s={pi}中所有字符串pi的所有出现位置。t被称为文本,pi被称为模式串,t和pi都定义在同一个字母表σ上。在字符串匹配领域,自动机是一种重要的数据结构。例如,1975年由aho及corasick提出的ac自动机算法(参考efficientstringmatching:anaidtobibliographicsearch),1977年由knuth、morris及pratt提出的kmp算法(参考fastpatternmatchinginstrings),1999年由allauzen、crochemore及raffinot提出的bom算法(参考factororacle:anewstructureforpatternmatching)等许多算法都通过自动机实现快速的字符串匹配。由于在多数应用中模式串集的规模通常较大,生成的自动机占用空间较大,也影响其匹配速度,因此降低自动机占用的资源就成为一个值得研究的问题。自动机又称为有限状态机,是一种用于表示字符串集合并提供字符串匹配功能的数据结构。抽象来讲,串匹配算法中的自动机可以表示为一个大小为n×256的矩阵an×256,其中n是自动机的状态数,256是字符集大小(1个字节)。对于当前状态s和输入字符c,a[s,c]表示抵达的下一个状态,通常用一个非负整数或指针来表示。a[s,c]=-1表示当前状态s对于输入字符c没有后继状态。an×256中每个状态行所占用的空间为sizeof(int)×256,共占用空间sizeof(int)×256×n。由于在许多应用中模式串集s规模很大,对应的自动机状态数较多,占用的空间很可观,影响了基于自动机的串匹配算法的实用性,因此,有必要对自动机的高效压缩方法进行研究。2004年norton在optimizingpatternmatchingforintrusiondetection一文中提出了一种称为banded-row的自动机压缩方法。由于在串匹配算法中,自动机的大部分状态通常只有很少的几个后继状态,对于每一个状态行a[s],直接用sizeof(int)×256来表示是非常浪费存储空间的。为了压缩ac自动机的存储空间,banded-row用两个整数lbs和ubs分别记录状态行a[s]中第一个和最后一个后继状态的转移字符,即:去掉a[s]头尾的空转移,每一行仅使用sizeof(int)×(ubs-lbs+3)的存储空间来表示,既保留了数组随机存取的特性,同时相比矩阵表示法也节省了存储空间。2018年刘燕兵等提出了基于字符集变换的自动机空间压缩方法,由于在串匹配算法中,自动机状态行通常非常稀疏,lbs和ubs之间仍然有大量无效状态,基于字符集变换的自动机空间压缩方法通过异或函数对输入字符进行变换,并定义:在合适的变换参数x[s]的作用下,减少了和之间的无效状态数,进一步节省了存储空间。现有的技术方案主要是banded-row法和基于字符集变换的自动机空间压缩方法,这两种方案在空间和时间上都一些不足。空间上,banded-row方法和基于字符集变换的自动机空间压缩方法分别需要占用和的空间,当ubs-lbs或较大时,即使每行的后继状态数较少,占用的空间也仍然可观。例如,若lbs=0,ubs=255,即便a[s]只有两个后继状态,banded-row方法也无法压缩空间,又例如,当且a[s,125]≠-1时,尽管a[s]只有三个后继状态,基于字符集变换的自动机空间压缩方法仍需要消耗sizeof(int)×130的空间。时间上,由于这两种方法都需要在扫描时检查字符是否超过[lbs,ubs]或范围,影响了匹配速度。技术实现要素:本发明的目的是提供一种用于自动机空间压缩的线性同余字符集变换方法及系统,属于针对字符串匹配的自动机压缩方法,该方法保证状态转移的时间复杂度为o(1),同时可大幅度减少数据结构的存储空间。为实现上述目的,本发明采用如下技术方案:一种用于自动机空间压缩的线性同余字符集变换方法,包括以下步骤:将模式串集构建成自动机,并生成状态转移矩阵;读取状态转移矩阵的各个状态行,计算得到最佳变换参数和最大有效后继状态;根据状态转移矩阵和最佳变换参数,得到数据结构,根据该数据结构将状态行替换为变换后的有效状态行;读取目标文本的字符,根据字符当前状态,利用线性同余函数进行字符变换,得到变换后的字符;如果变化后的字符不大于最大有效后继状态,则得到字符变换后的最终后继状态,实现变换。进一步地,根据状态转移矩阵的各个状态行和候选变换参数,计算最小有效后继状态,当该最小有效后继状态为零时,计算得到最大有效后继状态,记第一组使得最大有效后继状态最小的变换参数为最佳变换参数。进一步地,有效后继状态的计算式为其中a[·]为状态转移矩阵的状态行,c为目标文本的字符,s为字符当前状态,i,j为候选变换参数。进一步地,候选变换参数i取值为从0到127,j取值为从0到255。进一步地,变换后的有效状态行为<a[s,m[s]],a[s,(n[s]+m[s])mod256],a[s,(n[s]×2+m[s])mod256],…,a[s,(n[s]×lc[s]+m[s])mod256]>,其中n[s]、m[s]、lc[s]为数据结构,a[·]为状态转移矩阵的状态行,s为字符当前状态。进一步地,n[s]=2k+1,m[s]=m,lc[s]等于最大有效后继状态,其中k,m为最佳变换参数。进一步地,线性同余函数为fs(c)=n[s]×c+m[s],其中n[s]、m[s]为数据结构,c为目标文本的字符,s为字符当前状态。进一步地,最终后继状态为a[s,c’],其中a[·]为状态转移矩阵的状态行,s为字符当前状态,c’变换后的字符。一种用于自动机空间压缩的线性同余字符集变换系统,包括:规则编译器,用于读取、解析模式串集,建立自动机状态转移图,并生成状态转移矩阵;变换参数生成器,用于生成最佳变换参数;状态行变换器,用于逐行读取状态转移矩阵,接受最佳变换参数,并对状态行进行变换;比较器,用于根据变换结果,判断是否应该更新压缩自动机存储器,生成比较结果;压缩自动机存储器,用于根据比较结果读取上述变换结果,更新内部存储;状态寄存器,用于存储当前状态;字符集变换器,用于逐字符读取文本,根据状态寄存器存储的当前状态及压缩自动机中存储的对应的变换参数,对字符进行变换;文本扫描器,根据状态寄存器存储的当前状态、字符集变换器发送来的字符及压缩自动机中存储的状态行,计算下一个状态并更新状态寄存器。一种存储计算机程序的计算机可读存储介质,该计算机程序包括指令,该指令当由服务器的处理器执行时使得该服务器执行上述方法中的各个步骤。本发明方法保证状态转移的时间复杂度为o(1),匹配数据的速度较快,同时可大幅度减少数据结构的存储空间。附图说明图1是字符集变换示意图。图2是一种用于自动机空间压缩的线性同余字符集变换系统结构图。图3是自动机状态转移图。图4a-4d是实验1-4的结果统计图。具体实施方式为使本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图作详细说明如下。本发明提供的用于自动机空间压缩的线性同余字符集变换方法(以下简称同余变换法)是以基于字符集变换的自动机空间压缩方法(以下简称异或变换法)为原型,保证状态转移的时间复杂度为o(1),同时可大幅度减少数据结构的存储空间。如图1所示,该发明的主要思想在于通过一个线性同余函数fs(c)=ns×c+ms对字符集进行变换,使得状态行的有效状态尽量连续。图中,a[s]是状态转移矩阵中的一个状态行,p是各个后继状态在状态行中的偏移值,c是对应的输入字符。图左侧表示异或变换法,在该方法中,输入字符c通过异或函数映射到偏移值p,尽管a[s]中只有3个有效后继状态,为了存储第一个到最后一个有效后继状态,需要存储左侧阴影区域中的7个后继状态,包括了4个无效后继状态。在图右侧所示的同余变换法中,输入字符c通过线性同余函数fs(c)=3×c+3映射到偏移值p,将有效后继状态的偏移值变换到一个更加连续的区域,因此,只需要存储右侧阴影区域中的4个后继状态即可包括所有有效后继状态。同异或变换法一样,同余变换法分为初始化和匹配两个阶段,具体说明如下。初始化阶段:1.按矩阵表示法,将模式串集合构建成自动机。2.为状态转移矩阵的各个状态行计算最佳变换参数:读取自动机的每一个状态行a[s],候选变换参数i取值从0变化到127,j取值从0变化到255,计算最小有效后继状态如果infs,i,j=0,计算最大有效后继状态记第一组使得sups,i,j最小的参数i,j为k,m。3.存储变换参数及压缩自动机:记录数据结构n[s]=2k+1,m[s]=m,lc[s]=sups,k,m,将状态行替换为变换后的有效状态行<a[s,m[s]],a[s,(n[s]+m[s])mod256],a[s,(n[s]×2+m[s])mod256],...,a[s,(n[s]×lc[s]+m[s])mod256]>。至此,初始化阶段的步骤全部完成。匹配阶段:当匹配时,自动机由上述压缩方法产生的四个数据结构n、m、lc、a可以得到状态转移公式:具体过程如下:1.读入待扫描文本中的一个字符c,根据当前状态s,计算c'=(n[s]×c+m[s])mod256;2.如果c'≤lc[s],则后继状态为a[s,c'];3.否则,返回匹配失败。至此,匹配阶段的步骤全部完成。如图2所示,本发明的同余变换法通过基于字符集变换的自动机空间压缩系统实现如下:1)规则编译器读取、解析模式串集,建立自动机状态转移图,并生成状态转移矩阵;2)状态行变换器逐行读取规则编译器生成的状态转移矩阵,同时接受变换参数生成器传来的变换参数,对状态行进行变换,并将变换后的状态行长度发送至比较器;3)比较器根据变换结果,判断是否应该更新压缩自动机存储器,并将比较结果发送至压缩自动机存储器;4)压缩自动机存储器接受比较器发来的结果,根据比较结果读取状态行变换器生成的变换结果,更新内部存储;5)字符集变换器逐字符读取文本,根据状态寄存器存储的当前状态及压缩自动机中存储的对应的变换参数,对字符进行变换并发送至文本扫描器;6)文本扫描器根据状态寄存器存储的当前状态、字符集变换器发送来的字符及压缩自动机中存储的状态行,计算下一个状态并更新状态寄存器。以下通过实施例来进行具体阐述:为了便于说明,令字符集σ={0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f},字符集大小|σ|=16,文本t=5c5f,模式串集s如下所示:表1规则示例初始化阶段:1.解析模式串集,建立自动机状态转移图,如图3所示;根据状态转移图,建立状态转移矩阵a[s,c],如表2所示,表中-1表示无效转移,其他数字表示接受对应字符后的后继状态;表2状态转移矩阵2.读取a中的一行,对变换参数i=0...7及j=0...15,计算如果infs,i,j=0,计算记最小的sups,i,j为sup's,对应的下标为k,m,比如对于a[0],k=1,m=3,sup0,1,3=(2×1+1)×0+3mod16=3,a[0]=<2,-1,3,1>;3.对a中的每一行执行上述操作,得到四个数据结构n、m、lc、a如表3、表4所示:表3变换参数sn[s]m[s]lc[s]0333131222391331214190511306111071208110表4压缩自动机s012302-13114-172753684758687989至此,初始化阶段的步骤全部完成。匹配阶段:1.读入文本t中的第一个字符5,根据当前状态0,计算c'=3×5+3mod16=2;2.由于lc[0]=3,从而c'≤lc[0],因此后继状态为a[0,c']=3;3.重复上述操作直到s=9。至此,匹配阶段的步骤全部完成。本发明取得的积极效果:本发明在单机64位linux4.19.3系统(8gb内存,cpu为inteli7)下作了如下实验:测试程序随机生成用于建立自动机的模式串集和待匹配的文本;模式串集大小在各次实验中分别确定,文本大小固定为10mb。统计指标:初始化时间、初始化占用空间、匹配数据所用时间及匹配速度。实验采用了异或变换法做对比实验,实验结果如表5所示。实验1中,模式串长16字节,模式串集中有262144个模式串,异或变换法占用空间344.30mb,同余变换法将内存占用降至245.23mb,扫描速度上,异或变换法为10.661mb/s,同余变换法为11.318mb/s,略有提升,如图4a。实验2中,模式串长16字节,模式串集中有524288个模式串,异或变换法占用空间751.55mb,同余变换法将内存占用降至415.10mb,扫描速度上,异或变换法为9.406mb/s,同余变换法为10.437mb/s,略有提升,如图4b。实验3中,模式串长32字节,模式串集中有262144个模式串,异或变换法占用空间846.81mb,同余变换法将内存占用降至439.35mb,接近减半,扫描速度上,异或变换法为15.314mb/s,同余变换法为18.231mb/s,提速约19%,如图4c。实验4中,模式串长32字节,模式串集中有524288个模式串,异或变换法占用空间2203.26mb,同余变换法将内存占用降至920.29mb,节约超过一半内存,扫描速度上,异或变换法为13.114mb/s,同余变换法为16.751mb/s,提速27.7%,如图4d。表5实验结果统计以上实验表明本发明方法的压缩自动机所占用的空间显著低于异或变换压缩方法,匹配数据的速度比异或变换压缩方法快,取得了明显的技术效果。因此,本方法及系统是具有广泛的实际价值和应用场景的。以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1