📜  队列自动机简介

📅  最后修改于: 2021-08-25 18:22:00             🧑  作者: Mango

我们已经知道可以用于接受常规语言的有限自动机和可以用于识别上下文无关语言的下推自动机。

队列自动机(QDA)是一种不确定的自动机,类似于下推式自动机,但具有队列而不是堆栈,这有助于队列自动机识别上下文无关语言之外的语言。

QDA是6 –元组M = (Q, \sigma, \Gamma, \delta, q_0, F)

在哪里

  1. Q是有限状态集。
  2. \bf{\sigma}是有限输入字母的集合。
  3. \bf{\Gamma}是有限队列字母的集合。
  4. \delta : Q \times \sigma_\epsilon \times \Gamma_\epsilon \rightarrow P(Q \times \Gamma_\epsilon )
  5. q_0 \in Q是开始状态。
  6. F \subseteq Q是接受状态的集合。

字符串的接受

QDA M = (Q, \sigma, \Gamma, \delta, q_0, F)接受输入w如果w可以写成w= w_1w_2w_3 ... . w_m ,每个w_i \in\sigma_\epsilon并且有状态r_0, r_1, r_2, ... . ., r_m \in Q字符串s_0, s_1, s_2, ... . ., s_m \in \Gamma^*存在,从而满足以下条件:

  1. r_0 = q_0s_0 = \epsilon
  2. 为了0\leq i \leq m-1( r_{i+1}, b) = \delta(r_i, w_{i+1}, a), where\, a, b \in \Gamma_\epsilons_i = tas_{i+1} = btt \in \Gamma^*
  3. r_m \in F

例子:
定义语言的队列自动机{a^nb^n | n \geq 0}

解决方案:
Q = {q0,q1,q2,q3}并且\sigma = {a,b}并且\Gamma = {a,b,$}
过渡函数由下式给出:
\delta(q0, a, \epsilon)={(q0, a)}
\delta(q0, \epsilon, \epsilon)={(q1, \$)}
\delta(q1, \epsilon, a)={(q2, \epsilon)}
\delta(q2, \epsilon, a)={(q2, a)}
\delta(q2, b, \$)={(q1, \$)}
\delta(q1, \epsilon, \$)={(q3, \$)}

让我们看看这个自动机是如何工作的。

Row State Input Transition function Queue(Input from left) State after move
1 q0 aabb δ(q0, a, ε)={(q0, a)} a q0
2 q0 aabb δ(q0, a, ε)={(q0, a)} aa q0
3 q0 ε δ(q0, ε, ε)={(q1, $)} $aa q1
4 q1 ε δ(q1, ε, a)={(q2, ε)} $a q2
5 q2 ε δ(q2, ε, a)={(q2, a)} a$ q2
6 q2 aabb δ(q2, b, $)={(q1, $)} $a q1
7 q1 ε δ(q1, ε, a)={(q2, ε)} $ q2
8 q2 aabb δ(q2, b, $)={(q1, $)} $ q1
9 q1 ε δ(q1, ε, $)={(q3, $)} $ q3