目录
上一节直接使用了有限状态自动机, 所以这里还是有必要把基础补一下. 《形式语言与自动机理论》是计算思维的核心, 完全绕不开!
1. 二叉树的自动机描述
确定的有穷状态自动机定义如下:
A deterministic finite state automata (DFA) is a 5-tuple
M
=
(
Σ
,
Q
,
q
0
,
T
,
f
)
M = (\Sigma, \bm{Q}, \bm{q}_0, \bm{T}, f)
M=(Σ,Q,q0,T,f), where
a)
Σ
\Sigma
Σ is the alphabet;
b)
Q
\bm{Q}
Q is the set of states;
c)
q
0
∈
Q
\bm{q}_0 \in \bm{Q}
q0∈Q is the start state;
d)
T
⊆
Q
\bm{T} \subseteq \bm{Q}
T⊆Q is the set of terminal states;
e)
f
:
Q
×
Σ
∗
→
Q
f: \bm{Q} \times \Sigma^* \to \bm{Q}
f:Q×Σ∗→Q is the transition function.
Any
s
∈
Σ
∗
s \in \Sigma^*
s∈Σ∗ is accepted by the automata iff
f
(
q
0
,
s
)
∈
T
f(\bm{q}_0, s) \in \bm{T}
f(q0,s)∈T.
说明:
a) DFA 的开始状态只有一个, 因此为
Q
\bm{Q}
Q 的元素;
b) DFA 的终止状态可以有多个, 因此为
Q
\bm{Q}
Q 的子集;
c) DFA 的基础目标是看状态
s
s
s 是否合法 (被接受).
如果将二叉树看作是一个自动机, 它包括如下几个方面:
a) 有一个字母表, 即
(
l
,
r
)
(\mathrm{l}, \mathrm{r})
(l,r), 完美;
b) 有一个状态集合, 包括所有节点与空节点, 完美;
c) 有一个开始状态, 即根节点
r
r
r, 完美;
d) 有一个终止状态, 即空节点
ϕ
\phi
ϕ, 这里稍微有一点不同, 稍后重点讨论;
e) 从任一状态读入任一字母, 确定地转移到下一状态 (可以是自己), 这个用状态转移函数来描述,完美.
从如上 5 点分析可以看出, 二叉树在其中 4 点都与自动机完全契合, 唯一有问题的是终止状态. 二叉树本身没有一个“判断字符串是否合法”的目标,因此不存在终止状态. 但它又有一个特殊的状态, 即 ϕ \phi ϕ.
习题 3.1 模仿自动机的样子来重新定义二叉树.
2. 树的自动机描述
习题3.2 模仿自动机的样子来重新定义树.