理論的なコンピューターサイエンスに関連するトピックには、常に応用方法があります。しかし、教科書や学部課程では、通常、オートマトン理論が重要なトピックである理由と、実際に応用できるかどうかを説明していません。したがって、学部生はオートマトン理論の重要性を理解するのに苦労し、もはや実用的ではないと考えるかもしれません。
オートマトン理論は実際にはまだ有用ですか?
学部のCSカリキュラムの一部であるべきですか?
理論的なコンピューターサイエンスに関連するトピックには、常に応用方法があります。しかし、教科書や学部課程では、通常、オートマトン理論が重要なトピックである理由と、実際に応用できるかどうかを説明していません。したがって、学部生はオートマトン理論の重要性を理解するのに苦労し、もはや実用的ではないと考えるかもしれません。
オートマトン理論は実際にはまだ有用ですか?
学部のCSカリキュラムの一部であるべきですか?
回答:
grep / awk / sedのようなツールを使用したことがありますか?正規表現は、これらのツールの中心を形成します。
正規表現を原則的に使用することで、メールサーバーのような「実用的なプロジェクト」でどれだけのコーディングを回避できるかに驚くでしょう。
あなたがCS専攻であれば、間違いなく(少なくとも小さな)言語用のコンパイラー/インタープリターを作成することになります。このタスクを以前に試したことがあり、動けなくなった場合は、少しの理論(別名文脈自由文法)がどれほど役立つかを理解できます。この理論により、かつて不可能だったタスクが、週末に完了することができるものになりました。(そして、発明者にチューリング賞を受賞しました-google BNF)。
あなたがCS専攻であれば、ある時点で、Android APIの次のバージョンがいかにクールであるかだけでなく、コンピューティングの哲学的基盤について考える必要があります。関連する注意点として、あなたの人生の次の5年に備えて準備するのではなく、次の50年に備えて準備するのが大学の仕事です。オートマトン理論のコースの一つとして。
CSのより実用的な表現の1つは、コンパイラの構築です。1965年、クヌースはLRパーサーの研究を開始しました。すばやく(10年以内に)、LALRパーサーがありました。これは、シフト/削減パーサーを実装できる決定性プッシュダウンオートマトンのサブセットです。
LALR解析の実行可能性と効率性の中心にあるのは、言語の「プレフィックス」が規則的(有限オートマトン)になるという証明(Knuthによる)です。これは、yacc / bisonなどの自動パーサージェネレーターの起源です。
私たちが知っているプログラミング言語は、これらの開発に対するコンパイル効率の多くを負っていると言っても安全です。
別の例を次に示します。TCP/ IPプロトコルの中心は有限状態マシンです。それはどれほど実用的ですか?
真面目なCS学生、特に実践的な学生はすべて、オートマトン理論に注意を払うべきです。これは、コンピューターサイエンスの豊富さの多くの基礎です。
その音が聞こえますか?それは、オートマトン理論の天国で笑う千の素晴らしい定理、アプリケーション、ツールの音です。
言語とオートマトンは、コンピュータサイエンスのあらゆる分野で見られるエレガントで堅牢な概念です。言語は、先史時代のコンピューティングからの乾いた形式主義的なハンドダウンではありません。言語理論の観点では、洗練された不透明なオブジェクトに関する一見複雑な質問を、単語とツリーに関する単純なステートメントに抽出します。形式言語は、代数とトポロジーが古典数学にもたらす基本的かつゲームを変える視点に似たコンピューターサイエンスの役割を果たします。ここに、言語理論によってアプローチされるいくつかの実用的な、かなり複雑な、実用的な問題があります。
上記で示唆された削減は、言語を抽象的な数学的オブジェクトとして扱います。これらのアイデアを実際に適用するには、これらのデータ構造を操作する言語とアルゴリズムを表すデータ構造が必要です。
オートマトンを入力します。オートマトンを使用すると、言語などの抽象的な数学オブジェクトに関する質問を、ラベル付きグラフに関する具体的でアルゴリズム的な質問に減らすことができます。言語とオートマトン理論は、非常に多くの実用的なアプリケーションに加えて、非常に重要な知的サービスを提供します。均一で整理された概念空間で、郵便番号の書式設定からモナド2次論理の決定手順に至るまでの問題を考えることができます。なんてすごい!
論理と決定手順については何も言っていません。(はい、実用的なアプリケーションがあります。)信頼できる概要については、Kavehの回答を参照してください。
他の回答で説明したように、オートマトン理論は、私たちがよく理解している単純な計算モデルとして概念的に重要であり、正規表現とオートマトンには多くの実際のアプリケーションがあります。
これは、オートマトン理論に戻って現代の概念を理解する現代の研究の小さな例です。この論文では、研究者は、通常の言語にはすべてプロパティテスターがあることを証明しています 。
それは単なるバニラオートマトンではありません。何ができるか、さらに重要なことはいくつかのクエリ言語で表現できないものを推論するのに役立つ(計算)モデルの基本(状態、イプシロン遷移など)について学習しています。いくつかの興味深い結果が含まれます:
(そしてもちろん私は他の多くのクラスをスキップしています)
基本的に、これは非常に一般的なモデルです。クラスは、おそらくオートマトン、言語、ロジック間のリンクを強調します。
これを具体的な「世俗的な」ツールに関連付けることを検討している場合、Abiteboul&alによるFoundations of Databasesのいくつかの部分(AB?)を図書館でゆっくり読んで、これをクラスの資料に戻そうとします。もちろん、それはオートマトンクラスのアプリケーションを探すための(多くの)方法の1つに過ぎず、最も明白な方法ではないと思いますが、それがまさに興味深い演習である理由です。
さまざまな答えですでに指摘したように、UGコースのオートマタ理論は、より高度な(そして実用的な)トピックを紹介し、見落とされた接続を指摘するための基本的な概念フレームワークを提供します。たとえば、バイナリ決定図(最小化されたDFA。DFAを教えた後、BDDベースのパズルの解法をよく教えます)。BioPerlおよびBioPythonを含むスクリプティング(および実際のスクリプト正規表現で意図しない一致が隠される可能性のある素晴らしい設定)、フォーマルデバッグ(否定されたFA、交差などの状態プロパティ)、さらにはVCRまたはホーム侵入者アラームプログラミング(不完全な例を通して教えられた不十分に指定されたオートマトンの毎日のストレス状況;おそらくHarelのプレイイン/プレイアウトシナリオベースのユーザーインターフェイスの合成を使用して形式化された)。また、この設定を使用してPythonを教える」
ゲームプログラミングのAI側では、有限状態マシン(またはそれらの少なくともいくつかの単純な一般化/拡張)がよく使用されます。彼らは、キャラクターの行動をカプセル化するための優れたモデルを提供することが判明しました。たとえば、敵は、明確に定義されたトランジションを持つ「パトロール」、「検索」、「アプローチ」、「攻撃」、「防御」、「退却」、「死」などを表す状態を持つことができます。これには、通常の言語などのようなオートマトンの正式な側面は含まれませんが、オートマトンの概念は非常に重要な概念です。
業界で使用されているモデル検査のオートマトン理論に関連したかなりの研究がありました。チェックフィールド研究所でモシェ・バーディの最近の講義を、特にオートマトン理論はまだ重要かつ有用である理由の味のための第3回講座「ロジック、オートマトン、ゲーム、およびアルゴリズム」。
抽象:
Buechi、Elgot、Rabin、およびTrakhtenbrotによって1950年代および1960年代に導入された、決定手順に対するオートマトン理論的アプローチは、決定手順に対する最も基本的なアプローチの1つです。最近、このアプローチは、ハードウェアおよびソフトウェアシステムの正式な検証における産業用アプリケーションを発見しました。論理から実用的なアルゴリズムへの道は、オートマトンだけでなく、1970年代後半にChandra、Kozen、Stockmeyerによってアルゴリズムの側面が研究されたゲームも経由します。この概要講演では、オートマトンとゲームを介したロジックからアルゴリズムへのパスについて説明します。
「実用的」および「アプリケーション」という言葉の意味を考慮する必要があります。一部の学生にとって、実用的とは、試験に合格するのに役立つものです。他の人のために、仕事で出てくるもの。どちらの場合も、オートマタ理論は非常に実用的です。
他の人が指摘しているように、例えばコンパイラを勉強するときは、文法を使用します。しかしそれ以上:さまざまな状態とそれらの間の遷移のルールを持っているという概念全体を理解することで、たとえばコードがあちこちで冗長であり、それを改善すると、より良いプログラマになることができますされて適用する同じコードの中で概念的なアイデア DFAの最小化の後ろに。
「アプリケーション」についても同様です。その言葉であなたは何を理解していますか?「地に足のついたエンジニア」であっても、プログラミングのコード、フロー図、さらにはスタックのシンプルでありながら素晴らしいコンセプトなど、現実世界のプロジェクトでオートマタ理論のアイデアに似たアイデアを目にし、使用します。私のような理論オタクについては、論理、代数、有限モデル理論など、他の分野でのオートマタ理論の適用を検討します。おそらく、スーパーマーケットで買い物をしているときにポンピングレンマを使用する必要はおそらくないでしょうが、そのような定理は、特定のクラスの言語の構造を理解するのに役立ちました。それらが対応している論理や代数構造は言うまでもありません そして、それは実用性の尺度よりも大切なものです。
さまざまなコンテキストで有限状態マシンとして記述されるか、確率的バリアントである隠れマルコフモデルを使用して記述されることが多い有限オートマトンは、パターン認識およびパターン構造の定量化に適用できます。例えば、与えられた確率分布に応じて文字列を生成したり、何らかの分布から文字列のサンプル(または時系列)の統計的特性を一致させたりする最小の確率的有限オートマトンです。
たとえば、隠された状態を盲目的に再構築するためのアルゴリズムであるCSSRを参照してください。隠れマルコフモデルよりも効率的で柔軟です。
産業にどのように関係するかという点に関しては、素晴らしい答えを出した人もいます。重要なのはその科学的価値であり、Automata理論は、多くの場合、学部生の研究における計算理論の上位層を最初に理解するための入り口です。オートマトン理論には、理論的コンピューターサイエンスのあらゆるところに、特にコンパイラーなどのアプリケーションについて話したい場合に現れる大規模な定理があります。その科学的価値(時代遅れではありません。どのようになり得るのでしょうか?それはこの分野の核となる理論です)。計算に興味のある科学者にとって実用的です。計算の性質を理解している、または理解したい人に役立つ知識であるため、実用的です。あなたがそれで使用を見つけることができない場合、私はそれがプログラミングではないので、それを研究するか、CSを研究する意図さえ疑問に思います(それは '