非決定性オートマトン(NFA)
Download
Report
Transcript 非決定性オートマトン(NFA)
形式言語 と オートマトン
第3回
鳥取大学工学研究科
情報エレクトロニクス専攻
田中美栄子
本日の予定
形式言語とオートマトン
形式言語とオートマトン
“有限状態オートマトン”は
最終評価の6割を占めます。
もし、今までの授業で分かっていない人がいたら
今日の授業で追いつきましょう!
形式言語とオートマトン
有限オートマトンの5字組み表現
5字組み表現
M= <Q,Σ,δ,q0,F>
Q⇒状態の有限集合
Σ ⇒入力記号の有限集合
δ ⇒動作関数(δ:Q×Σ→Q)
q0⇒初期状態(q0∈ Q)
F ⇒受理状態の集合
形式言語とオートマトン
決定性有限オートマトン
すべての状態ですべての入力に対して、
遷移先が唯一
a
形式言語とオートマトン
有限オートマトンの5字組み表現
5字組み表現
M= <Q,Σ,δ,q0,F>
Q = {q1 , q2}
Σ = {a , b}
δ :Q×Σ→Q
δ (q1 , a) = q1
δ (q1 , b) = q2
δ (q2 , a) = q1
δ (q2 , b) = q2
q0 = q1
F = {q2}
形式言語とオートマトン
a
q1
b
q2
a
状態遷移図と
5字組みが等価
b
abbaを与えたときの一連
の動作を下記のように簡潔
に表す
(r,abba)
M
(s,bba)
M
(r,ba)
様相
形式言語とオートマトン
M
(r,a)
M
(s,ε)
非決定性有限オートマトン
一つの入力に対し、遷移先が唯一でない
a
a
形式言語とオートマトン
非決定性有限オートマトン
入力に対して、遷移先が無い
a
形式言語とオートマトン
?
非決定性有限オートマトン
Q {r , s, t}
{a, b}
Q
:Q 2
(r , a) {r , s}, (r , b) {r},
(s, a) {t}, (s, b) ,
(t , a) ,
(t , b)
q0 r
F {t}
遷移先がない
形式言語とオートマトン
a
a
r
b
s
a
t
非決定性有限オートマトン
baaを入力すると、三種類の遷移がある。
( r , baa) ( r , aa) ( r , a ) ( s, )
×
×
( r , baa) ( r , aa) ( s, a ) (t , )
○
( r , baa) ( r , aa) ( r , a ) ( r , )
M
M
M
M
M
M
受理状態であるtで遷移が終わっ
ているので、baaは受理される
形式言語とオートマトン
M
M
M
r
a
s
a
t
baaを入力すると、三種類の遷移がある。
r
a
s
複数の遷移に対し,一つ
形式言語とオートマトン
a
○
t
が出れば,受理される
形式言語とオートマトン
空動作とは?
空動作(ε-move)とは
入力記号を読まずに状態遷移できる
行き先は状態の集合(空集合Φを含む)
ε
S
ε
P
(S, ) {P}
形式言語とオートマトン
S
ε
Q
R
(S, ) {Q, R}
空動作を許す、とは?
0
p
ε
q
ε
r
1
入力無しでも二つの状態
形式言語とオートマトン
q,rのどちらかに行ける
空動作の五字組み
M Q, , , q0 , F
Q
状態の有限集合
入力記号の有限集合
動作関数
: Q ( { }) 2
Q
q0 Q
q0
初期状態
F
受理状態の有限集合
形式言語とオートマトン
注意
F Q
空動作の五字組み
M Q, , , q0 , F
Q { p, q, r}
{0,1}
0
: Q ( { }) 2Q
( p, ) {q, r}, ( p,0) ( p,1) ,
(q,0) {q},
(q,1) (q, ) ,
(r ,1) {r},
(r ,0) (r , )
q0 p
F {q, r}
形式言語とオートマトン
p
q
r
1
空動作の動作例
・入力00に対するMの動作
0
0 $
0
ε
q
p
ε
r
1
形式言語とオートマトン
空動作の動作例
・入力00に対するMの動作
0
場合1
0 $
0
ε
p
入力記号を読まずに状態遷移
2通り存在する
形式言語とオートマトン
q
ε
場合2
r
1
空動作の動作例
・入力00に対するMの動作
0
場合1
0 $
0
ε
p
受理できる
q
ε
r
1
形式言語とオートマトン
空動作の動作例
・入力00に対するMの動作
0
0 $
0
ε
p
これ以上遷移できない
→受理できない
形式言語とオートマトン
q
ε
場合2
r
1
空動作のまとめ
空動作とは,入力記号を読まなくてもできる状態遷移
状態遷移は様々な場合が存在する
ε
Q
ε
R
S
(S, ) {Q, R}
形式言語とオートマトン
形式言語とオートマトン
DFA(決定性FSA)
形式言語とオートマトン
NFA(非決定性FSA)
これまで
DFA(決定性FSA)
NFA(非決定性FSA)
を学んだ
ε-NFA(空操作のある非決定性FSA)
形式言語とオートマトン
DFAとNFAの同等性とは
ある言語を受理する
NFA((空操作のある)非決定性FSA) (𝜀-)𝑛𝑓𝑎𝑀𝑛
が存在するならば
同じ言語を受理する
DFA(決定性FSA) 𝑑𝑓𝑎𝑀𝑑
が存在する
形式言語とオートマトン
(𝜀-)𝑛𝑓𝑎𝑀𝑛 から 𝑑𝑓𝑎𝑀𝑑 を構成する方法を学ぶ!!
NFA(非決定性FSA)
a
a
b
a
r
DFA(決定性FSA)
s
a
t
{r}
a
{r,s}
b
b
b
形式言語とオートマトン
a
{r,s,t}
アルゴリズム 2.1
教科書P.47
文字多いけど,
簡単よ,諦めないで!!!
NFA(非決定性FSA)
a
a
r
s
a
t
DFA(決定性FSA)
a
b
{r}
a
{r,s}
b
b
形式言語とオートマトン
形式言語とオートマトン
b
a
{r,s,t}
アルゴリズム 2.1
説明しやすいため,
遷移図を5字組化
𝑄𝑛 = {𝑟, 𝑠, 𝑡}
Σ𝑛 = {𝑎, 𝑏}
𝛿𝑛 : 𝑄𝑛 × Σ𝑛 → 2𝑄𝑛
a
𝛿𝑛 𝑟, 𝑎 = 𝑟, 𝑠 , 𝛿𝑛 𝑟, 𝑏 = 𝑟 ,
𝛿𝑛 𝑠, 𝑎 = 𝑡 ,
𝛿𝑛 𝑠, 𝑏 = ,
𝛿𝑛 𝑡, 𝑎 = ,
𝛿𝑛 𝑡, 𝑏 =
𝑞0𝑛 = 𝑟
𝐹𝑛 = {𝑡}
形式言語とオートマトン
形式言語とオートマトン
r
b
a
s
a
t
アルゴリズム 2.1 の 1
1. 𝑀𝑛 の状態の集合の部分集合に全体で、
𝑀𝑑 の状態(𝑄𝑑 )をつくる
𝑀𝑛 の状態の集合𝑄𝑛 = 𝑟, 𝑠, 𝑡 の部分集合:
{
𝑟, 𝑠 ,
𝑄𝑑 = {
𝑟, 𝑠, 𝑡 , 𝑟, 𝑠 , 𝑠, 𝑡 , 𝑡, 𝑟 , 𝑟 , 𝑠 , 𝑡 , }
形式言語とオートマトン
𝑠, 𝑡 ,
𝑡, 𝑟 ,
𝑟 ,
𝑠 ,
𝑡 , }
𝑟, 𝑠, 𝑡 ,
アルゴリズム 2.1 の 1
𝑄𝑑 = { 𝑟, 𝑠, 𝑡 , 𝑟, 𝑠 , 𝑠, 𝑡 , 𝑡, 𝑟 , 𝑟 , 𝑠 , 𝑡 , }
{r,s,t}
{r,s}
{r}
{s,t}
{s}
{t,r}
{t}
形式言語とオートマトン
アルゴリズム 2.1 の 2
2. 𝑀𝑛 において入力を読まずに遷移できる状態の集合を
𝑀𝑑 の初期状態(𝑞0𝑑 )とする
𝑞0𝑛 = 𝑟
𝑞0𝑑 = {𝑟}
形式言語とオートマトン
アルゴリズム 2.1 の 2
𝑞0𝑑 = {𝑟}
{r,s,t}
{r,s}
{r}
{s,t}
{s}
{t,r}
{t}
形式言語とオートマトン
アルゴリズム 2.1 の 3
3. 𝑀𝑛 の受理状態を1つでも含む部分集合に対する状態を
𝑀𝑑 の受理状態とする
𝐹𝑛 = {𝑡}
𝑄𝑑 = {
既知
𝑟, 𝑠, 𝑡 , 𝑟, 𝑠 , 𝑠, 𝑡 , 𝑡, 𝑟 , 𝑟 , 𝑠 , 𝑡 , }
𝑀𝑛 の受理状態tを含む状態の部分集合
𝐹𝑑 = {
𝑟, 𝑠, 𝑡 , 𝑠, 𝑡 , 𝑡, 𝑟 , 𝑡
形式言語とオートマトン
}
アルゴリズム 2.1 の 3
𝐹𝑑 = {
{r,s,t}
𝑟, 𝑠, 𝑡 , 𝑠, 𝑡 , 𝑡, 𝑟 , 𝑡
{r,s}
{r}
{s,t}
{s}
{t,r}
{t}
形式言語とオートマトン
}
アルゴリズム 2.1 の 4
4.𝑀𝑑 の動作関数(𝛿𝑑 )を決める
Σ𝑛 = {𝑎, 𝑏}
まず,入力記号を Σ𝑑 = Σ𝑛 = {𝑎, 𝑏}
𝑄𝑑 = { 𝑟, 𝑠, 𝑡 , 𝑟, 𝑠 , 𝑠, 𝑡 , 𝑡, 𝑟 , 𝑟 , 𝑠 , 𝑡 , }
𝛿𝑑 : 𝑄𝑑 × Σ𝑑 → 2𝑄𝑑 から
𝛿𝑑 {𝑟, 𝑠, 𝑡}, 𝑎 =
𝛿𝑑 {𝑟, 𝑠, 𝑡}, 𝑏 =
𝛿𝑑 {𝑟, 𝑠}, 𝑎 =
𝛿𝑑 {𝑟, 𝑠}, 𝑏 =
𝛿𝑑 {𝑠, 𝑡}, 𝑎 =
𝛿𝑑 {𝑠, 𝑡}, 𝑏 =
⋮
𝛿𝑑 𝜑, 𝑎 =
形式言語とオートマトン
⋮
𝛿𝑑 𝜑, 𝑏 =
例
アルゴリズム 2.1 の 4
4.𝑀𝑑 の動作関数(𝛿𝑑 )を決める
𝛿𝑑 {𝑟, 𝑠, 𝑡}, 𝑎 = {𝑟, 𝑠, 𝑡}
𝛿𝑑 {𝑟, 𝑠, 𝑡}, 𝑏 =
{𝑟}
𝛿𝑑 {𝑟, 𝑠, 𝑡}, 𝑎 = 𝛿𝑛 (𝑟, 𝑎) ∪ 𝛿𝑛 (𝑠, 𝑎) ∪ 𝛿𝑛 𝑡, 𝑎 = {r, s, t}
𝛿𝑑 {𝑟, 𝑠, 𝑡}, 𝑏 = 𝛿𝑛 (𝑟, 𝑏) ∪ 𝛿𝑛 (𝑠, 𝑏) ∪ 𝛿𝑛 𝑡, 𝑏 = {r}
𝛿𝑛 : 𝑄𝑛 × Σ𝑛 → 2𝑄𝑛
𝛿𝑛 𝑟, 𝑎 = 𝑟, 𝑠 ,
𝛿𝑛 𝑟, 𝑏 = 𝑟 ,
𝛿𝑛 𝑠, 𝑎 = 𝑡 ,
𝛿𝑛 𝑠, 𝑏 = ,
𝛿𝑛 𝑡, 𝑎 = ,
𝛿𝑛 𝑡, 𝑏 =
アルゴリズム 2.1 の 4
𝛿𝑑 {𝑟, 𝑠, 𝑡}, 𝑎 = {𝑟, 𝑠, 𝑡}
{r,s,t}
a
b
𝛿𝑑 {𝑟, 𝑠, 𝑡}, 𝑏 =
{r,s}
{r}
{s,t}
{s}
{t,r}
{t}
形式言語とオートマトン
{𝑟}
アルゴリズム 2.1 の 4
全ての動作関数を求める
𝜹𝒅
𝒂
𝒃
{𝑟, 𝑠, 𝑡}
{𝑟, 𝑠, 𝑡}
{𝑟}
{𝑟, 𝑠}
{𝑟, 𝑠, 𝑡}
{𝑟}
{𝑠, 𝑡}
{𝑡}
{𝑡, 𝑟}
{𝑟, 𝑠}
{𝑟}
{𝑟}
{𝑟, s}
{𝑟}
{𝑠}
{𝑡}
{𝑡}
形式言語とオートマトン
アルゴリズム 2.1 の 4
下図になる
a
b
{r,s}
{r}
b
a,b
a
{r,s,t}
a
b
{s,t}
a
形式言語とオートマトン
b
{s}
b
{t,r}
a
b
a
{t}
a,b
アルゴリズム 2.1 の 5
5.𝑀𝑑 の初期状態から到達できない状態(遷移)をすべて削除
a
b
{r,s}
{r}
b
𝑎,
a,b𝑏
a
{r,s,t}
a
b
{s,t}
aa
形式言語とオートマトン
b𝑏
b𝑏
{t,r}
{s}
aa
b𝑏
aa
{t}
a,b
𝑎, 𝑏
∅
アルゴリズム 2.1 の 5
5.𝑀𝑑 の初期状態から到達できない状態(遷移)をすべて削除
a
b
{r,s}
{r}
b
𝑎, 𝑏
a
{r,s,t}
a
b
{s,t}
a
形式言語とオートマトン
𝑏
𝑏
{t,r}
{s}
a
𝑏
a
{t}
𝑎, 𝑏
∅
アルゴリズム 2.1 の 5
a
{r,s}
b
{r}
b
a
{r,s,t}
b
{r}
a
a
b
a
{r,s}
b
b
形式言語とオートマトン
a
{r,s,t}
NFA
DFA
する理由は?
NFA(非決定性FSA)
a
a
r
s
a
t
DFA(決定性FSA)
a
b
{r}
a
{r,s}
b
b
形式言語とオートマトン
形式言語とオートマトン
b
a
{r,s,t}
NFA
遷移先がなかったり
複数あったり
DFA
遷移先が唯一
a
b
a
a
r
s
a
t
{r}
a
r
s
t
a
r, s
t
--
形式言語とオートマトン
b
r
---
a
{r,s,t}
b
𝜹𝒅
b
a
b
{r}
{r,s}
{r,s,t}
{r,s}
{r,s,t}
{r,s,t}
{r}
{r}
{r}
b
𝜹𝒏
{r,s}
以上です
お疲れ様でした
小テスト
形式言語とオートマトン