Yin的笔记本

vuePress-theme-reco Howard Yin    2021 - 2025
Yin的笔记本 Yin的笔记本

Choose mode

  • dark
  • auto
  • light
Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • MyIdeas
  • Linux
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • Node
  • Nvidia
  • Python
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
author-avatar

Howard Yin

299

Article

152

Tag

Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • MyIdeas
  • Linux
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • Node
  • Nvidia
  • Python
  • Rust
  • Tex
  • Shell
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
  • 正则表达式

    • 正则表达式的定义
      • 正则表达式与DFA和正则语言间的等价性
        • 任意DFA的语言都可以由一个正则表达式所表示
        • 任意正则表达式的语言都可以由一个ε\varepsilonε-NFA所识别(由正则表达式构造ε\varepsilonε-NFA的方法)
      • 正则表达式的运算规则
        • 运算优先级定义
        • 一些正则表达式计算规则
        • 一些化简规则
        • 示例

    正则表达式

    vuePress-theme-reco Howard Yin    2021 - 2025

    正则表达式


    Howard Yin 2020-12-23 07:54:03 数学形式语言与自动机计算理论正则表达式

    !!注意正则语言和正则表达式之间的区别与联系!!

    # 正则表达式的定义

    字母表Σ\SigmaΣ上的正则表达式以递归方式定义:

    1. (基础)空集∅\emptyset∅是正则表达式,表示空语言
    2. (基础)ε\bm\varepsilonε是正则表达式,表示语言{ε}\{\varepsilon\}{ε}
    3. (基础)∀a∈Σ\forall a\in\Sigma∀a∈Σ,a\bm aa是正则表达式,表示语言{a}\{a\}{a}
    4. (递归)如果r\bm rr、s\bm ss都是正则表达式,分别表示语言LLL和MMM,那么:
      • (并运算)r+s\bm r+\bm sr+s是正则表达式,表示语言L∪ML\cup ML∪M
      • (连接运算)rs\bm r\bm srs是正则表达式,表示语言LMLMLM
      • (闭包运算)r∗\bm r^*r∗是正则表达式,表示语言L∗L^*L∗
      • (改变运算优先级)(r)(\bm r)(r)是正则表达式,表示语言LLL

    # 正则表达式与DFA和正则语言间的等价性

    为了简便起见,这里分别证明“任意DFA的语言都可以由一个正则表达式所表示”和“任意正则表达式的语言都可以由一个ε\varepsilonε-NFA所识别”。

    有了这两条性质,显而易见正则表达式与DFA和正则语言间的等价性:

    {任意DFA的语言都可以由一个正则表达式所表示任意正则表达式的语言都可以由一个ε-NFA所识别在下面证明⇒正则表达式与DFA等价DFA与ε-NFA等价⇒正则表达式与正则语言等价正则语言定义\begin{aligned} & \left\{\begin{aligned} &\text{任意DFA的语言都可以由一个正则表达式所表示}\\ &\text{任意正则表达式的语言都可以由一个$\varepsilon$-NFA所识别}\\ \end{aligned}\right.&\text{在下面证明}\\ &\Rightarrow\text{正则表达式与DFA等价}&\text{DFA与}\varepsilon\text{-NFA等价}\\ &\Rightarrow\text{正则表达式与正则语言等价}&\text{正则语言定义}\\ \end{aligned} ​{​任意DFA的语言都可以由一个正则表达式所表示任意正则表达式的语言都可以由一个ε-NFA所识别​⇒正则表达式与DFA等价⇒正则表达式与正则语言等价​在下面证明DFA与ε-NFA等价正则语言定义​

    # 任意DFA的语言都可以由一个正则表达式所表示

    原命题可以描述为:

    (∀A是DFA)(∃正则表达式R)(L(A)=L(R))(\forall A\text{是DFA})(\exists \text{正则表达式}R)(\bm L(A)=\bm L(R)) (∀A是DFA)(∃正则表达式R)(L(A)=L(R))

    此式显然成立,因为对于任意的语言LLL,我们只需要:

    1. (∀l=a1a2…an∈L)El=a1a2…an={a1a2…an}(\forall l=a_1a_2\dots a_n\in L)E_l=\bm{a_1a_2\dots a_n}=\{a_1a_2\dots a_n\}(∀l=a1​a2​…an​∈L)El​=a1​a2​…an​={a1​a2​…an​}:用连接运算对语言中的每个字符串构造一个正则表达式
    2. E=⋃l∈LEl=⋃a1a2…an∈L{a1a2…an}=LE=\bigcup_{l\in L}E_l=\bigcup_{a_1a_2\dots a_n\in L}\{a_1a_2\dots a_n\}=LE=⋃l∈L​El​=⋃a1​a2​…an​∈L​{a1​a2​…an​}=L:对所有这些正则表达式进行并运算即可得要构造的语言

    DFA的语言当然也能构造出来。

    注:实际计算中当然不可能遍历所有字符串,具体使用的构造方法有递归式法、状态消除法等。

    # 任意正则表达式的语言都可以由一个ε\varepsilonε-NFA所识别(由正则表达式构造ε\varepsilonε-NFA的方法)

    按照正则表达式的定义,用递归的方式进行证明。

    对于字母表Σ\SigmaΣ上的正则表达式:

    1. (基础)正则表达式∅\emptyset∅对应的ε\varepsilonε-NFA显然是对任何输入都不能跳转到接受状态的ε\varepsilonε-NFA:
    1. (基础)正则表达式ε\bm\varepsilonε对应的ε\varepsilonε-NFA显然是一个空转移就跳转到接受状态的ε\varepsilonε-NFA:
    1. (基础)∀a∈Σ\forall a\in\Sigma∀a∈Σ,正则表达式a={a}\bm a=\{a\}a={a}对应的ε\varepsilonε-NFA显然是读取字符aaa就跳转到接受状态的ε\varepsilonε-NFA:
    1. (递归)如果r\bm rr、s\bm ss都是正则表达式,分别对应一个ε\varepsilonε-NFA,那么可以指定一个起点和终点,其中指定的起点通过空转移到ε\varepsilonε-NFA内的起点、ε\varepsilonε-NFA内的终点空转移到指定的终点,构造如下ε\varepsilonε-NFA:

    那么:

    • (并运算)正则表达式r+s\bm r+\bm sr+s等价于并联它们就行:
    • (连接运算)正则表达式rs\bm r\bm srs等价于串联它们:
    • (闭包运算)正则表达式r∗\bm r^*r∗等价于首尾相连:
    • (改变运算优先级)正则表达式(r)(\bm r)(r)等价于原ε\varepsilonε-NFA不变。

    由此,所有的正则表达式均可一步步构造出一个ε\varepsilonε-NFA进行表示,原命题得证。

    # 正则表达式的运算规则

    # 运算优先级定义

    括号>闭包运算>连接运算>并运算。例如1+01∗=1+(0(1∗))\bm{1}+\bm{01^*}=\bm 1+(\bm 0(\bm 1^*))1+01∗=1+(0(1∗))

    # 一些正则表达式计算规则

    并运算结合律(r+s)+t=r+(s+t)交换律r+s=s+r幂等律r+r=r单位元∅∅+r=r+∅=r连接运算结合律(rs)t=r(st)单位元εrε=εr零元∅r∅=∅r=∅rs≠sr分配律左分配律r(s+t)=rs+rt右分配律(r+s)t=rt+st闭包运算(r∗)∗=r∗∅∗=εε∗=εr∗=r++ε(ε+r)∗=r∗\begin{aligned} \text{并运算}&\\ &\text{结合律}&\bm{(r+s)+t}&=\bm{r+(s+t)}\\ &\text{交换律}&\bm{r+s}&=\bm{s+r}\\ &\text{幂等律}&\bm{r+r}&=\bm{r}\\ &\text{单位元}\emptyset&\emptyset+\bm{r}&=\bm{r}+\emptyset=\bm{r}\\ \text{连接运算}&\\ &\text{结合律}&\bm{(rs)t}&=\bm{r(st)}\\ &\text{单位元}\bm\varepsilon&\bm{r}\bm\varepsilon&=\bm\varepsilon\bm{r}\\ &\text{零元}\emptyset&\bm{r}\emptyset&=\emptyset\bm{r}=\emptyset\\ &&\bm{rs}&\not =\bm{sr}\\ \text{分配律}&\\ &\text{左分配律}&\bm{r(s+t)}&=\bm{rs+rt}\\ &\text{右分配律}&\bm{(r+s)t}&=\bm{rt+st}\\ \text{闭包运算}&\\ &&(\bm{r}^*)^*&=\bm{r}^*\\ &&\emptyset^*&=\bm\varepsilon\\ &&\bm\varepsilon^*&=\bm\varepsilon\\ &&\bm r^*&=\bm{r^++\varepsilon}\\ &&(\bm{\varepsilon+r})^*&=\bm r^*\\ \end{aligned} 并运算连接运算分配律闭包运算​结合律交换律幂等律单位元∅结合律单位元ε零元∅左分配律右分配律​(r+s)+tr+sr+r∅+r(rs)trεr∅rsr(s+t)(r+s)t(r∗)∗∅∗ε∗r∗(ε+r)∗​=r+(s+t)=s+r=r=r+∅=r=r(st)=εr=∅r=∅​=sr=rs+rt=rt+st=r∗=ε=ε=r++ε=r∗​

    # 一些化简规则

    (ε+r)r∗=r∗r+rs∗=rs∗\begin{aligned} (\bm{\varepsilon+r})\bm r^*&=\bm r^*\\ \bm{r+rs}^*&=\bm{rs}^*\\ \end{aligned} (ε+r)r∗r+rs∗​=r∗=rs∗​

    # 示例

    EEE L(E)\bm L(E)L(E)
    a+b\bm a+\bm ba+b {a}∪{b}={a,b}\{a\}\cup\{b\}=\{a,b\}{a}∪{b}={a,b}
    (a+b)(a+b)(\bm a+\bm b)(\bm a+\bm b)(a+b)(a+b) {a,b}{a,b}={aa,ab,ba,bb}\{a,b\}\{a,b\}=\{aa,ab,ba,bb\}{a,b}{a,b}={aa,ab,ba,bb}
    (a+b)∗(aa+bb)(\bm a+\bm b)^*(\bm{aa}+\bm{bb})(a+b)∗(aa+bb) {a,b}∗{aa,bb}={以aa或bb结尾的字符串}\{a,b\}^*\{aa,bb\}=\{\text{以}aa\text{或}bb\text{结尾的字符串}\}{a,b}∗{aa,bb}={以aa或bb结尾的字符串}
    1+01∗\bm{1}+\bm{01^*}1+01∗ {ε,1,01,0101,010101,…}\{\varepsilon,1,01,0101,010101,\dots\}{ε,1,01,0101,010101,…}
    (0+1)∗01(\bm{0+1})^*\bm{01}(0+1)∗01 {w∈{0,1}∗∣w以01结尾}\{w\in\{0,1\}^*\mid w\text{以}01\text{结尾}\}{w∈{0,1}∗∣w以01结尾}
    01(0+1)∗+(0+1)∗01\bm{01}(\bm{0+1})^*+(\bm{0+1})^*\bm{01}01(0+1)∗+(0+1)∗01 {w∈{0,1}∗∣w以01开头或以01结尾}\{w\in\{0,1\}^*\mid w\text{以}01\text{开头}\text{或以}01\text{结尾}\}{w∈{0,1}∗∣w以01开头或以01结尾}
    (0+1)∗(1+10+100)(\bm{0+1})^*(\bm{1}+\bm{10}+\bm{100})(0+1)∗(1+10+100) {w∈{0,1}∗∣w最后三个字符至少有一个是1}\{w\in\{0,1\}^*\mid w\text{最后三个字符至少有一个是1}\}{w∈{0,1}∗∣w最后三个字符至少有一个是1}
    帮助我们改善此页面!
    创建于: 2020-11-07 16:09:31

    更新于: 2020-12-23 07:54:35