(NFA)を同等な決定性オートマトン(DFA)

Download Report

Transcript (NFA)を同等な決定性オートマトン(DFA)

形式言語 と オートマトン
第4回
鳥取大学工学研究科
情報エレクトロニクス専攻
田中美栄子
本日の予定
形式言語とオートマトン
(𝜀-)𝑛𝑓𝑎𝑀𝑛 から 𝑑𝑓𝑎𝑀𝑑 を構成する方法を学ぶ!!
NFA(非決定性FSA)
形式言語とオートマトン
DFA(決定性FSA)
アルゴリズム 2.1
の
復習
形式言語とオートマトン
アルゴリズム 2.1
説明しやすいため,
遷移図を5字組化
𝑄𝑛 = {𝑟, 𝑠, 𝑡}
Σ𝑛 = {𝑎, 𝑏}
𝛿𝑛 : 𝑄𝑛 × Σ𝑛 → 2𝑄𝑛
a
𝛿𝑛 𝑟, 𝑎 = 𝑟, 𝑠 , 𝛿𝑛 𝑟, 𝑏 = 𝑟 ,
𝛿𝑛 𝑠, 𝑎 = 𝑡 ,
𝛿𝑛 𝑠, 𝑏 =  ,
𝛿𝑛 𝑡, 𝑎 =  ,
𝛿𝑛 𝑡, 𝑏 = 
𝑞0𝑛 = 𝑟
𝐹𝑛 = {𝑡}
形式言語とオートマトン
a
r
b
s
a
t
1. 𝑀𝑛 の状態の集合の部分集合に全体で、
𝑀𝑑 の状態(𝑄𝑑 )をつくる
𝑄𝑑 = { 𝑟, 𝑠, 𝑡 , 𝑟, 𝑠 , 𝑠, 𝑡 , 𝑡, 𝑟 , 𝑟 , 𝑠 , 𝑡 ,  }
{r,s,t}
{r,s}
{r}
{s,t}
{s}
{t,r}
{t}
形式言語とオートマトン

2. 𝑀𝑛 において入力を読まずに遷移できる状態の集合を
𝑀𝑑 の初期状態(𝑞0𝑑 )とする
𝑞0𝑑 = {𝑟}
{r,s,t}
{r,s}
{r}
{s,t}
{s}
{t,r}
{t}
形式言語とオートマトン

3. 𝑀𝑛 の受理状態を1つでも含む部分集合に対する状態を
𝑀𝑑 の受理状態とする
𝐹𝑑 = {
{r,s,t}
𝑟, 𝑠, 𝑡 , 𝑠, 𝑡 , 𝑡, 𝑟 , 𝑡
{r,s}
{r}
{s,t}
{s}
{t,r}
{t}
形式言語とオートマトン
}

4.𝑀𝑑 の動作関数(𝛿𝑑 )を決める
𝛿𝑑 {𝑟, 𝑠, 𝑡}, 𝑎 = {𝑟, 𝑠, 𝑡}
{r,s,t}
a
b
𝛿𝑑 {𝑟, 𝑠, 𝑡}, 𝑏 =
{r,s}
{r}
{s,t}
{s}
{t,r}
{t}
形式言語とオートマトン
{𝑟}

アルゴリズム 2.1 の 4
全ての動作関数を求める
a
b
{r,s}
{r}
b
a,b
a
{r,s,t}
b
{s,t}
a
a
形式言語とオートマトン
b
{s}
b
{t,r}
a
b
a
{t}
a,b

5.𝑀𝑑 の初期状態から到達できない状態(遷移)をすべて削除
a
b
{r,s}
{r}
b
𝑎, 𝑏
a
{r,s,t}
b
{s,t}
a
a
形式言語とオートマトン
𝑏
𝑏
{t,r}
{s}
a
𝑏
a
{t}
𝑎, 𝑏
∅
アルゴリズム 2.1
a
{r,s}
b
{r}
b
a
{r,s,t}
b
a
b
{r} a
a
{r,s} a
b
b
形式言語とオートマトン
{r,s,t}
NFA
DFA
する理由は?
NFA(非決定性FSA)
a
DFA(決定性FSA)
a
b
a
r
s
a
t
{r} a
{r,s} a
b
b
形式言語とオートマトン
b
{r,s,t}
NFA
遷移先がなかったり
複数あったり…
DFA
遷移先が唯一
a
b
a
a
r
s
a
{r}
t
a
{r,s} a
{r,s,t}
b
b
b
𝜹𝒏
r
s
t
a
r, s
t
--
形式言語とオートマトン
b
r
---
𝜹𝒅
a
b
{r}
{r,s}
{r}
{r,s}
{r,s,t}
{r}
{r,s,t}
{r,s,t}
{r}
アルゴリズム 2.2 を学ぶ
形式言語とオートマトン
アルゴリズム 2.2
NFA(非決定性FSA)
DFA(決定性FSA)
0

q

r
p
空動作
がある
形式言語とオートマトン
0
{q}
1
0
{p,q,r}
1

1
0
1
{r}
0,1
まず、NFAを五字組化
M n  Q n ,  n ,  n , q 0 n , Fn 
Q n  { p , q , r}
 n  { 0 ,1}
0
 n : Q n  (  n  { })  2
Qn
 n ( p ,  )  { q , r },  n ( p , 0 )   n ( p ,1)   ,
 n ( q , 0 )  { q },
 n ( q ,1)   n ( q ,  )   ,
 n ( r ,1)  { r },
 n ( r ,0 )   n ( r ,  )  
q0n  p
Fn  { q , r }
形式言語とオートマトン

q

r
p
1
1. 𝑀𝑛 において初期状態から入力を読まずに遷移できる状
態の集合に対応して、 𝑀𝑑 の初期状態(𝑞0𝑑 )とする
0
p
ε
ε
q
r
1
入力を読まなくてもq, rに遷移可能
形式言語とオートマトン
初期状態 𝒒𝟎𝒅 = 𝒑, 𝒒, 𝒓
𝒒𝟎𝒅 = 𝒑, 𝒒, 𝒓
{p,q,r}
形式言語とオートマトン
2. 𝑀𝑑 の初期状態(𝑞0𝑑 )について、各入力記号𝑎 ∈ Σにおけ
  { 0 ,1}
る状態遷移を決める
𝛿𝑛 (𝑝, 0) ∪ 𝛿𝑛 (𝑞, 0) ∪ 𝛿𝑛 𝑟, 0 = {𝑞}
さらに 𝑞から入力を読まずに遷移できる状態はない
𝛿𝑑 𝑝, 𝑞, 𝑟 , 0 = {𝑞}
新状態
𝛿𝑛 (𝑝, 1) ∪ 𝛿𝑛 (𝑞, 1) ∪ 𝛿𝑛 𝑟, 1 = {𝑟}
さらに 𝑟から入力を読まずに遷移できる状態はない
𝛿𝑑 𝑝, 𝑞, 𝑟 , 1 = {𝑟}
新状態
 n ( p ,  )  { q , r },  n ( p , 0 )   n ( p ,1)   ,
 n ( q , 0 )  { q },
 n ( q ,1)   n ( q ,  )   ,
 n ( r ,1)  { r },
 n ( r ,0 )   n ( r ,  )  
形式言語とオートマトン
𝛿𝑑 𝑝, 𝑞, 𝑟 , 0 = {𝑞}
𝛿𝑑 𝑝, 𝑞, 𝑟 , 1 = {𝑟}
新状態 𝑞 , 𝑟 をつくり
{q}
0
{p,q,r}
1
{r}
形式言語とオートマトン
手順2.をまた実行する、新状態の状態遷移を決める
𝛿𝑑 𝑞 , 0 = 𝛿𝑛 (𝑞, 0) = {𝑞}
𝛿𝑑 𝑞 , 1 = 𝛿𝑛 𝑞, 1 = ∅
𝛿𝑑 𝑟 , 0 = 𝛿𝑛 𝑟, 0 = ∅
新状態
𝛿𝑑 𝑟 , 1 = 𝛿𝑛 𝑟, 1 = {𝑟}
 n ( p ,  )  { q , r },  n ( p , 0 )   n ( p ,1)   ,
 n ( q , 0 )  { q },
 n ( q ,1)   n ( q ,  )   ,
 n ( r ,1)  { r },
 n ( r ,0 )   n ( r ,  )  
形式言語とオートマトン
新状態  をつくり
0
{q}
1
0
{p,q,r}

1
0
1
{r}
形式言語とオートマトン
手順2.をまた実行する、新状態の状態遷移を決める
𝛿𝑑 ∅, 0 = ∅
𝛿𝑑 ∅, 1 = ∅
これ以上、新たに状態が作られなかったので、手順2.を
終わる
形式言語とオートマトン
0
{q}
1
0
{p,q,r}

1
0
1
{r}
形式言語とオートマトン
0,1
3. 𝑀𝑛 の受理状態を1つでも含む部分集合に対する状態を
𝑀𝑑 の受理状態とする
Fn  { q , r }
𝐹𝑑 = {
𝑝, 𝑞, 𝑟 , 𝑞 , 𝑟
形式言語とオートマトン
}
𝐹𝑑 = {
𝑝, 𝑞, 𝑟 , 𝑞 , 𝑟
}
0
{q}
1
0
{p,q,r}

1
0
1
{r}
形式言語とオートマトン
0,1
アルゴリズム 2.1 と アルゴリズム 2.2 の比較
5ステップ
3ステップ
使いやすい
形式言語とオートマトン
DFAとNFAの同等性まとめ
・決定性有限オートマトン(DFA)
同等(同じ仕事をする)
・非決定性有限オートマトン(NFA)
・空動作を許す非決定性有限オートマトン(NFA)
アルゴリズム2.1や2.2を使って書き換えられる
形式言語とオートマトン
形式言語とオートマトン
定義
 同じ言語を受理するDFAの
中でも状態数の一番少ない
DFAを最簡形のDFAという
形式言語とオートマトン
𝑑𝑓𝑎 𝑀𝑑 から最簡形の𝑑𝑓𝑎 𝑀𝑠 を構成する
アルゴリズム 2.3 を学ぶ
形式言語とオートマトン
お疲れ様
小テストです
形式言語とオートマトン