ImageVerifierCode 换一换
格式:DOC , 页数:15 ,大小:143.50KB ,
资源ID:231426      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/231426.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(NFA到DFA转化.doc)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

NFA到DFA转化.doc

1、目录1.需求分析21.2 NFA和DFA之间的联系32.概要设计33.详细设计43.1 子集构造法43.2 具体转换过程63.3 程序设计93.3.1 常量定义93.3.2 数据结构定义93.3.3 主要函数流程图114.测试分析145.用户手册166.课程总结161.需求分析1.1 NFA和DFA的概念NFA(nondeterministic finite-state automata)即非确定有限自动机, 一个非确定的有限自动机NFA M是一个五元式: NFA M=(S, , , S0, F)其中 S有限状态集 输入符号加上,即自动机的每个结点所射出的弧可以是中一个字符或是. S0初态集

2、F终态集 转换函数 S 2S (2S -S的幂集S的子集构成的集合)DFA(deterministic finite-state automata)即确定有限自动机,一个确定的有限自动机DFA M是一个五元式: M=(S, ,, S0, Z) 其中: S 有限状态集 输入字母表 映射函数(也称状态转换函数) SS (s,a)=S , S, S S, a S0 初始状态 S0 S Z终止状态集 ZS1.2 NFA和DFA之间的联系在非确定的有限自动机NFA中,由于某些状态的转移需从若干个可能的后续状态中进行选择,故一个NFA对符号串的识别就必然是一个试探的过程。这种不确定性给识别过程带来的反复,

3、无疑会影响到FA的工作效率。而DFA则是确定的,将NFA转化为DFA将大大提高工作效率,因此将NFA转化为DFA是有其一定必要的。2.概要设计通过本课程设计教学所要求达到的目的是:充分理解和掌握NFA,DFA以及NFA确定化过程的相关概念和知识,理解和掌握子集法的相关知识和应用,编程实现对输入NFA转换成DFA输出的功能。程序总框图如图1所示:总控模块NFA图结构状态转换表机构图操作初始化状态转换矩阵状态转换操作图1 程序总框图3.详细设计3.1 子集构造法已证明:非确定的有限自动机与确定的有限自动机从功能上来说是等价的,也就是说,我们能够从:NFA M DFA M使得 L(M)=L(M)为了

4、使得NFA确定化,我们首先给出两个定义:定义1:集合I的-闭包:令I是一个状态集的子集,定义-closure(I)为:1)若sI,则s-closure(I);2)若sI,则从s出发经过任意条弧能够到达的任何 状态都属于-closure(I)。 状态集-closure(I)称为I的-闭包定义2:令I是NFA M的状态集的一个子集, a 定义: Ia=-closure(J) 其中J = (s,a)J是从状态子集I中的每个状态出发,经过标记为a的弧而达到的状态集合。Ia是状态子集,其元素为J中的状态,加上从J中每一个状态出发通过弧到达的状态。给定如图2所示的NFA:bbaab0123 4图2与之等价

5、的DFA如图3:bab0,12,443a图33.2 具体转换过程为了说明跟清晰,我们使用实例说明,构造正规式101(0|1)*011的DFA?解:首先构造相应的NFA,如图4所示:10111001012356478图4将其写成M五元式则为:M=(0,1,2,3,4,5,6,7,8,0,1,,0,8)其中为: (0,1)1 (1,0)2 (2,1)3 (3,)4 (4,)5 (4,0)4 (4,1)4 (5,0)6 (6,1)7 (7,1)8 它所对应的状态转换矩阵如表1:表1状态010112233444455667788根据NFA转化为DFA的子集法转换法进行转换,对应的状态转换矩阵见表2:表

6、2II0I1011223,4,53,4,54,5,64,54,5,64,5,64,5,74,54,5,64,54,5,74,5,64,5,84,5,84,5,64,5对上表重新命名后的状态转换矩阵见表3:表3II0I1011223345446545647745将其写成M五元式则为:M=(0,1,2,3,4,5,6,7,0,1,0,5)其中为: (0,1)1 (1,0)2 (2,1)3 (3,0)4 (3,1)5 (4,0)4 (4,1)6 (5,0)4 (5,1)5 (6,0)4 (6,1)7 (7,0)4 (7,1)5 与表3对应的状态转换图如图5所示:110001101101236745图

7、5这样就完成了从正规表达式101(0|1)*011到DFA的转化。3.3 程序设计3.3.1 常量定义#define MAX 10#define NumMaxChar 10#define NumMAXTN 10 #define INFINIT 327673.3.2 数据结构定义NFA图结构定义如下:typedef struct edge /边int dest;char cost;struct edge *link; /指向下一边*Edge; typedef struct vertex /顶点char data; /状态Edge adj; /边*Vertex; typedef struct gr

8、aph /图Vertex NodeTable;int NumVertex;int MaxNumVertex;int NumEdge;*Graph;状态转换表机构定义如下:typedef struct tablenode /转换表节点char newname; /新命名char chMAX; /顶点集合*TableNode; typedef struct tablequeue /转换表列TableNode TNMAX; /转换表节点数组char transword; /转换条件int NumTn; /添加的顶点数*TableQueue; typedef struct transmatrix /状

9、态转换矩阵TableQueue TQ; /转换表列组int transnum; /转换表列数*TranMatrix;3.3.3 主要函数流程图void Smove函数流程图如图6所示:00非0非00非0开始int i,j,k=0,check,len;Edge p;while(t2k!=0)k+;for(i=0;iMAX;i+)for(j=0;jNumVertex;j+)if(g-NodeTablej.data=t1i) p=g-NodeTablej.adj;while(p!=NULL)if(p-cost=transword) check=CheckChar(t2,g-NodeTablep-de

10、st.data);if(check=1) t2k=g-NodeTablep-dest.data;k+;p=p-link;elsep=p-link;len=k;BubbleSort(t2,k);结束图6void Show_TranMatrix函数流程图如图7所示:000非0非0非0开始int i,j,k;printf(状态转换矩阵:n);for(j=0;jtransnum;j+)printf(转换字符:%c ,TM-TQj.transword);printf(n);for(k=0;kMAX;k+)for(j=0;jtransnum;j+)if(TM-TQj.TNk-newname=0) printf(

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1