zoukankan      html  css  js  c++  java
  • 正则语言与有穷自动机

    正则表达式的运算符

    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

  • 相关阅读:
    part11-1 Python图形界面编程(Python GUI库介绍、Tkinter 组件介绍、布局管理器、事件处理)
    part10-3 Python常见模块(正则表达式)
    Cyclic Nacklace HDU
    模拟题 Right turn SCU
    状态DP Doing Homework HDU
    Dp Milking Time POJ
    区间DP Treats for the Cows POJ
    DP Help Jimmy POJ
    Dales and Hills Gym
    Kids and Prizes Gym
  • 原文地址:https://www.cnblogs.com/TheFutureIsNow/p/10969429.html
Copyright © 2011-2022 走看看