形式语言与自动机学习day2(二)--正则语言与自动机

本文讨论了形式语言中的自动机理论,包括带有空转移的非有限状态自动机,空转移的概念,以及正则表达式的递归定义、运算优先级和与自动机的等价性。通过实例和递归表达式的形式,展示了如何设计和转换NFA与DFA,并证明了它们之间的关系。
摘要由CSDN通过智能技术生成

title: 形式语言与自动机
date: 2024-01-24 17:44:49
tags: Computer Science

形式语言与自动机

带有空转移能力的非有限状态自动机

状态的空转移

  • 允许输入空串进行状态转移

一个举例:
设计 L = ω ∈ { 0 , 1 } ∗ ∣ ω 倒数 3 个字符至少有一个是 1 的 N F A 设计L={\omega \in \{0,1\}^*|\omega 倒数3个字符至少有一个是1}的NFA 设计L=ω{0,1}ω倒数3个字符至少有一个是1NFA

DFA:在这里插入图片描述

NFA:在这里插入图片描述

空转移的NFA:

在这里插入图片描述

由此得出定义:

在这里插入图片描述

注意状态转移的输入发生了变化,包含了空输入。其余与NFA定义一致。

正则表达式

  • 通过表达式描述正则语言,代数表示方法

递归定义

我们可以定义一个四则运算:

  • 任何数都是四则表达式;

  • 如果a和b是四则运算表达式,那么a,b满足:

    • a+b
    • a-b
    • a*b
    • a/b

    都是四则运算.

由此我们可以得出正则表达式的递归定义: 在这里插入图片描述

语言的运算

在这里插入图片描述

运算优先级

在这里插入图片描述
这里着重说明“”的用法:
在这里插入图片描述
**表示被“
”修饰的表达式任意组成**

给出正则表达式(aa)*(bb)*b定义的语言.

L ( ( a a ) ∗ ( b b ) ∗ b ) = L ( ( a a ) ∗ ) L ( ( b b ) ∗ ) L ( b ) = ( { a } { a } ) ∗ ( { b } { b } ) ∗ b = { a 2 } ∗ { b 2 } ∗ { b } = { a 2 n b 2 m + 1 ∣ n > = 0 , m > = 0 } L((aa)*(bb)*b) = L((aa)*)L((bb)*)L(b)=(\{a\}\{a\})*(\{b\}\{b\})*{b} = \{a^2\}*\{b^2\}*\{b\} = \{a^{2n}b^{2m+1}|n >=0,m>=0\} L((aa)(bb)b)=L((aa))L((bb))L(b)=({a}{a})({b}{b})b={a2}{b2}{b}={a2nb2m+1n>=0,m>=0}

化简规则

在这里插入图片描述

自动机和正则表达式的等价性

若L=L(A)是某DFA A的表达式,那么存在正则表达式R满足L = L ®.

我们需要构造一个和正则表达式等价的自动机来完成这一点的证明。

在这里插入图片描述

递归表达式

在这里插入图片描述

我们可以得出普遍的状态转移图如上,比如得到接受状态需要通过输入x和y,那么R = x + y,由此我们知道R应当是所有初始状态到接收状态路径的集合,我们要用正则表达式构造这个表达。

更一般的,R应该是通过更多个输入到达接受状态,我们可以画出以下图像:

在这里插入图片描述

其中 R i j 表示从 i 节点到 j 节点的路径, R i j ( k ) , 表示不经过 k 的 i 到 j 的路径,我们推断任意两节点的路径可以用以下表达: 其中R_{ij}表示从i节点到j节点的路径,R_{ij}^{(k)},表示不经过k的i到j的路径,我们推断任意两节点的路径可以用以下表达: 其中Rij表示从i节点到j节点的路径,Rij(k),表示不经过kij的路径,我们推断任意两节点的路径可以用以下表达:

R i j = R i j ( K ) + R i k ( k ) ( R k ( k ) ) ∗ R k j ( k ) R_{ij} = R_{ij}^{(K)} + R_{ik}^{(k)}(R_k^{(k)})^*R_{kj}^{(k)} Rij=Rij(K)+Rik(k)(Rk(k))Rkj(k)

递归到直接相连的两个节点。

将DFA的状态从1开始编号,1为初始状态:

在这里插入图片描述

那么与A等价的正则表达式为:
⋃ j ∈ F R 1 j ( n ) \bigcup_{j\in F} R_{1j}^{(n)} jFR1j(n)
递归表达为:
R i j ( k ) = R i j ( k − 1 ) + R i k ( k − 1 ) + ( R k k k − 1 ) ∗ R k j ( k − 1 ) R_{ij}^{(k)} = R_{ij}^{(k-1)}+R_{ik}^{(k-1)}+(R_{kk}^{k-1})^*R_{kj}^{(k-1)} Rij(k)=Rij(k1)+Rik(k1)+(Rkkk1)Rkj(k1)

R i j 0 = { a ∣ δ ( q i , a ) = q j , i ≠ j a ∣ δ ( q i , a ) = q j , ∪ { ϵ } , i = j R_{ij}^0 = \begin{cases} {a|\delta(q_i,a) =q_j, i\neq j} \\[2ex] {a|\delta(q_i,a) =q_j, \cup \{\epsilon \},i=j} \end{cases} Rij0= aδ(qi,a)=qj,i=jaδ(qi,a)=qj,{ϵ},i=j

证明递归表达式正确:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值