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
查看源码
  • 下推自动机

    • 下推自动机(Pushdown Automata, PDA)形式定义
      • 定义PDA的动作(状态转移函数详解)
      • 例:语言L=∑n=0∞0n1n={0n1n∣n≥0}L=\sum_{n=0}^\infty\bm 0^n\bm 1^n=\{0^n1^n|n\geq 0\}L=∑n=0∞​0n1n={0n1n∣n≥0}的PDA
    • PDA的瞬时描述
      • ID的转移
      • PDA的性质
    • PDA的语言
      • L(P)\bm L(P)L(P):以终态方式接收的语言
      • N(P)\bm N(P)N(P):以空栈方式接收的语言
      • 终态方式和空栈方式的等价性(未完成)

下推自动机

vuePress-theme-reco Howard Yin    2021 - 2025

下推自动机


Howard Yin 2021-03-03 12:10:02 数学形式语言与自动机计算理论形式语言上下文无关语言上下文无关文法下推自动机

“无限状态自动机”:由无穷多个有限状态自动机组成的自动机L=∑n=0∞0n1n={0n1n∣n≥0}L=\sum_{n=0}^\infty\bm 0^n\bm 1^n=\{0^n1^n|n\geq 0\}L=∑n=0∞​0n1n={0n1n∣n≥0}

# 下推自动机(Pushdown Automata, PDA)形式定义

PDA

PDA为一个七元组PPP:

P=(Q,Σ,Γ,δ,q0,Z0,F)P=(Q, \Sigma, \Gamma, \delta, q_0, Z_0, F) P=(Q,Σ,Γ,δ,q0​,Z0​,F)

  • QQQ:有穷状态集
  • Σ\SigmaΣ:字母表(有穷输入符号集)
  • Γ\GammaΓ:有穷栈符号集
  • δ\deltaδ:状态转移函数,δ:Q×(Σ∪{ε})→2Q×Γ∗\delta:Q\times(\Sigma\cup\{\varepsilon\})\rightarrow 2^{Q\times\Gamma^*}δ:Q×(Σ∪{ε})→2Q×Γ∗
  • q0q_0q0​:初始状态,q0∈Qq_0\in Qq0​∈Q
  • Z0Z_0Z0​:栈底符号,Z0∈Γ−ΣZ_0\in\Gamma-\SigmaZ0​∈Γ−Σ
  • FFF:终结状态集(接受状态集),F⊆QF\subseteq QF⊆Q

# 定义PDA的动作(状态转移函数详解)

对PDA的当前状态q∈Qq\in Qq∈Q、输入字符a∈Σa\in\Sigmaa∈Σ、当前栈顶符号ZZZ,状态转移函数:

δ(q,a,Z)={(p,β)∣p∈Q,β∈Γ∗}\delta(q,a,Z)=\{(p,\beta)|p\in Q,\beta\in\Gamma^*\} δ(q,a,Z)={(p,β)∣p∈Q,β∈Γ∗}

表示PDA的状态转移为p∈Qp\in Qp∈Q、栈顶符号修改为字符串β\betaβ,且转移过程是非确定的。每一个状态的状态转移图表示为:

  • 栈顶的一个符号ZZZ修改为字符串β\betaβ→\rightarrow→弹出栈顶符号后再压入多个符号
  • 栈顶的一个符号ZZZ修改为空串ε\varepsilonε→\rightarrow→只弹出栈顶符号不压入符号

由定义可知,PDA还具有空转移能力:

δ(q,ε,Z)={(p,β)∣p∈Q,β∈Γ∗}\delta(q,\varepsilon,Z)=\{(p,\beta)|p\in Q,\beta\in\Gamma^*\} δ(q,ε,Z)={(p,β)∣p∈Q,β∈Γ∗}

每一个状态的状态转移图表示为:

综合得一次状态转移的状态转移图:

# 例:语言L=∑n=0∞0n1n={0n1n∣n≥0}L=\sum_{n=0}^\infty\bm 0^n\bm 1^n=\{0^n1^n|n\geq 0\}L=∑n=0∞​0n1n={0n1n∣n≥0}的PDA

# PDA的瞬时描述

PDA的瞬时描述(Instantaneous Description, ID)定义为:

(q,w,γ)∈Q×Σ∗×Γ∗(q,w,\gamma)\in Q\times\Sigma^*\times\Gamma^* (q,w,γ)∈Q×Σ∗×Γ∗

表示此时PDA处于状态qqq,剩余输入串为www,栈内符号串为γ\gammaγ。

# ID的转移

若PDAPPP某一步状态转移(p,β)∈δ(q,a,Z)(p,\beta)\in\delta(q,a,Z)(p,β)∈δ(q,a,Z),则这一步PDA的状态将由(q,aw,Zα)(q,aw,Z\alpha)(q,aw,Zα)变为(p,w,βα)(p,w,\beta\alpha)(p,w,βα),称为ID的转移,记为⊢P\vdash_P⊢P​:

(p,β)∈δ(q,a,Z)⇔(q,aw,Zα)⊢P(p,w,βα)(p,\beta)\in\delta(q,a,Z)\Leftrightarrow(q,aw,Z\alpha)\vdash_P(p,w,\beta\alpha) (p,β)∈δ(q,a,Z)⇔(q,aw,Zα)⊢P​(p,w,βα)

进一步,对于瞬时描述III、JJJ、KKK,可递归定义⊢P∗\vdash_P^*⊢P∗​:

I⊢P∗II⊢PJ∧J⊢P∗K⇒I⊢P∗K\begin{aligned} &I\vdash_P^*I\\ &I\vdash_PJ\wedge J\vdash_P^*K\Rightarrow I\vdash_P^*K\\ \end{aligned} ​I⊢P∗​II⊢P​J∧J⊢P∗​K⇒I⊢P∗​K​

PPP已知时可省略记为⊢\vdash⊢和⊢∗\vdash^*⊢∗。

# PDA的性质

# PDA一次状态转移不会用到输入字符之后的部分和栈顶符号之下的部分

(q,x,α)⊢P∗(p,y,β)⇒(q,xw,αγ)⊢P∗(p,yw,βγ)(q,x,\alpha)\vdash_P^*(p,y,\beta)\Rightarrow(q,xw,\alpha\gamma)\vdash_P^*(p,yw,\beta\gamma) (q,x,α)⊢P∗​(p,y,β)⇒(q,xw,αγ)⊢P∗​(p,yw,βγ)

# PDA多次状态转移不会用到输入字符之后的部分(但是可能会用到栈顶符号之下的部分)

(∀w∈Σ∗)(q,xw,αγ)⊢P∗(p,yw,βγ)⇒(q,x,α)⊢P∗(p,y,β)(\forall w\in\Sigma^*)(q,xw,\alpha\gamma)\vdash_P^*(p,yw,\beta\gamma)\Rightarrow(q,x,\alpha)\vdash_P^*(p,y,\beta) (∀w∈Σ∗)(q,xw,αγ)⊢P∗​(p,yw,βγ)⇒(q,x,α)⊢P∗​(p,y,β)

# PDA的语言

对于一个PDAP=(Q,Σ,Γ,δ,q0,Z0,F)P=(Q, \Sigma, \Gamma, \delta, q_0, Z_0, F)P=(Q,Σ,Γ,δ,q0​,Z0​,F),定义了两种接收语言的方式。

# L(P)\bm L(P)L(P):以终态方式接收的语言

这种语言中的字符串读取结束时可以让PDA运行到接受状态:

L(P)={w∣(q0,w,Z0)⊢P∗(p,ε,γ),p∈F}\bm L(P)=\{w|(q_0,w,Z_0)\vdash_P^*(p,\varepsilon,\gamma),p\in F\} L(P)={w∣(q0​,w,Z0​)⊢P∗​(p,ε,γ),p∈F}

# N(P)\bm N(P)N(P):以空栈方式接收的语言

这种语言中的字符串读取结束时可以让PDA的栈底符号弹出(栈弹空,使PDA无法正常运行):

L(P)={w∣(q0,w,Z0)⊢P∗(p,ε,ε),p∈F}\bm L(P)=\{w|(q_0,w,Z_0)\vdash_P^*(p,\varepsilon,\varepsilon),p\in F\} L(P)={w∣(q0​,w,Z0​)⊢P∗​(p,ε,ε),p∈F}

以空栈方式接收的语言有时可以让PDA的设计更加简单。

# 终态方式和空栈方式的等价性(未完成)

(∀L)PF(\forall L)P_F (∀L)PF​

帮助我们改善此页面!
创建于: 2020-12-18 02:35:29

更新于: 2021-03-03 12:10:27