NFA确定化

更新时间:2023-07-14 17:03:45 阅读: 评论:0

一、实验目的:
1.设计、编制、调试一个确定有穷自动机的程序,加深对DFA确定化原理的理解。
2.掌握在对程序设计DFA确定化的过程。
二、实验要求:
1. NFA到DFA的转换过程
2. NFA初始状态集的λ合并集作为DFA的初始状态
3. 对DFA中一状态S,对a∑,VMP进行符号合并和λ合并得到的状态设为S’,定义DFA的转换函数为f(S,a)=S’
三、实验环境:
房地产公司简介Windows下的 Microsoft Visual C++ 6.0 或Visual Studio 2008;
四、实验步骤
1.查询资料,了解NFA确定化的工作过程与原理。
2.分析题目,整理出基本设计思路。
3.实践编码,将设计思想转换用c语言编码实现,编译运行。
五、调试程序:
举例说明
1、错误输入时
中国第一大姓氏
六、实验心得
1:
通过此次实验,让我对老师在课堂上讲的有关DFA(确定有穷自动机)、NFA(非确定有穷自动机)的知识有了更深的理解,如它们的构造以及相互转化。在编写程序的过程中我们对C语言中有关数据结构及其相关的知识进行了复习,这更有利于我们目标的实现。在本次实验中,让我进一步的认识到组员的重要性,当遇到困难时,通过讨论、分析才能更好更快的解决问题,完成共同的任务。
2:
通过本次实验进一步的了解并掌握NFA确定化的运用,同时发现自己对关于NFA的很多知识不是很熟,运用的也不好。但是通过和同学的配合和学习知道了NFA,DFA的本质内容及其功能,以后会更多的学习这些知识,更好的掌握和熟练的运用所学的知识。
附录:
#include <iostream>
#include <algorithm>
#include <stack>
#include <vector>
using namespace std;
///---------------------Function-------------------------------
void NFA_Input();
void Set_Inrt(vector<char>& vec, char ch);
bool Matching(vector<vector<char> >& Source, vector<char>& Target);
vector<char> EPSILON_CLOSURE(vector<char>& T);
vector<char> Transf(vector<char>& vec, char ch);
void  DFA_Output();
void Output(vector<char>& vec);
///--------------------NFA-------------------------------------
struct Edge
{
    char stat1;
    char ch;
    char stat2;
};
vector<char> Alpha;
vector<char> N_Stat;
vector<char> N_Start;
vector<char> N_End;
vector<Edge> N_Transfer;
vector<Edge> E_Transfer; //带 '~' 的状态转换
const char EPSILON = '~';
///--------------------DFA 部分---------------------------------
vector<vector<char> > D_Stats;
vector<vector<char> > D_End;股改方案
vector<char> D_Start;
//-----------------------------------------------------------------------------
// 主函数
//-----------------------------------------------------------------------------
int main()
{
    cout << "--------------------NFA-----------------" << endl;
    NFA_Input();
   
    D_Start = EPSILON_CLOSURE(N_Start); //NFA初态的闭包为DFA的初态
    D_Stats.push_back(D_Start);
    stack<vector<char> > Q;
    Q.push(D_Start);
   
    cout << "\n--------------------NFA-----------------" << endl
好妇产
        << "Status transfer:" << endl
        << "Input stat\t" ; 
    for(vector<char>::size_type i = 0; i != Alpha.size(); i++)
        cout << Alpha[i] << "\t" ;
    cout << endl;         
    vector<char> V, T;
    while(!Q.empty())
    {
        T = EPSILON_p());
        Q.pop();  V.clear(); 
        Output(T);   
        for(vector<char>::size_type i = 0; i != Alpha.size(); i++)
        {
            V = Transf(T, Alpha[i]);
            V = EPSILON_CLOSURE(V);
            if((V.size() != 0)&&!Matching(D_Stats, V))
            {
                  D_Stats.push_back(V);
                  Q.push(V);
            }           
            Output(V); 
        }
        cout << endl;分类标记
    }
    DFA_Output();
    system("PAUSE");
    return 0;   
芋头扣肉
}
//-----------------------------------------------------------------------------
// NFA 输入
//-----------------------------------------------------------------------------
void NFA_Input()
{
    char ch;
       
    cout << "Input the Status(End With '#'):" << endl;
    while(cin >> ch, ch != '#')
        N_Stat.push_back(ch);
    sort(N_Stat.begin(), d());   
一路向北吉他谱    cout << "\nInput the Alpha(End With '#'):" << endl;
    while(cin >> ch, ch != '#')
        Alpha.push_back(ch);
    sort(Alpha.begin(), d());   
   
    cout << "\nInput the Status Transform Function: " << endl
        << "  Input format: Q0 a Q1" << endl
        << "  End format: #  #  #" << endl
        << "  U '~' instead of 'ε'." << endl;
    while(1)
    {
        Edge edge;
        cin >> edge.stat1;
        cin >> edge.ch;
        cin >> edge.stat2;
        if(edge.stat1 == '#' && edge.ch == '#' && edge.stat2 == '#' )
            break;
        if(edge.ch == EPSILON)
            E_Transfer.push_back(edge);
        el 
            N_Transfer.push_back(edge);   
    }
    cout << "\nInput the Start Status(End With '#'):" << endl;
    while(cin >> ch, ch != '#')
        N_Start.push_back(ch);
    sort(N_Start.begin(), d());   
    cout << "\nInput the End Status(End With '#'):" << endl;
    while(cin >> ch, ch != '#')
        N_End.push_back(ch);
    sort(N_End.begin(), d());   
}
//----------------------------------------------------------------------------
// stat_t Match
//----------------------------------------------------------------------------
bool Matching(vector<vector<char> >& Source, vector<char>& Target)

本文发布于:2023-07-14 17:03:45,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1096487.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:确定   实验   合并   知识   设计
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图