下推自动机

来自testwiki
跳转到导航 跳转到搜索

Template:Cleanup-jargon自动机理论中,下推自动机Template:Lang-en)是使用了包含数据的有限自动机

综述

下推自动机比有限自动机复杂:除了有限状态组成部分外,还包括一个长度不受限制的;下推自动机的状态迁移不但要参考有限状态部分,也要参照当前的状态;状态迁移不但包括有限状态的变迁,还包括一个的出栈或入栈过程。下推自动机可以形象的理解为,藉由加上读取一个容量无限的能力,扩充一个能做ϵ-转移的非确定有限自动机

下推自动机存在“确定”与“非确定”两种形式,两者并不等价。(对有限自动机两者是等价的)

每一个下推自动机都接受一个形式语言。被“非确定下推自动机”接受的语言是上下文无关语言

如果我们把下推自动机扩展,允许一个有限自动机存取两个,我们得到一个能力更强的自动机,这个自动机与图灵机等价。

下推自动机作为一个形式系统最早于1961年出现在 Oettinger 的论文中。它与上下文无关文法的等价性是由乔姆斯基于1962年发现的。

形式定义

PDA 形式定义为 6-元组:

M=(Q, Σ, Γ, δ, q0, F) 这里的

  • Q状态的有限集合
  • Σ 是输入字母表的有限集合
  • Γ字母表的有限集合
  • δ: Q×Σϵ×Γϵ𝒫(Q×Γϵ)转移函数
  • q0 是“开始状态”
  • FQ 是“接受状态”的集合
  • Γϵ=Γ{ϵ}
  • Σϵ=Σ{ϵ}

计算定义 1

对于任何 PDA M=(Q, Σ, Γ, δ, q0, F),计算路径是一个有序的(n+1)-元组 (q0,q1,....,qn),这里的 qiQ,n0,它满足如下条件:

(i)   (qi+1,bi+1)δ(qi,wi+1,ai+1) 对于 i = 0, 1, 2,......, n-1,

这里的 wi+1Σϵ, ai+1, bi+1Γϵ

(ii) s0,s1,s2,s3,,snΓ* 使得

si=ai+1ti,si+1=bi+1ti,tiΓ*

在直觉上,PDA 在计算过程中任何一点上都面对着多种可能性,从栈顶读一个符号并把它替代为另一个符号,从栈顶读一个符号并删除它而不替换,不从栈顶读任何符号但压入另一个符号进去,或什么都不做。所有这些都同时由等式 si=ai+1tisi+1=bi+1ti 来支配。si 是紧接在第 i+1 次转移移动之前的栈内容,而 ai+1 是要从栈顶去除的符号。si+1 是紧接在第 i+1 次转移移动之后栈内容,而 bi+1 是在第 i+1 次转移移动期间要增加到栈上的符号。

ai+1bi+1 二者都可以 ϵ

如果 ai+1ϵbi+1ϵ,则 PDA 从栈读一个符号并把它替代为另一个符号。

如果 ai+1ϵbi+1=ϵ,则 PDA 从栈读一个符号并删除它而不替换。

如果 ai+1=ϵbi+1ϵ,则 PDA 简单的增加一个符号到栈上。

如果 ai+1=ϵbi+1=ϵ,则 PDA 保持栈不变动。

注意当 n=0 时,计算路径就是单元素集合 (q0)

计算定义 2

对于任何输入 w=w1w2wm, wiΣ,m0,M 接受 w,如果存在计算路径 (q0,q1,....,qn) 和有限序列 r0,r1,r2,rmQ, mn,使得

(i) 对于每个 i = 0, 1, 2,...m,ri 都在计算路径上。就是说

f(i) 这里的 if(i)n 使得 ri=qf(i)

(ii) (qf(i)+1,bf(i)+1)δ(ri,wi+1,af(i)+1) 对于每个 i = 0, 1, 2,...m-1。

这里的 af(i)+1bf(i)+1 定义同于计算定义 1。

(iii) (qj+1,bj+1)δ(qj,ϵ,aj+1),如果 qj{r0,r1,rm}

这里的 aj+1bj+1 定义同于计算定义 1。

(iv) rm=qnrmF

注意上述定义不提供测试空栈的机制。要这么做你需要在所有计算开始前在栈上写一个特殊符号,使得 PDA 可以在检测到这个符号的时候有效的识别出栈已经空了。形式的说,实现它可通过介入转移 δ(q0,ϵ,ϵ)={(q1,$)}这里的 $ 是特殊符号。

例子

下面是识别语言 {0n1n|n0} 的 PDA 的形式描述:

M=(Q, Σ, Γ, δ, q1, F)

  • Q={q1,q2,q3,q4}
  • Σ={0,1}
  • Γ={0,$}
  • F={q1,q4}
  • δ(q1,ϵ,ϵ)={(q2,$),(q1,ϵ)}
  • δ(q2,0,ϵ)={(q2,0)}
  • δ(q2,1,0)={(q3,ϵ)}
  • δ(q3,1,0)={(q3,ϵ)}
  • δ(q3,ϵ,$)={(q4,ϵ)}
  • δ(q,w,a)= 对于任何其他状态、输入和栈符号的值。

理解计算过程

下面展示上述 PDA 如何计算不同的输入字符串。

(a) 输入字符串 = 0011

(i) 写 δ(q1, ϵ, ϵ) (q2, $) 来表示 (q2, $) δ(q1, ϵ, ϵ)
s0 = ϵ, s1 = $, t = ϵ, a = ϵ, b = $
设置 r0 = q2
(ii) δ(r0, 0, ϵ) = δ(q2, 0, ϵ) (q2, 0)
s1 = $, a = ϵ, t = $, b = 0, s2 = 0$
设置 r1 = q2
(iii) δ(r1, 0, ϵ) = δ(q2, 0, ϵ) (q2, 0)
s2 = 0$, a = ϵ, t = 0$, b = 0, s3 = 00$
设置 r2 = q2
(iv) δ(r2, 1, 0) = δ(q2, 1, 0) (q3, ϵ)
s3 = 00$, a = 0, t = 0$, b = ϵ, s4 = 0$
设置 r3 = q3
(v) δ(r3, 1, 0) = δ(q3, 1, 0) (q3, ϵ)
s4 = 0$, a = 0, t = $, b = ϵ, s5 = $
(vi) δ(q3, ϵ, $) (q4, ϵ)
s5 = $, a = $, t = ϵ, b = ϵ, s6 = ϵ
设置 r4 = q4
因为 q4 是接受状态,0011 被接受。
作为总结,计算路径 = (q1, q2, q2, q2, q3, q3, q4)
而 (r0, r1, r2, r3, r4) = (q2, q2, q2, q3, q4)

(b) 输入字符串 = 001

计算移动 (i), (ii), (iii), (iv) 将必定同于情况 (a),否则,PDA 在到达 (v) 之前就已经进入死胡同。
(v) δ(r3, ϵ, a) = δ(q3, ϵ, a)
因为 s4 = 0$,要么 a = ϵ 要么 a = 0
在任何一种情况下,δ(q3, ϵ, a) =
因此计算在 r3 = q3 进入死胡同,这不是接受状态。所以 001 被拒绝。

(c) 输入字符串 = ϵ

设置 r0 = q1, r1 = q1
δ(r0, ϵ, ϵ) (q1, ϵ)
因为 q1 是接受状态,ϵ 被接受。

广义下推自动机(GPDA)

GPDA 是在一个步骤内写入整个字符串到栈上或从栈上去除整个字符串的 PDA。

GPDA 形式定义为 6-元组 M=(Q, Σ, Γ, δ, q0, F)

这里的 Q, Σ, Γ, q0 和 F 的定义同于 PDA。
δ: Q×Σϵ×Γ*𝒫(Q×Γ*) 是转移函数。

GPDA 的计算规则同于 PDA,除了 ai+1 和 bi+1 现在是字符串而不是符号之外。

GPDA 和 PDA 是等价的,如果一个语言可被一个 PDA 识别,它也可被一个 GPDA 识别,反之亦然。

可以使用下列模拟公式化对 GPDA 和 PDA 的等价性的一个分析式证明:

δ(q1, w, x1x2...xm) (q2, y1y2...yn) 是 GPDA 的转移。

这里的 q1, q2 Q, w Σϵ, x1x2...xm Γ*, m0, y1y2...yn Γ*, n0。

构造 PDA 的下列转移:

δ'(q1, w, x1) (p1, ϵ)
δ'(p1, ϵ, x2) (p2, ϵ)
δ'(pm-1, ϵ, xm) (pm, ϵ)
δ'(pm, ϵ, ϵ ) (pm+1, yn)
δ'(pm+1, ϵ, ϵ ) (pm+2, yn-1)
δ'(pm+n-1, ϵ, ϵ ) (q2, y1)

参见

外部链接

参考书目

  • 《自动机理论、语言和计算导引》,John E. Hopcroft,Jeffery D. Ullman,徐美瑞译,洪加威校,科学出版社,1986年
  • Template:Cite book Section 2.2: Pushdown Automata, pp.101–114.

Template:形式语言与形式文法