2017-09-17 17 views
0

rのrとDFAが定義されたときのr *のDFAを見つける方法をこの例でお伝えしたいと思います。どのように考えている?私は教科書を読みましたが、私ははっきり理解できません。ありがとうございました。rのrとDFAが定義されたときのr *のDFAの発見

答えて

0

r *は、rからの0,1,2,3,4、...文字列の連結であるすべての文字列を含む言語です。したがって、r *の明白なFAは、r 0,1,2,3,4、...時間のDFAを実行し、これらのいずれかの実行後に受け入れることができるものです。任意の受け入れ状態から開始状態へのラムダ/空の遷移は、1回以上の実行を達成する。結果として生じるオートマトンはもはや決定論的ではない。標準的な方法を使用してそれを決定することができます。この構造は、空の文字列をオートマトンの言語に追加しません。すでにrに入っている場合、これは必要ではありません。それ以外の場合は、新しい開始状態など、r *のオートマトンに空の文字列を受け入れる方法を追加する必要があります。

空のトランジションを削除した経験があるため、簡単な場合にはより直接的にDFAを構築することもできます。

+1

各入力状態から開始状態にイプシロンを追加するだけでは、必ず入力言語の星を受け入れるNFAは作成されません。 (私は通常、これが私の理論コースで学生に練習として失敗する理由の例を見つけるという質問を出します。) – templatetypedef

+0

ありがとう、@templatetypedef、私はここで少し急いで、それを覚えていませんでした。私は答えが今より良いことを願っています。 –

+0

ここにはまだ問題があります。ここでは動作する構造があります:受け入れている新しい開始状態を追加してください。イプシロン遷移を古い開始状態に追加し、各古い受信状態から新しい開始状態にイプシロンを追加します。 – templatetypedef