問題タブ [finite-automata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
9 に答える
4231 参照

c - gotoを使用するかどうか?

この質問は決まり文句に聞こえるかもしれませんが、私はここにいる状況にあります。

Cで特定の文字列を解析するために有限状態オートマトンを実装しようとしています。コードを書き始めたとき、ラベルを使用してさまざまな状態をマークし、gotoを使用して1つの状態から場合によっては別の。

この場合、標準のブレーク変数とフラグ変数を使用するのは非常に面倒で、状態を追跡するのは困難です。

どのアプローチが優れていますか?インターンシップをしているので、何よりも上司に悪い印象を与えるのではないかと心配しています。

0 投票する
5 に答える
10125 参照

java - ベクトルとJavaのセット

あなたはどちらを好みますか?

Java で有限オートマトンを作成したい。vector または set を使用する方が効率的ですか?

0 投票する
2 に答える
316 参照

regex - 正規表現: `(ab+ba)*` で受け入れられない文字列

(ab+ba)*0 個以上の "a" の後に 0 個以上の "b" が続くすべて、および 0 個以上の "b" の後に 0 個以上の "a" が続くすべてを受け入れます。この RE の拒否状態は何ですか?

で受け入れられない文字列について考えてみて(ab+ba)*ください。

0 投票する
3 に答える
181 参照

.net - 無制限の後読みの理論的な意味は何ですか?

ほとんどの言語では、固定長または有限長の後読みが許可されています。注目すべき例外の 1 つは .NET で、* 演算子を使用できます。

ただし、.NET 正規表現は、通常の言語ではない名前付きキャプチャを使用して、バランスの取れた括弧を既に認識できます。後読みで*を使用した正規表現はまだ定期的ですか? * 以外の部分式に対する拡張回答 (たとえば、追加のルックアラウンド!) も歓迎します。

tl;dr: 後読みで * を使用しても、正規表現は正常に機能しますか?

0 投票する
2 に答える
1958 参照

regex - 決定化なしの NFA 最小化

正規言語の NFA から最小限の DFA に移行する方法はよく知られています。ただし、DFA には指数関数的に多くの状態が含まれる場合があります。

私が必要としているのは、NFA を減らす方法であり、NFA を再び与えますが、状態の数は少なくなります。結果が決定論的である必要はありませんが、認識された言語を維持しながらできるだけ小さくしたいと思います (おそらく完全に最適というわけではありませんが、小さいほど良いです)。

この問題に最適なアルゴリズムは何ですか? または、おそらく「最高」ではなく、少なくとも「非常に効率的に実装するのが最も簡単」ですか?それとも、自分で適切な情報源を見つけることができるように、問題によく知られている名前がありますか?

0 投票する
1 に答える
2483 参照

javascript - (有限状態機械) - javascript での XML スキーマ検証ツールの実装

私は、javascript で XML バリデーター (XSD) を開発するプロジェクトに 1 か月ほど取り組んでいます。私は本当に近づいてきましたが、問題に遭遇し続けています。

私がうまく行っている唯一のことは、DOM に保存するスキーマ構造を FSA に正規化することです。FSA に対して xml 構造を検証するためにいくつかの方法を試しましたが、毎回不足しています。

バリデーターは、クライアント側の WYSIWYG XML エディターを実行するために使用されているため、次の要件を満たす必要があります。

  • 効率的である必要があります (複雑なモデルでも要素の子ノード パターンを検証するのに 15 ミリ秒未満)
  • さまざまな時点でどの要素をドキュメントに挿入/削除できるかを判断し、ドキュメントの有効性を維持するためにクエリを実行できる Post Validation Schema Infoset (PSVI) を公開する必要があります。
  • xml 子ノード構造を検証できなければならず、無効な場合はどのコンテンツが予期されていたか、またはどのコンテンツが予期されていなかったかを返す必要があります。

-- 詳細情報 次の例を考えてみましょう --
最初に、名前空間に関して xs:group や xs:import などを正規化する一般的な FSA 表現にスキーマ構造を変換します。たとえば、次のことを考慮してください。

同様の一般化された構造に変換されます。

XQuery と XSLT を使用して、これをすべてサーバー側で行います。

バリデーターを作成する最初の試みは、javascript の再帰関数を使用することでした。途中で、存在する可能性のあるコンテンツを見つけた場合は、それをグローバル PSVI シグナルに追加して、階層内の特定のポイントに追加できるようにします。

私の 2 回目の試行は反復的で、はるかに高速でしたが、どちらも同じ問題に悩まされていました。

どちらも単純なコンテンツ モデルを正しく検証できましたが、モデルがより複雑になり、非常にネストされるとすぐに失敗しました。

私は完全に間違った方向からこの問題に取り組んでいると考えています。私が読んだことによると、ほとんどの FSA は状態をスタックにプッシュすることによって処理されますが、私の状況でこれを行う方法がわかりません。

次の質問についてアドバイスが必要です。

  1. ステート マシンは適切なソリューションですか?
  2. ステート マシンを使用している場合、スキーマ構造を DFA に変換する最適な方法は何ですか? トンプソンアルゴリズム?これを機能させるには、DFA を最適化する必要がありますか。
  3. これをすべてJavaScriptで実装する最良の方法(または最も効率的な方法)は何ですか(最適化に注意してください。前処理はサーバーで実行できます)

ありがとう、

ケーシー

追加の編集:

ここでチュートリアルを見てきました: http://www.codeproject.com/KB/recipes/OwnRegExpressionsParser.aspxは正規表現に焦点を当てています。私が必要としているものと非常に似ているようですが、正規表現用のパーサーの構築に焦点を当てています。これは、いくつかの興味深い考えをもたらします。

私は、xml スキーマがいくつかの演算子に分解されると考えています。

シーケンス -> 連結
の選択 -> ユニオン
minOccurs/maxOccurs - おそらく Kleene Closure よりも多くのものが必要ですが、この演算子を表現する最善の方法は完全にはわかりません。

0 投票する
3 に答える
196 参照

regex - 非常に単純な正規表現の説明 (10)*

こんなに簡単な質問をするのは気の毒ですが、一生これを理解することはできません. いくつかの言語に基づいて NFA を構築する必要がありますが、理解できないのはこれだけです。

私は FSM に関して何の助けも求めていませんが、言語が何を表しているかについての説明だけを求めていることに注意してください。他の言語のほとんどは、より理解しやすい方法で提示されました。

私はそれが単なる正規表現だと思っています.regexチートシートを熟読した後、私の唯一の推測は、それがグループに100回以上一致することですが、すべてが一致するため、明らかに正しくないようです.

どんな助けでも大歓迎です。

0 投票する
2 に答える
5582 参照

finite-automata - 行列式有限オートマトン (JFLAP)

DFA に関する質問 (Determinant Finite Automata) があります。オートマトンの構築には JFLAP を使用しています。私の命を救うためにこの質問を理解することはできません!ここにあります

「偶数のゼロと奇数の 1 を持つすべての文字列の言語を認識する DFA。」

したがって、アルファベットは {0,1} で、0,1 のみを使用します。そのため、偶数のゼロと奇数の 1 を認識するオートマトンを構築する必要があります。

0 投票する
2 に答える
1557 参照

math - 2つの決定性有限オートマトン(決定性有限状態マシン)からの排他的論理和の作成

2つのDFA(決定性有限オートマトンまたは決定性有限状態マシン-これ以降はDFAと呼びます)セットで定義DFA 1:L1 = {Q1、E、D1、s1、F} DFA 2:L2 = {Q2、 E、D2、s2、F}

Qは状態のリストです。例1、2、3、4またはa、b、c、d

Eは言語例です。0、1

DはトランジションセットExです。{(a、0、b)}状態aは0でbになります

sは開始状態です

Fは最終状態です

どのように、排他的に、または2つのDFAL1とL2を使用しますか

0 投票する
6 に答える
1867 参照

.net - .NETのレーベンシュタインDFA

こんにちは、

.NET(または簡単に翻訳可能)でのLevenshtein DFA(決定性有限オートマトン)の「すぐに使える」実装を知っている人はいますか?私は160000を超える異なる単語を含む非常に大きな辞書を持っています。そして、最初の単語wが与えられた場合、レーベンシュタイン距離で最大2つのwのすべての既知の単語を効率的な方法で見つけたいと思います。

もちろん、特定の単語の1つを編集距離ですべての可能な編集を計算し、それをこれらの各編集に再度適用する関数を使用すると、問題が解決します(非常に簡単な方法で)。問題は効率です---7文字の単語を考えると、これは完了するのにすでに1秒以上かかる可能性があり、可能であれば、レーベンシュタインDFAの場合のように、O(| w |)ステップ。

編集:私は少し勉強することで問題への独自のアプローチを構築できることを知っていますが、現時点ではシュルツとミホフの60ページの長さの記事を読む余裕はありません。

どうもありがとうございます。