非決定性オートマトン(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}
以上です
お疲れ様でした
小テスト
形式言語とオートマトン