私の問題はあなたとは違うように聞こえるかもしれません。
私は初心者で、有限オートマトンを学んでいます。以下の特定のマシンの有限オートマトンの正規表現を見つけるためにインターネットを調べています。
上記のマシンの「有限オートマトンの正規表現」を書くのを手伝ってくれる人はいますか?
どんな助けでもありがたいです
言語記号の代わりに0
、1
をΣ = {a, b}
とすると、次は新しいDFAです。
通知の開始状態はQです
あなたは与えていませんが、私の答えでは初期状態はQです、最終状態もQ。
DFAで受け入れられる言語は、記号a
とb
で構成されるすべての文字列のセットです。ここで、記号a
とb
の数は偶数です(Λ
を含む) )。
いくつかの文字列の例は{Λ, aa, bb, abba, babbab }
であり、順序の制約はなく、記号の出現パターンは両方とも偶数である必要があります。
注:numberOf(a
)とnumberOf(b
)はゼロであるため、Λ
が許可されます。
私が並べた答えで言ったように: DFAの正規表現を書く方法 すべての州はいくつかの情報を保存しています。以下は、上記のDFAの各状態で保存される情報です。
Q:偶数の
a
と偶数のb
Q1:奇数a
と偶数b
Q2:奇数a
と奇数b
Q3:偶数a
と奇数b
(最終状態のセットを変更することで、より興味深い言語のDFAを作成できます)
両方の回答でDFAの罰金REに対する私のアプローチが異なるため、裏打ちされた回答を読む必要があります
正規表現とは何ですか?
Arden's Therm を使用して説明する以下のアプローチは、単一の開始状態があり、ヌル移動が定義されていない遷移図に適用できます(DFAはこの形式です)。このテクニックは本で説明されています: 形式言語とオートマタ理論
覚えておいてください 4.2 ARDEN THEOREM :
B
とC
をΣ
上の2つの正規表現とします。C
にΛ
が含まれていない場合、方程式A = B + ACには、一意の(1つだけの)解A = BC *があります。
[解決策]:
ステップ-1:DFAの各状態に対応する1つの方程式である初期方程式を記述します。この方程式は、単一のステップで状態に到達する方法を意味します
したがって、DFAによると、次の4つの方程式が可能です。
- Q =
Λ
+ Q1a + Q3b- Q1 = Qa + Q2b
- Q2 = Q1b + Q3a
- Q3 = Qb + Q2a
式(1)で、余分なΛ
はQ は初期状態であり、入力なしで到達できます(開始点)。 Qだから また、これは最終状態にすぎません。a, b
で構成される文字列は、Qで終了する場合は許容されます。。 Qの値 必要な正規表現が得られるので、ターゲットはa, b
に関して単純に式-(1)を使用することです。
ステップ2:他の方程式の状態の値を入力し、アーデンの簡略化方程式を使用して、を使用して方程式を簡略化します。
最初に式-(4)を取り、Qの値を置き換えましょう2 式-(3)から。
Q3 = Qb + Q2a
Q3 = Qb +(Q1b + Q3a)a
Q3 = Qb + Q1ba + Q3aa
最後の方程式は、アーデンの方程式A = B + AC
の形式で表示できます。 AはQです3、B = Qb + Q1baおよびC = aa
。したがって、アーデンのサームによれば、方程式Q3 = Qb + Q1ba + Q3aaには、次のような独自のソリューションがあります。
Q3 =(Qb + Q1ba)(aa)*
または、次のように書くことができます。
5.
Q3 = Qb(aa)* + Q1ba(aa)*
論理的にあなたは式をチェック/理解することができます-(5)はQを意味します3 Qにb
を適用することで、2つの方法(+
)で到達できます。 次に、Qにラベルaa
のループがあります3、2番目の方法はQからです1ba
を適用します。
同様の方法で、式を簡略化できます-(2)
Q1 = Qa + Q2b
Q1 = Qa +(Q1b + Q3a)b
Q1 = Qa + Q1bb + Q3ab
ここでは、アーデンの簡略化ルールを使用してください。
Q1 =(Qa + Q3ab)(bb)*
さらに簡素化
6.
Q1 = Qa(bb)* + Q3ab(bb)*
Qの値3 式-(5)から式-(6)へ
Q1 = Qa(bb)* +(Qb(aa)* + Q1ba(aa)*)ab(bb)*
Q1 = Qa(bb)* + Qb(aa)* ab(bb)* + Q1ba(aa)* ab(bb)*
アーデンの単純化の法則を使用して、この最後の方程式を再度改善します。
Q1 =(Qa(bb)* + Qb(aa)* ab(bb)*)(ba(aa)* ab(bb)*)*
qを取る 詐欺師:
7.
Q1 = Q(a(bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)*
この方程式を理解できますか、Qに行く方法1 状態Qから?この解を方程式として覚えています-(7)
上記のように、Qの値を評価できます1 状態Qの観点から およびa, b
、同様に、状態Qの値を評価します。3。このために、状態Qの値を簡単に置くことができます1 式-(5)から式-(7)へ。
5.
Q3 = Qb(aa)* + Q1ba(aa)*.
Q3 = Qb(aa)* + Q(a(bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)* ba(aa)*8.
Q3 = Q (b(aa)* +(a(bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)* ba(aa)*)
ここで、式番号(1)に状態Qの値を入力します。3 とQ1 式番号(8)と(7)からそれぞれ受容的に。
Q =
Λ
+ Q1a + Q3b
Q =Λ
+ Q(a(bb)* +(aa)* ab(bb)*)(ba(aa)* ab(bb)*)* a + Q (b(aa)* +(a(bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)* ba(aa)*)b
さて、前回はアーデン解を適用して状態Qの値を見つけました 記号a
およびb
に関して。
Q =
Λ
+((a(bb)* +(aa)* ab(bb)*)(ba(aa)* ab(bb)*)* a +(b(aa)* +(a( bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)* ba(aa)*)b)*
これは(ここでΛ
を破棄できます)と同じですRE:
((a(bb)* +(aa)* ab(bb)*)(ba(aa)* ab(bb)*)* a +(b(aa)* +(a(bb)* + b(aa )* ab(bb)*)(ba(aa)* ab(bb)*)* ba(aa)*)b)*
これはあなたが探しているREです。
さらに単純化できるかどうかはわかりません。私はあなたのための練習としてそれを残します。
リンクされた質問で、私は非公式で分析的な方法を提案しましたが、このDFAにREを適用して見つけるのは困難でした。この質問は、アーデンの定理と段階的な解決策の力を示しています。
編集:
私の以前の正規表現は正しいですが、非対称の形であるためブドウには難しいです。以下では、より対称的な新しい形式のREを作成しています。
次の式-(5)、(6)があります。
5.
Q3 = Qb(aa)* + Q1ba(aa)*6.
Q1 = Qa(bb)* + Q3ab(bb)*
どちらも構造が対称的で、習得が容易です。 (上記の式-(5)の後に私のコメントを読んでください)
状態Qの値を評価するには1 Qに関して、Qの値を入れました3 式-(5)から式-(6)に変換すると、式-(7)は次のようになります。
7.
Q1 = Q(a(bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)*
同様に、状態Qの値を評価するには3 Qに関して、Qの値を入れることができます1 式-(6)から式-(5)に変換すると、次のように式-(8)の新しい形式が得られます。
Q3 = Qb(aa)* + Q1ba(aa)*
Q3 = Qb(aa)* +(Qa(bb)* + Q3ab(bb)*)ba(aa)*
Q3 = Qb(aa)* + Qa(bb)* ba(aa)* + Q3ab(bb)* ba(aa)*
これで、式(8)を目的の形式にすることができます。
8.
Q3 = Q(b(aa)* + a(bb)* ba(aa)*)(ab(bb)* ba(aa)*)*
これで、式-(1)、(7)、(8)が得られます。
1.
Q =Λ
+ Q1a + Q3b7.
Q1 = Q(a(bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)*8.
Q3 = Q(b(aa)* + a(bb)* ba(aa)*)(ab(bb)* ba(aa)*)*
これで、式(8)を目的の形式にすることができます。
8.
Q3 = Q(b(aa)* + a(bb)* ba(aa)*)(ab(bb)* ba(aa)*)*
これで、式-(1)、(7)、(8)が得られます。
1.
Q =Λ
+ Q1a + Q3b7.
Q1 = Q(a(bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)*8.
Q3 = Q(b(aa)* + a(bb)* ba(aa)*)(ab(bb)* ba(aa)*)*
状態Qの値を入力します1 とQ3 方程式に-(1):
Q =
Λ
+ Q(a(bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)* a + Q(b(aa)* + a(bb)* ba(aa)*)(ab(bb)* ba(aa)*)* b
次のように書くこともできます:
Q =
Λ
+ Q ((a(bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)* a +(b(aa)* + a(bb)* ba(aa) *)(ab(bb)* ba(aa)*)* b)
次に、この方程式にアーデンの定理を適用すると、最終的なREが得られます。
((a(bb)* + b(aa)* ab(bb)*)(ba(aa)* ab(bb)*)* a +(b(aa)* + a(bb)* ba(aa) *)(ab(bb)* ba(aa)*)* b)*
以下のように1つのステップをさらに簡略化できますか?
((a + b(aa)*ab)(bb)*(ba(aa)*ab(bb)*)*a + (b + a(bb)*ba)(aa)*(ab(bb)*ba(aa)*)*b)*
Eを偶数のaと偶数のbを持つ言語とし、以下は言語Eの正規表現です。
[00 + 11 +(01 + 10)(11 + 00)(01 + 10)]
00 = type1
11 = type2
(01 + 10)(00 + 11)*(01 + 10)= type3
Eの言語の単語を左から右にスキャンして、一度に2文字ずつ読んでいるとします。最初にdouble0(type1)に到達し、次にdouble 1(type2)に到達し、次に別のdouble 0(再びtype 1)に到達します。それから、おそらく私たちは同じではない文字のペアに出くわします。たとえば、次の2文字が10であるとします。これはtype3の部分文字列で始まる必要があります。二重化されていないペア(01または10)で始まり、二重化された文字のセクション(00または11の繰り返しが多い)があり、最後に別の二重化されていないペア(01または10)で終わります。 Wordのこのセクションの1つの特性は、偶数の0と偶数の1があることです。セクションが10で始まっている場合は、01で終わり、両端に2つの0と2つの1があり、間に2文字しかありません。 10で始まり、01で終わる場合も、偶数の0と偶数の1が得られます。 type3のこのセクションの後、別のタイプ3セクションを開始して、別の二重化されていないペアに遭遇するまで、タイプまたはタイプ2のセクションをさらに進めることができます。最初のペアのバランスをとるために、別のダブル化されていないペアが登場することはわかっています。全体的な効果は、Eの言語のすべての単語に偶数の0と偶数の1が含まれていることです。
これは、0と1の偶数を含む偶数-偶数言語のDFAです。
そのREはこれになります
(00 + 11 + (01+10)(01+10) (00 + 11)*)*
ここでは、0と1のnmberでさえあるlemdaを受け入れます
または、0のnmbrが偶数(00)を受け入れ、1がないということは、ここで1のnmberが偶数であることを意味します。または(11)の場合、(0)のnmberが偶数です。 0と1のnmber ..
それがあなたの問題を解決することを願っています