有限状態機械の実用化


8

DFA、NFA、ムーア、ミーリーマシンなどの有限状態マシンの実用的なアプリケーションを探しています...

Linuxカーネルの例を誰かが指摘すると、役に立ちます。KMPアルゴリズムのような文字列照合でDFAが使用されていることを知っています。

NFA、ムーア、ミーリーのマシンの重要性は何ですか?


Moore / Mealyマシンの電気工学もチェックすることをお勧めします
Ran G.

1
私は知識をひけらかすことを嫌い(大丈夫、私は知識をひけらかすことが大好き)が、すべて本物のコンピュータがあり、正確に有限状態機械。プッシュダウンオートマトン、線形有界オートマトン、およびチューリングマシンは物理的に不可能です(実際には、もちろん、どこかに空間に浮かんでいる実際のチューリングマシンがないことは証明できません)。実際には、任意の正規言語を認識できるコンピュータを作成することさえできません。
Patrick87

Theoretical Computer Scienceこれこの質問についても参照してください。
ラファエル

回答:


8

お気に入りのエディター/ツールで検索(特に「パターン検索」)を実行するたびに、パターンは何らかの形式の有限状態マシンに変換され、マッチングが行われます。

コンパイラ/インタプリタの語彙分析部分(はい、シェルも)は、言語によって認識されるキーワードやその他のトークンに一致する有限オートマトンです。

任意の自動販売機は有限のオートマトンであり、異なる金種の硬貨を受け取り、正しい金額が入力されたときに認識します(OK、今日の自動販売機はおそらく追加を実行する内部に小さなCPUを備えていますが、最終結果は同じです)。


7

(の概念)DFA / NFAには、コンパイラーの分野とパーサーの構築にいくつかのアプリケーションがあります。それらは、正規表現に従って文字列を識別するためにも使用されます(つまり、Webまたはデータベースで「パターン」を検索します)。

ムーア/ミーリーマシンは、クロックの任意の目盛りでも出力を行うDFAです。それらはたくさんのアプリケーションを持っています。実際、CPU、コンピュータ、携帯電話、デジタル時計、そして洗濯機でさえ、それを制御するある種の有限状態機械を持っています。

多分私はそれを明確にする必要があります:「コンピュータ」は基本的に有限状態機械です。


4

1つの主要なアプリケーションは、システムのモデリングです。基本的に、単純なソフトウェアシステムは有限状態機械としてモデル化できます。(単純なソフトウェアとは、正規表現を使用して表現できる言語を意味します)。そのような「単純な」システムは多数あり、自動販売機が例です(vznが示すとおり)。

2つの有限状態機械の共通部分を見つけることにより、たとえばメッセージを交換する並行システムを非常に簡単な方法で設計できます。例として、信号機は、同時に動作する複数のサブシステム(異なる信号機)で構成されるシステムです。

これらの例を見てくださいhttp : //www.site.uottawa.ca/~bochmann/SEG-2106-2506/Notes/LTSA-examples/examples/

これらの例を実行するには、LTSAアナライザーが必要です。http://www.doc.ic.ac.uk/ltsa/


3

FSMと関連理論に関する非常に優れたオンラインリファレンス、75p、および多くの図 中間理論セクションの後に多くのアプリケーションがあり、サンプルアプリケーション(p485など)を使用した多くの演習でも:

ch12。ケラーによる有限状態機械、ハーベイマッドカレッジ、CS60教科書/ CS、抽象化入門

アプリケーションは非常に多様です。例えば本から:

  • 番号分類
  • タイマーで見る
  • 自動販売機
  • 信号機
  • バーコードスキャナ
  • ガスポンプ

例12.4 EE構成

  • 論理要素
  • クロック量子化
  • コンビネーションロック
  • ビーチサンダル
  • 加算器
  • レジスタ
  • バス/多重化

FSMは音声検出でも使用され、音素を検出します。これは、この優れたオンラインライブラリの主要な適用点の1つであり、manページとドキュメントに詳細が記載されています。AT&TオンラインFSMライブラリです。「FSMライブラリと音声処理アプリケーション」のセクションを参照してください(これには、より抽象的/理論的な「アプリケーション」もいくつかリストされています)

等!


1

デバイスドライバーを作成するときは、ステートマシンを使用します。大きなステートマシンは扱いにくくなることに注意してください。この一連のマクロ(https://www.codeproject.com/Articles/37037/Macros-to-simulate-multi-tasking-blocking-code-at)を使用することを検討してください ...こうすることで、トランジションがシンプルになり、状態図も必要です。これは、マクロを使用すると、ステートマシンコードを構造化コードのように記述できるためです。これらのマクロを使用して、Nexus 7000用のシスコのトランシーバーライブラリを作成しました。


0

実際には、オブジェクトのユーザーが呼び出すことができるアクションを表す非常に粗い状態機械を表す整数状態変数(通常は「状態」と呼ばれます)として明示的に表示されます。通常は、{uninitialized、initialized、...、stopped}のような値を持つ列挙です。ステートマシンは、多くの場合、データの解析時に明示的であり、ループの先頭で次の文字が取得されるwhileループのswitchステートメントによって示されます。特に、構文解析に通常の文法がある場合、他の機能がない正確なFSMがよく使用されます。末尾呼び出しをサポートする言語を使用している場合、FSMは通常、相互再帰によって示されます(これにより、コードを非常に明確な疑似コード仕様のように読み取ることができます)。FSMの本当に便利な機能は、実行スタック全体ではなく、現在の状態のみを覚えておけばよいので、同時に操作できることです。(つまり、何百万ものステートマシンインスタンス間でのコンテキストの切り替え)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.