web-dev-qa-db-ja.com

有限オートマトンの正規表現が必要:偶数の1と偶数の0

私の問題はあなたとは違うように聞こえるかもしれません。

私は初心者で、有限オートマトンを学んでいます。以下の特定のマシンの有限オートマトンの正規表現を見つけるためにインターネットを調べています。

enter image description here

上記のマシンの「有限オートマトンの正規表現」を書くのを手伝ってくれる人はいますか?

どんな助けでもありがたいです

6
jyoti

アーデンの定理を使用してDFAの正規表現を作成する方法

言語記号の代わりに01Σ = {a, b}とすると、次は新しいDFAです。

DFA
通知の開始状態はQです

あなたは与えていませんが、私の答えでは初期状態はQです、最終状態もQ

DFAで受け入れられる言語は、記号abで構成されるすべての文字列のセットです。ここで、記号abの数は偶数です(Λを含む) )。

いくつかの文字列の例は{Λ, 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

BCΣ上の2つの正規表現とします。 CΛが含まれていない場合、方程式A = B + ACには、一意の(1つだけの)解A = BC *があります。

[解決策]:

ステップ-1:DFAの各状態に対応する1つの方程式である初期方程式を記述します。この方程式は、単一のステップで状態に到達する方法を意味します

したがって、DFAによると、次の4つの方程式が可能です。

  1. Q = Λ + Q1a + Q3b
  2. Q1 = Qa + Q2b
  3. Q2 = Q1b + Q3a
  4. 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 + Q3b
7. 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 + Q3b
7. 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'および偶数の 'b'の正規表現:

((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)*
22
Grijesh Chauhan

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
Afzal Ashraf

これは、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 ..

それがあなたの問題を解決することを願っています

0
sabeen kanwal