【计算理论】计算理论总结 ( 正则表达式转为非确定性有限自动机 NFA ) ★★

举报
韩曙亮 发表于 2022/01/11 02:25:21 2022/01/11
【摘要】 文章目录 一、正则表达式二、正则语言运算示例 ★三、根据正则表达式构造自动机 一、正则表达式 1 . 正则表达式原子定义 : 如果 ...





一、正则表达式



1 . 正则表达式原子定义 :

如果 R R R

  • 字符集 Σ \Sigma Σ 中的 1 1 1 个字符 ,
  • 空字符串 ε \varepsilon ε , 或
  • 空集 { ∅ } \{ \varnothing \} {} ,

那么称 R R R 是正则表达式 ;



2 . 正则表达式递归定义 :

如果 R 1 , R 2 R_1 , R_2 R1,R2 是正则表达式 , 那么

  • R 1 ∪ R 2 R_1 \cup R_2 R1R2 是正则表达式 ;
  • R 1 ∘ R 2 R_1 \circ R_2 R1R2 是正则表达式 ;
  • R 1 ∗ R_1^* R1 是正则表达式 ;

上述是正则表达式的定义 , 这是一个结构归纳定义 ;


参考博客 :





二、正则语言运算示例 ★



语言计算示例 :


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,}


参考博客 :





三、根据正则表达式构造自动机



根据下面的 正则表达式 构造 非确定性有限自动机 ( NFA ) , 刚好能 识别上述正则表达式表示的语言 ;

( a b ∪ a ) ∗ ( ab \cup a )^* (aba)

构造能识别 ( a b ∪ a ) ∗ ( ab \cup a )^* (aba) 语言 的 自动机 ;


I. 构造原子自动机 : 先构造能接收 单个字符 的自动机 ;

① 接收 a a a 字符的自动机 : 下面的自动机是可以识别 a a a 字符串的 ;

在这里插入图片描述

② 接收 b b b 字符的自动机 : 下面的自动机是识别 b b b 字符串的 ;

在这里插入图片描述


II. 拼装上述识别单个字符的 自动机 :

1 . 摆放自动机位置 : 2 2 2 个能识别 a a a 字符串的自动机 , 与 1 1 1 个能识别 b b b 字符串的自动机 , 按照如下排列放置 ;

在这里插入图片描述

2 . a b ab ab 对应自动机构造 :

① 自动机连接方式 : a a a 正则表达式语言 自动机 与 b b b 正则表达式语言 自动机 是串联在一起的 ;

② 串联两个自动机的状态 : 使用 ε \varepsilon ε 箭头 , 串联 a a a 对应自动机的接受状态 -> b b b 对应自动机的开始状态 ;

③ 修改 前者 的状态 : 同时将 a a a 对应自动机的接受状态 改为非接受状态 ;

下面是 a b ab ab 正则表达式 表达的语言 对应的自动机表示 :

在这里插入图片描述

3 . a b ∪ a ab \cup a aba 对应自动机构造 :

① 添加新开始状态 : 重新添加一个开始状态 ;

② 连接并运算前者 : 使用 ε \varepsilon ε 箭头 从这个新添加的开始状态 指向 a b ab ab 自动机开始状态 ;

③ 连接并运算后者 : 使用 ε \varepsilon ε 箭头 从这个新添加的开始状态 指向 a a a 自动机开始状态 ;


下面是 a b ∪ a ab \cup a aba 正则表达式 表达的语言 对应的自动机表示 :

在这里插入图片描述


4 . ( a b ∪ a ) ∗ ( ab \cup a )^* (aba) 对应自动机构造 :


① 构造方法 : 就是 在 ( a b ∪ a ) ( ab \cup a ) (aba) 对应自动机的基础上 , 使用 ε \varepsilon ε 箭头 , 从 接受状态 指向 开始状态 ;

② 连接个数 : 所有的接受状态 , 都 使用 ε \varepsilon ε 箭头 指向开始状态 , 这里有两个接受状态 , 需要都指向开始状态 ;

在这里插入图片描述

③ 添加新的开始状态 : 添加接受状态作为开始状态 , 指向开始状态 ;


参考博客 :

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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