• 正则语言与有穷自动机


    正则表达式的运算符

    1、两个语言L和M的并,记作L∪M,是只属于L或属于只属于M,或者同时属于二者的串的集合。这个运算符有时也记作L+M。

       

    2、语言L和M的连接是以下形成的串的集合:取L中任意一个串,与M中任意一个串连接起来。一般用圆点或者根本不用任何运算符来表示两个语言的连接。

         

    3、语言L的闭包(或星,或克林闭包),记作L*,表示用以下方式形成的串的集合:从L中取任意多个串,可能有重复(即可以多次选同一个串),把所有这些串连接起来。更形式化的说,L*是无穷的并Ui≥0Li,其中L0={ε},L1=L,对于i>1,Li是i个L的连接。

        

    正则语言

    从RE到ε-NFA

    对于正则语言:ε、Ø、a,对应的自动机依次如下

    对于正则语言:R|S,对应的自动机如下

    对于正则语言:R.S,对应的自动机如下

    对于正则语言:R*,对应的自动机如下

     下面给出一个例子:

    将RE转换成ε-NFA后,可以按照下面的路径将ε-NFA转换成为DFA

    RE→ε-NFA→NFA→DFA

    从DFA到RE

    可以通过状态消除的方法将一个FA转换成为RE,状态消除的方法如下:

    合并:

    消除顺序状态:

    消除循环状态:

     

    下面给出一个例子:

    从NFA到正则文法

    正则文法:

    在前面的博客也有给出文法的定义,在这里,N是指非终止符号集,Σ是指终止符号集。

    一个语言L能够被NFA接受,当且仅当这个语言有一个正则文法。

    从一个NFA构造出一个等价的正则文法:

    下面给出一个例子:

    证明一个语言是正则语言

    如果能构造出一个接受该语言的有限状态自动机,则是正则语言。

    证明一个语言不是正则语言

    如果语言L不满足泵引理,则不是正则语言。

    泵引理的定义,其中n是一个与语言L相关的常数。

    也就是说,我们总能在离w的开始处不太远的地方找到一个非空的串y,然后可以把它作为“泵”,也就是说,重复y任意多次,或者去掉它(k=0的情况),而所得到的结果串依然属于L。

    下面给出一个例子:

    DFA的最小化 - 填表算法

    算法步骤:

    下面给出一个例子,将下面的DFA最小化:

    第一步,画一个表,然沿对角线画一条线,将对角线以上的部分丢掉(这是因为一个完整的表是沿对角线对称的),同时也要丢掉对角线上的部分,因为对任意的(q, q),不可能有q属于F并且q不属于F。

    第二步,将包含终止状态的状态对打上标记,如下

    第三步,在状态转换图中找出所有与终止状态相邻的状态。依次检查这些状态,使用上述填表算法进行检查,标记上符合要求的状态对。检查完毕后,再向外扩张,直到每个状态对都被检查过为止。

    将所有等价的状态进行合并,即可得到最小化的DFA:

    正则语言的封闭性

    判定性问题

    • 给定一个字符串w和正则语言L,判断w是否属于L

    • 给定一个正则语言L,判断L是否为空

    • 给定两个正则语言L1和L2,判断L1是否等于L2

  • 相关阅读:
    【SVN解决代码提交冲突】https://www.cnblogs.com/aaronLinux/p/5521844.html
    查询有2门及以上不及格科目的学生姓名及其平均成绩
    【Python】split
    【Python】文件处理
    【robotframework】打开浏览器提示:NoSuchWindowException: Message: Unable to get browser
    定位到新窗口
    8月1号
    【定位】https://blog.csdn.net/cyjs1988/article/details/76284289
    【Robotframework】脚本跑完后自动发送邮件
    jQuery Mobile Data 属性
  • 原文地址:https://www.cnblogs.com/TheFutureIsNow/p/10969429.html
Copyright © 2020-2023  润新知