本贴是对闵老师的博客的理解
一.字母表
1.1字母表
常见的字母表包括:
Σ = { 0 , 1 } \Sigma= \{0, 1\} Σ={0,1}
Σ = { a , … , z } \Sigma = \{\mathrm{a}, \dots, \mathrm{z}\} Σ={a,…,z}
我们需要的字母表:
Σ = { l , r } \Sigma = \{\mathrm{l},\mathrm{r}\} Σ={l,r}
1.2正闭包
The positive closure of alphabet is given by Σ + = Σ 1 ∪ Σ 2 ∪ . . . \Sigma^+ = \Sigma^1 \cup \Sigma^2 \cup ... Σ+=Σ1∪Σ2∪...
Σ 1 = { l , r } \Sigma^1=\{\mathrm{l},\mathrm{r}\} Σ1={l,r}
Σ 2 = { l l , l r , r r , r l } \Sigma^2=\{\mathrm{ll},\mathrm{lr},\mathrm{rr},\mathrm{rl}\} Σ2={ll,lr,rr,rl}
… \dots …
Σ + = { l , r , l l , l r , r l , r r , l l l , … } \Sigma^+ = \{\mathrm{l}, \mathrm{r}, \mathrm{ll}, \mathrm{lr}, \mathrm{rl}, \mathrm{rr}, \mathrm{lll}, \dots \} Σ+={l,r,ll,lr,rl,rr,lll,…}
1.3克林闭包
空串 ε \varepsilon ε (varepsilon)
The Cling closure of alphabet Σ ∗ = Σ 0 ∪ Σ + = { ε } ∪ Σ + \Sigma^* = \Sigma^0 \cup \Sigma^+ = \{\varepsilon\} \cup \Sigma^+ Σ∗=Σ0∪Σ+={ε}∪Σ+
字母表克林闭包的元素, 就称为字符串
1.4跳转函数
为了描述在某个状态接受字符串的跳转, 可定义跳转函数为:
Let S \bm{S} S denote the set of states. The positive state transition function is given by f : S × Σ + → S f: \bm{S} \times \Sigma^+ \to \bm{S} f:S×Σ+→S , where ∀ s ∈ S \forall s \in \bm{S} ∀s∈S and a 1 a 2 … a k ∈ Σ + a_1 a_2 \dots a_k \in \Sigma^+ a1a2…ak∈Σ+,
f ( s , a 1 a 2 … a k ) = f ( f ( s , a 1 ) , a 2 a 3 … a k ) f(s, a_1 a_2 \dots a_k) = f(f(s, a_1), a_2 a_3 \dots a_k) f(s,a1a2…ak)=f(f(s,a1),a2a3…ak)
二.二叉树
2.1初始版本
Let Σ = { l , r } \Sigma = \{\mathrm{l}, \mathrm{r}\} Σ={l,r}be the alphbet and ϕ \phi ϕ be a null node. A binary tree is a triple T = ( V , r , c ) T = (\bm{V}, r, c) T=(V,r,c), where V = { v 1 , … , v n } \bm{V} = \{v_1, \dots, v_n\} V={v1,…,vn} is the set of nodes, r ∈ V r \in \bm{V} r∈V is the root, and c : V ∪ { ϕ } × Σ + → V ∪ { ϕ } c: \bm{V} \cup \{\phi\} \times \Sigma^+ \to \bm{V} \cup \{\phi\} c:V∪{ϕ}×Σ+→V∪{ϕ} satisfying
a) c ( ϕ , l ) = c ( ϕ , r ) = ϕ c(\phi, \mathrm{l}) = c(\phi, \mathrm{r}) = \phi c(ϕ,l)=c(ϕ,r)=ϕ;
b) ∀ v ∈ V ∖ { r } \forall v \in \bm{V} \setminus \{r\} ∀v∈V∖{r}, ∃ 1 \exists1 ∃1 s ∈ Σ + s \in \Sigma^+ s∈Σ+ st. ( r , s ) = v (\mathrm{r},\mathrm{s})=v (r,s)=v;
c) ∀ v ∈ V \forall v \in \bm{V} ∀v∈V, a ∈ Σ a \in \Sigma a∈Σ , c ( v , a ) ≠ r c(\mathrm{v},\mathrm{a}) \neq r c(v,a)=r
这是一个三元组。
b)代表从根节点到任意节点的路径仅存在唯一的路径
c) 代表根节点没有父节点
注:由b) 和 c)我们推出了一个性质
V
\bm V
V中节点没有环
2.2打磨版本
2.2.1定义
Let Σ = { l , r } \Sigma = \{\mathrm{l}, \mathrm{r}\} Σ={l,r}be the alphbet and ϕ \phi ϕ be a null node. A binary tree is a triple T = ( V , r , c ) T = (\bm{V}, r, c) T=(V,r,c), where V = { v 1 , … , v n } \bm{V} = \{v_1, \dots, v_n\} V={v1,…,vn} is the set of nodes, r ∈ V r \in \bm{V} r∈V is the root, and c : V ∪ { ϕ } × Σ ∗ → V ∪ { ϕ } c: \bm{V} \cup \{\phi\} \times \Sigma^* \to \bm{V} \cup \{\phi\} c:V∪{ϕ}×Σ∗→V∪{ϕ} satisfying
∀ v ∈ V \forall v \in \bm{V} ∀v∈V, ∃ 1 \exists1 ∃1 s ∈ Σ ∗ s \in \Sigma^* s∈Σ∗ st. ( r , s ) = v (\mathrm{r},\mathrm{s})=v (r,s)=v;
a)和c)都是冗余的,但是只保留b),会出现一种特殊情况
所以我们引入了空串,
Σ
∗
=
Σ
0
∪
Σ
+
=
{
ε
}
∪
Σ
+
\Sigma^* = \Sigma^0 \cup \Sigma^+ = \{\varepsilon\} \cup \Sigma^+
Σ∗=Σ0∪Σ+={ε}∪Σ+
c
(
r
,
ε
)
=
r
c(r, \varepsilon) = r
c(r,ε)=r. 即从
r
r
r 读入空串到自己
2.2.2性质
①: 二叉树的任何节点 (空节点除外) 不会有到自己的环.
Property 1.
∀
v
∈
V
\forall v \in \bm{V}
∀v∈V,
!
∃
s
∈
Σ
+
! \exists s \in \Sigma^+
!∃s∈Σ+,st.
c
(
v
,
s
)
=
v
c(v, s) = v
c(v,s)=v.
Proof. Suppose that
∃
v
i
∈
V
\exists v_i \in \bm{V}
∃vi∈V and
s
′
∈
Σ
+
s' \in \Sigma^+
s′∈Σ+,st.
c
(
v
i
,
s
′
)
=
v
i
c(v_i, s') = v_i
c(vi,s′)=vi
According to Definition 17,
∃
s
1
∈
Σ
∗
\exists s_1 \in \Sigma^*
∃s1∈Σ∗ st.
c
(
r
,
s
1
)
=
v
i
c(r, s_1) = v_i
c(r,s1)=vi.
Consequentyly
c
(
r
,
s
1
s
′
)
=
c
(
c
(
r
,
s
1
)
,
s
′
)
=
c
(
v
i
,
s
′
)
=
v
i
c ( r , s_1 s ′ ) = c ( c ( r , s_1 ) , s ′ ) = c ( v i , s ′ ) = v i
c(r,s1s′)=c(c(r,s1),s′)=c(vi,s′)=vi , and
s
s
s takes at least two values
(
s
1
(s1
(s1 and
s
1
s
′
)
s1s′)
s1s′), making it not unique.
This contradition shows that the assumption does not hold.
The proof is finished.
②:空节点的左右孩子都是自己
Property 1.
c
(
ϕ
,
l
)
=
c
(
ϕ
,
r
)
=
ϕ
c(\phi, \mathrm{l}) = c(\phi, \mathrm{r}) = \phi
c(ϕ,l)=c(ϕ,r)=ϕ.
Proof.
s
=
a
1
a
2
…
a
n
+
1
∈
Σ
∗
s = a_1 a_2 \dots a_{n+1} \in \Sigma^*
s=a1a2…an+1∈Σ∗ , we consider
c
(
r
,
s
)
c(r, s)
c(r,s). Let the path corresponding to the calculation of
c
(
r
,
s
)
c(r, s)
c(r,s) be
v
0
′
v
1
′
…
v
n
+
1
′
v_0' v_1' \dots v_{n+1}'
v0′v1′…vn+1′ where
v
0
′
=
r
v_0' = r
v0′=r. Since
∣
V
∪
{
ϕ
}
∣
=
n
+
1
|\bm{V} \cup \{\phi\}| = n + 1
∣V∪{ϕ}∣=n+1, according to the Pigeon Cage Principle (鸽笼原理), there must
∃
0
≤
i
<
j
≤
n
+
1
\exists0 \leq i < j \leq n + 1
∃0≤i<j≤n+1 st.
v
i
′
=
v
j
′
v_i' = v_j'
vi′=vj′ . In other words,
v
i
′
…
v
j
′
v_i' \dots v_j'
vi′…vj′ is a loop.
Now assume that
∃
i
<
k
<
j
\exists i < k < j
∃i<k<j st.
v
k
′
∈
V
v_k' \in \bm{V}
vk′∈V. We have
c
(
r
,
a
1
a
2
…
a
k
)
=
v
k
′
c(r, a_1 a_2 \dots a_k) = v_k'
c(r,a1a2…ak)=vk′ , and
c
(
r
,
a
1
a
2
…
a
j
a
i
+
1
a
i
+
2
…
a
k
)
=
v
k
′
c(r, a_1 a_2 \dots a_j a_{i+1} a_{i + 2} \dots a_k) = v_k'
c(r,a1a2…ajai+1ai+2…ak)=vk′ , making the path from
r
r
r to
v
k
′
v_k'
vk′ not unique.
Hence the assumption does not hold, and
v
i
′
=
v
i
+
1
′
=
⋯
=
v
j
′
=
ϕ
v_i' = v_{i + 1}' = \dots = v_j' = \phi
vi′=vi+1′=⋯=vj′=ϕ.
In other words, any character takes
ϕ
\phi
ϕ to itself.
This completes the proof.
说明:
a) 鸽笼原理:
n
+
1
n + 1
n+1只鸽子飞进
n
n
n个鸽笼, 至少有两个鸽子在同一个笼子里. 这是组合数学中重要的定理.
b) 这里用到了有穷状态自动机 (Finite state automata) 的知识. 从任一节点 (状态), 读入一个字符, 到达下一个节点. 这里的
ϕ
\phi
ϕ被称为 陷井状态.
1)开始在一个节点,读入n+1个字符,就会经过n+2个节点。有效集合加上{
ϕ
\phi
ϕ}一共n+1个节点。由鸽笼原理。得知肯定由两个节点相同。两个节点相同由性质1可知 二叉树的任何节点 (空节点除外) 不会有到自己的环,所以这两个相同的点肯定是
ϕ
\phi
ϕ.
2)接着我们探讨
v
i
,
v
j
v_i,v_j
vi,vj是否存在有效节点。我们假设在i,j中存在有效节点k。由于
v
k
′
v_k'
vk′属于有效节点,再由b)可知
c
(
r
,
a
1
a
2
…
a
k
)
=
v
k
′
c(r, a_1 a_2 \dots a_k) = v_k'
c(r,a1a2…ak)=vk′ 。
c
(
r
,
a
1
a
2
…
a
j
a
j
+
1
a
j
+
2
…
a
k
)
=
v
k
′
c(r, a_1 a_2 \dots a_j a_{j+1} a_{j + 2} \dots a_k) = v_k'
c(r,a1a2…ajaj+1aj+2…ak)=vk′ =
c
(
r
,
a
1
a
2
…
a
i
a
i
+
1
a
i
+
2
…
a
k
)
=
v
k
′
c(r, a_1 a_2 \dots a_i a_{i+1} a_{i + 2} \dots a_k) = v_k'
c(r,a1a2…aiai+1ai+2…ak)=vk′,这就导致路径不唯一与定义相矛盾。为了防止不冲突,我们只有当读取到
a
i
a_i
ai或者
a
j
a_j
aj时是
ϕ
\phi
ϕ,后面
a
i
+
1
…
a_{i+1}\dots
ai+1…或者
a
j
+
1
…
a_{j+1}\dots
aj+1…都是
ϕ
\phi
ϕ节点是才可以。即
v
i
′
=
v
i
+
1
′
=
⋯
=
v
j
′
=
ϕ
v_i' = v_{i + 1}' = \dots = v_j' = \phi
vi′=vi+1′=⋯=vj′=ϕ.证明了空节点自成一个环路