【计算理论】正则语言 ( 正则语言运算 | 正则语言封闭性 )

举报
韩曙亮 发表于 2022/01/11 01:07:53 2022/01/11
【摘要】 文章目录 一、正则语言引入二、正则语言三、 正则语言运算 ★四、语言运算示例 ★五、正则语言封闭性 ★六、正则语言封闭性 ...





一、正则语言引入



1 . 非确定性有限自动机 作用 : 非确定性有限自动机并没有增加 自动机 的计算能力 , 但是给自动机设计带来很多方便 ; 仅限于在理论计算时带来很多方便 , 但是无法实现 ;


2 . 自动机实现 : 非确定性有限自动机 ( NFA ) 的的优点是给自动机的设计带来了很多方便 , 但是 只有 确定性的有限自动机 ( DFA ) 才能被实现出来 ;


3 . 自动机等价 : 通过算法可以判定两个确定性的有限自动机是等价的 ,


4 . 自动机优化 : 给定确定性有限自动机 , 可以将该自动机优化 , 得到一个最小的与该 DFA 等价的 自动机 ;



5 . 自动机涉及的两个问题 :


① 优化问题 : 给定一个自动机 , 如何找到一个算法 , 将自动机最小化 ;

② 设计自动机 : 给定一个语言 , 如何找到一个算法 , 根据该语言设计出自动机 ;



6 . 引入正则语言 : 确定性有限自动机 ( DFA ) 与 非确定性有限自动机 ( NFA ) 接受的是相同的语言 , 这个语言就是正则语言 ;






二、正则语言




正则语言 : 如果一个语言 存在一个 有限自动机识别 , 那么称该语言是 正则语言 ;

( 这个自动机可以是 确定性有限自动机 , 也可以是 非确定性有限自动机 ; )



设计自动机 :


① 自动机设计要求 : 给定一个语言 , 设计能识别该语言的自动机 ;

② 算法自动设计 : 自动机设计的过程 , 有的很复杂 , 希望能找到一个算法 , 使用该算法实现 自动机的设计 ;

③ 语言特点 : 如果要设计能识别 某语言的自动机 , 那么需要先了解这个语言有什么特点 , 知道这个语言的特点就可以设计 识别该语言的自动机 ;





三、 正则语言运算 ★



两种正则语言之间的运算 :


前提 : A A A 是一种正则语言 , B B B 是另外一种正则语言 ;


1 . 并运算 ( Union ) : A , B A, B A,B 两个语言并在一起 , 就是将 A A A 语言的字符串 , 和 B B B 语言的字符串并在一起就可以 ;


A ∪ B = { x ∣ (    x ∈ A    ) ∨ (    x ∈ B    ) } \rm A \cup B = \{ \quad x \quad | \quad ( \; x \in A \; ) \lor ( \; x \in B \; ) \quad \} AB={x(xA)(xB)}



2 . 串联运算 ( Concatenation ) : A A A 语言的字符串 与 B B B 语言中的字符串串在一起 , 注意 A A A 语言字符串在前 , B B B 字符串在后 ;


A ∘ B = { x y ∣ (    x ∈ A    ) ∧ (    x ∈ B    ) } \rm A \circ B = \{ \quad xy \quad | \quad ( \; x \in A \; ) \land ( \; x \in B \; ) \quad \} AB={xy(xA)(xB)}



3 . 星运算 ( Star ) :


A ∗ = { x 1 x 2 ⋯ x k ∣ x i ∈ A } ( 0 ≤ i ≤ k ) \rm A^*= \{ \quad x_1 x_2 \cdots x_k \quad | \quad x_i \in A \quad \} \quad\quad (0 \leq i \leq k) A={x1x2xkxiA}(0ik)



循环计算 :


  • 计算本质 : 计算的实质是循环 , 在现实中的计算 , 其本质也是不停的重复循环 , 进行计算 ;

  • 计算机作用 : 计算机可以代替重复的计算 ;

  • 循环运算抽象 : 星运算实质上是对循环运算的抽象表述 ;

  • 自动机计算 : 在有限自动机中 , 可以做循环计算 , 使用 星 计算 实现 循环计算 ;


星运算概念 : A A A 如果是一种语言 , 将 A A A 中的有限个字符串 , 串在一起 , 组成的集合 , 称为 A ∗ A^* A ;

( 有限个字符串的 有限个 是不确定的值 , 可以是 10万 , 100亿 ⋯ \cdots )


星运算结果集合元素个数 : A ∗ A^* A 集合的个数是无限的 ;


空字符串 : 这个字符串个数可以取值为 0 0 0 , 即空字符串 , 空字符串一定属于 A ∗ A^* A





四、语言运算示例 ★



语言计算示例 :


A A A 语言 : A = { 001 , 10 , , 111 } A = \{ 001 , 10, , 111 \} A={001,10,,111}

B B B 语言 : B = { ε , 001 } B = \{ \varepsilon , 001 \} B={ε,001}



1 . 并计算 : A , B A,B A,B 两个语言的集合 , 取 并集 即可 , 计算如下 :


A ∪ B = { 001 , 10 , 111 , ε } \rm A \cup B = \{ 001, 10 , 111 , \varepsilon \} AB={001,10,111,ε}



2 . 串联计算 : A A A 语言中的任意字符串 , 与 B B B 语言中的任意字符串 , 串联在一起 , A A A 语言中有 3 3 3 个字符串 , B B B 语言中有两个字符串 , 那么串联的结果有 2 × 3 = 6 2 \times 3 = 6 2×3=6 个 , 计算过程如下 :


A ∘ B = { 001 , 10 , 111 , 001001 , 10001 , 111001 } \rm A \circ B = \{ 001 , 10, 111 , 001001, 10001, 111001 \} AB={001,10,111,001001,10001,111001}



3 . 星计算 : A A A 语言的星计算 , 该集合一定是一个无限的集合 , 如果 A A A 语言不是空集 , 那么该 A ∗ A^* A 集合个数是无限的 , 其可以由 K K K 个字符串组成 , K K K 取值 0 0 0 到无穷大 , [ 0 , + ∞ ) [0 , +\infty ) [0,+) ;


A ∗ = { ε , 001 , 10 , 111 , ⋯   } \rm A^* = \{ \varepsilon , 001 , 10 , 111 , \cdots \} A={ε,001,10,111,}





五、正则语言封闭性 ★



正则语言具有封闭性 , 正则语言组成的集合 , 在并运算 , 串联运算 , 星运算 中 , 都是封闭的 ;


封闭性描述 : A , B A,B A,B 都是正则语言 , A A A 可以找到一个自动机识别该语言 , B B B 也可以找到一个自动机识别该语言 , 那么一定可以找到一个自动机 分别可以识别 A ∪ B A \cup B AB , A ∘ B A \circ B AB , A ∗ A^* A 语言 ; ( 3 3 3 个自动机分别识别 3 3 3 种语言 )


A , B A, B A,B 两个语言是正则语言 , 那么 A ∪ B A \cup B AB , A ∘ B A \circ B AB , A ∗ A^* A 都是正则语言 ;


A ∪ B A \cup B AB 语言证明 :


前提条件 :


① 已知自动机 与 语言 : 假设有自动机 M 1 M_1 M1 识别语言 A A A , 自动机 M 2 M_2 M2 识别语言 B B B ;

② 设计的 新自动机 与 语言 : 设计新的自动机 M M M 识别语言 A ∪ B A \cup B AB , A ∘ B A \circ B AB , A ∗ A^* A ;





六、正则语言封闭性 A ∪ B A \cup B AB 证明



A ∪ B A \cup B AB 语言证明 :


① 无条件跳转 : 引入一个新的状态 , 这个新的状态 , 接受 ε \varepsilon ε 即可跳转到 M 1 M_1 M1 M 2 M_2 M2 的开始状态 ;

当自动机 M M M 启动后 , 进入开始状态 , 不需要进行任何计算 , 会无条件跳转到 M 1 M_1 M1 M 2 M_2 M2 的开始状态 ;


② 新自动机 : 自动机 M M M 所接受的语言 , 实际上就是 M 1 M_1 M1 自动机所接受的语言 A A A M 2 M_2 M2 自动机所接受的语言 B B B 的并集 , 即 A ∪ B A \cup B AB ;

在这里插入图片描述





七、正则语言封闭性 A ∘ B A \circ B AB 证明



A ∘ B A \circ B AB 语言证明 :


① 旧的自动机与语言 : 假设有自动机 M 1 M_1 M1 识别语言 A A A , 自动机 M 2 M_2 M2 识别语言 B B B ;

② 新的自动机与语言 : 设计新的自动机 M M M 识别语言 A ∘ B A \circ B AB ;


生成新自动机 : 只要引入一个 ε \varepsilon ε 箭头 , 将第一个自动机 M 1 M_1 M1 的接受状态 , 改成非接受状态 , 使用 ε \varepsilon ε 箭头 , 指向 M 2 M_2 M2 的开始状态即可 ;


原状态 : 上面的自动机是 M 1 M_1 M1 , 语言 A A A , 下面的自动机 M 2 M_2 M2 , 语言 B B B ;

在这里插入图片描述


新状态 : 将第一个自动机 M 1 M_1 M1 的接受状态 , 改成非接受状态 , 使用 ε \varepsilon ε 箭头 , 指向 M 2 M_2 M2 的开始状态 ;

在这里插入图片描述





八、正则语言封闭性 A ∗ A^* A 证明



A ∗ A^* A 语言 封闭性 证明 : 一个自动机 M M M 识别 A A A 语言 , 获取识别 A ∗ A^* A 语言的自动机 , 只需要将 该自动机 M M M 的开始状态 与 接受状态 连接起来即可 ;

在这里插入图片描述





九、自动机扩展



整体思想 :

自动机是一个简单的计算模型 , 在自动机上添加 2 2 2 次简单的结构 , 就可以使该计算模型达到计算的极限 , 就是图灵机 ;

计算模型经过逐步扩张 , 达到计算的极限 ;

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/106157619

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。