基于子集构造法的优化的NFA确定化算法

发布时间:2023-02-25 15:00:21   来源:文档文库   
字号:
第21卷第1期 计算机技术与发展 Vo1.21 No.1 2011年1月 COMPUTER TECHNO1 0GY ANI)DEVEI OPM ENq、 Jan. 20l1 基于子集构造法的优化的N FA确定化算法 任平红,陈 矗,曹宝香,禹继国 (山东曲阜师范大学计算机科学学院,山东日照276826) 要:使用子集构造法对非确定有限自动机进行确定化的过程中存在大量重复计算的问题。为解决此问题,基于非确 定有限自动机的特点并针对子集构造法的不足,提出了一种优化的非确定有限自动机确定化算法。首先定义了识别符的 有效引出状态集概念并证明了P ̄c]osure的并定理以保证算法的正确性,其次给出了用于避免重复计算的识别符的有效 引出状态集的构造子算法和单状态集的s—cosure的求算子算法,基于这两个子算法给出了优化的非确定有限自动机确 定化算法,最后将算法应用于实例,实验结果表明计算量远小于子集构造法的计算量。相比子集构造法,算法能更有效地 对非确定有限自动机进行确定化。 关键词:子集构造法;非确定有限自动机;优化的;确定化算法 中图分类号:TP301.1 文献标识码:A 文章编号:1673—629X(2011)O1 ̄0070—04 An Optimized Algorithm for Transition from NFA to DFA Based on Subset Construction Method REN Ping—hong,CHEN Chu,CAO Bao-xiang,YU Ji-guo (Colege of Comput Scince,Qufu Norma Univery,Rizhao 276826,Chna) Abstract:The problem of repetve computng exi in he prcess of ransion from non-deterministc nie automata tO deterministc f nite automata using the subset constructon metod,To solve his problem,al optmized algorhm for ransion fom NFA tO DFA is put orward on te basi of characters of NFA and according to shortcomings of he subset constructon metod.First,the concept tat effec— ive source state set f a mark symbol is defned and the teorem that combinaton of s—closure is prved.The theorm guaraees te ghtness of the folowing algorihms.Second,two sub algorms tat constructon of efectve surce state set fr a mark symbol and at computng s—closure of a set wih only one state ae given.Based on these sub algorihms,te optzed algorihm fr tsion om NFA tO DFA i given.In the end,al experment is carred out ad the resul shows tat computng amount of his algor is fa ess tha that of subset constructon method.Comparing O subs consructon method,this algorihm Ca conver NFA tO DFA mor ef- cienfy. Key words:subset constucton metod;non-determinisc fnie automam;optzed;algorm f tsion from NFA to DFA 0 引 言 存在s—e]osure重复计算和由于对非8转换的判断而 作为计算机科学的基础,有限自动机(Fini Au— 引起的重复计算等问题 。当NFA状态集元素数 omata,FA)可以抽象绝大多数计算机领域的有限系 量较多时重复计算的问题非常严重。为解决此问题, 统,广泛应用于自然语言处理 和串匹配 等诸多方 提出一种基于子集构造法的优化的NFA确定化算法, 面。非确定有限自动机(Non—deternistc Fini Au— 可以有效地避免重复计算的问题。 omata,NFA)是FA理论的重要组成部分,NFA的化 简 和确定化 具有重要的理论和实际意义。目 识别符的有效引出状态集概念和 —clo- 前广为采用的子集构造法 ’ 虽然能够正确地完成 sure 定理 NFA的确定化,但是在确定化过程中对于NFA状态集 为规整起见,首先给出NFA的一般定义并在全文 中统一使用其定义中的符号。 收稿日期:2010—05-31:修回日期:2010—09—03 定义1 “:NFA定义为一个四元组:M=(Q, ,6, 基金项目:fIf东省优秀中青年科学家奖励基金(2005BS01016) q F)。其中:Q是状态集, 是基本字母表,6是状态 作者简介:任平红(1980~),女,山东德州人,讲师,硕士,研究方向为 转换函数(Q X( u{ })一2 ),q。是开始状态,F是 计算机图形图像处理、算法;曹宝香,教授,研究方向为图形图像处 终态集。 理、算法;禹继国,教授,膊士,研究方向为算法。 基于NFA的定义,定义2给出识别符的有效引出 
第1期 任平红等:基于子集构造法的优化的NFA确定化算法 ・71 状态集的定义。 定义2:对于识别符U(a∈ )有效的引出状态集 在第二节中给出。 }。 E[U]定义为:E[a]={q  q∈Q^占(q,a)≠ 识别符的有效引出状态集的构造子算法 和单状态集的 一closure求算子算t 基于定义2、定理1和推论1,给出识别符的有效 引出状态集E[a]的构造子算法和单状态集的 — closure的求算子算法,并在第三节中用于基于子集构 造法的优化的NFA确定化算法中。 2.1 识别符的有效引出状态集的构造子算法 识别符的有效引出状态集E[a]指出了NFA中哪 些状态具有标识为U的转移,对应于NFA状态图中具 有标识为a的引出弧的状态集合。在FA理论中,由于 需要对确定有限自动机(Determinist Finie Automata, DFA)进行最小化,而使用分割算法对非完全DFA直 接进行最小化存在一些问题 ,所以非完全DFA需 要转换为完全DFA 。NFA的确定化不存在同样的 问题,所以不需要将非完全的NFA转换为完全的 NFA。对于一个非完全的NFA,E[a] Q。在子集构 造法中,扫描状态转换矩阵会造成对(Q—E[a])这一 部分状态集的无效判断和计算,如果能计算出E[a] 就可以避免这些无效判断和计算。在第二节中将给出 计算E[a]的子算法。 定义3 NFA单状态集{ }(s E Q)的8一 closure定义为:s—closure({s{)={P l P∈Q A P∈ 6(5,占::)};NFA状态集 ( Q)的s—closure定义 为:s—closure(T)={s  s E占一closure(t)^t E T}。 定义3中NFA单状态集的s—closure和状态集的 8一closure都是无序集合,基于此性质和定义3可以得 如下定理和推论: 定理1: 一closure(T)=u —closure({t})。 证明:根据定义3,8一closure(T)={s l ∈8一 closure(t)A t∈T}=U {P  P∈Q^P E (t, :c)} = s—closure(…)。 定理1说明求解状态集的s—closure可以转变为 求解单状态集的 —closure,子集构造法中NFA每个 状态集的s—closure不必完全重新计算,可以依托于 NFA每个单状态集{t}(t∈Q)的计算来完成。 由定理1可得如下推论: 推论1:8一closure(T)=u s—closure(T )。 证明: 一closure( )={s I s∈8一closure(t)八 t∈T}=U{r r  l s∈s—closure(t)^t∈T }:U r r closure(T )。 推论1说明求解状态集 的 —closure可以转变 为求解其子集 的s—closure,当I I=1时就转变为 定理1中求解的情况。 子集构造法中不同状态集的占一closure计算过程 中可能存在重复计算的部分。当状态集元素数量较多 时,重复计算现象非常严重。在NFA确定化过程中应 用定理1或推论1的结论可以避免重复计算以提高计 算的效率。为应用定理1或推论l,需要计算单状态集 的 一closure,单状态集的8一closure的求算子算法将 算法思想:按列扫描NFA的状态转换矩阵一遍, 当到达状态在Q中时将出发状态加入对应识别符的有 效引出状态集E[a]中,一遍扫描后对于 中任意识别 符a的E[a]都计算完毕。 识别符的有效引出状态集E[a]的构造子算法的 类c伪代码具体描述如下: 输入:NFA M:(Q, , ,q。,F)。 输出:E[a](V a E )。 方法: = ; whie( ’≠ ){ V a E ’: or(V q∈Q) f(6(q,a)≠  a]+={q}; 三’一:{a};  通过识别符的有效引出状态集E[a]可避免NFA 状态集(对应DFA的某个状态)中没有标识为a的引 出弧的状态的无效判断和计算。 2.2 单状态集的e-closure的求算子算法 算法思想:对于NFA的任意一个状态q(q∈Q)构 成的单状态集{q},如果q有一个或一个以上的 一转 换到达Q中的状态,则8一closm。e({q})只需引用这些 状态分别对应的单状态集的s—closure的计算结果及 {q}的并集即可。 单状态集{q}的 一closure({q})求算子算法的 类c伪代码具体描述如下: 输入:NFA M=(Q, ,6,q。,F)。 输出: 一closure({q})(V q∈Q)。 方法: Q’=Q; whie(Q’≠(2)){ for(V q∈Q’) f(6(q,g)== )8一closure({q}): else if(艿(q,s)==T)s—closure({q}):{q}+ ∑8一closure({t}); 
72- 
计算机技术与发展 
第2l卷 
{q};  单状态集8一closure({q})的计算采用了递归计 算,s—olosre({q})只依赖于8(q,8)集合中的元素 的单状态集的s—e|osHre。当算法结束时,任意单状 态集的s—closure都可以被计算出来。根据定理1,任 意NFA状态集的s—closure可通过其元素状态的单状 态集的s—closlre的合并得到。这样就避免子集构造 法中通过入栈出栈 叫把每一个NFA状态集的每一个 状态都计算8一clo¥1e而带来的大量的重复计算。 优化的NFA确定化算法 以子集构造法的基本方法为基础,应用识别符的 有效引出状态集E[n]的构造子算法和单状态集的 closure的求算子算法,得到优化的NFA确定化算 法,其类c伪代码具体描述如下: 输入:NFA M=(Q, ,8,q。, ’)。 输出:DFA M’=(Q’, ,8’,q。’,F’)。 方法: 调用识别符的有效引出状态集的构造子算法; 调用单状态集的占一closure的求算子算法; Q’={8一elosIlre({q。})}; urmark={ —closure({q0})}; mark= ;whie(unmark≠ ){ V U∈unmark: or(V n∈ ){ ES=U n E[n]; T=6(ES,8); Ⅳ=∑8一cosure(…); f!(N∈Q’){ p’+=}Ⅳ}; 6’[U,0]=Ⅳ;    limark一={U{; mark+={U};  重命名Q’和6’对应元素,其中s— e]OSle({q。})重命名为g。’; F’={fI VM∈mark,(M n F≠ )^( 重 命名为 )}; 得到DFA M’并且M’ M。 算法开始时通过调用识别符的有效引出状态集的 构造子算法求得基本字母表 中每一个基本字母的有 效引出状态集,通过调用单状态集的s—closure的计 算子算法得到NFA状态集9巾每一个状态作为唯一・ 元素的状态集的。一c|oslre供算法的后续步骤使用。 算法中unmark是一个存放未被处理的NFA状态集的 集合,mark是一个存放已经处理的NFA的状态集的集 合。算法通过一个whie循环完成从NFA状态集及其 转换表向对应DFA状态及其转换表的转变。此循环 中ES是NFA状态集中具有标识为。的引出弧的状态 子集, 是状态子集中的状态识别。后转换到的状态 集,Ⅳ是r中状态的单状态集的8一closure的并集。当 Ⅳ与已知状态集不同时将其加入DFA的状态集9’中 (对应于DFA的一个状态)并把相应的转换函数 6’[U,0]=N加入DFA的6’中。每一次循环的最后 把该次循环处理的NFA的状态集从unmlrk集中移除 并移入mark集中。 实例分析 通过下面的实例说明算法的应用及对避免重复计 算的有效性。设NFA M=(Q, ,6,%,F),其中:Q {0,1,2,3,4,5,6,7,8,9,10}, ={口,b},8={8(o,0)  6(0,b)= , (0。s)={1,7},6(1,口): ,8(1, b): ,6(1,s):{2,4},8(2,0)={3},8(2,6)= , 6(2,s)= ,艿(3,0)= ,8(3,6)= ,8(3, )= {6},8(4,0)= ,8(4,b)={5},8(4, )= ,8(5, o)=  (5,6)= ,艿(5, )={6},B(6,口)=  8(6,b)= ,8(6,s)={1,7},6(7,口)={8},8(7,b) ⑦,8(7, )= ,8(8,口)= ,占(8,b)={9},8(8, s)= ,占(9,a)= ,6(9,6)={l0},8(9, )=  (10,口)= , (10,b)= , (10,g): },q。=0,F {10}。 根据识别符的有效引出状态集的构造子算法可 得:E[o]={2,7},E[b]={4,8,9}。根据单状态集的 s—closure的求算子算法可得:8一closure({0})={0} u 一e]oslre({1})U占一i ̄losure({7}), — closure({1})={1}U s—closure({2})u — closure({4}), 一 closure({2}) = {2},s — closure({3})={3}U s—elosHre({6}), 一 closure({4})={4}, 一closure({5})={5}U s— closure({6}),s—closure({6})={6}L s— elosHre({1})U s—elosLe({7}),s—elosIe({7}): {7},占一elosire({8})={8}, —elosIlre({9}):{9}, s—closure({10})={10}。 代人可得:s— closure({0})={0,1,2,4,7}, 一e|OSire({1})={1, 2,4},s—c]osure({2}):{2},8一elosle({3}):{1, 2,3,4,6,7},8 一 eloslr ̄({4}) = 4}, 一 eloslre({5})={1,2,4,5,6,7},s—c|oslre({6})= {1,2,4,6,7{,s — c]OS/e({7}) = {7},8 一 

本文来源:https://www.2haoxitong.net/k/doc/69d93da87b563c1ec5da50e2524de518974bd354.html

《基于子集构造法的优化的NFA确定化算法.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式