問題タブ [prefix-tree]
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.
c++ - ハフマン接頭辞コードを生成するには?
私は C++ プログラムと私のグループに取り組んでいますが、inOrder トラバーサルを使用してプレフィックス コードを生成する方法についてのロジックを理解できません。PrefixCode ツリーが構築されており、そこからコードを生成したいと考えています。
ロジックに問題があるため、コードを提供する必要があるかどうかわかりません。必要な場合はお知らせください。
ありがとう。
ios - NSArray を検索する効率的な方法は何ですか
配列に NSStrings があります。
検索文字列を渡して、必要なすべての文字列を見つけたいと考えています。たとえば、「ax」を渡すと 3 つの文字列が返され、「axx」を渡すと 2 つの文字列が返されます。
ここでもパフォーマンスが重要です。メソッドは次のようになります。
通常は を使用NSPredicate
しますが、今回はおそらくプレフィックス ツリーまたはバイナリ ツリーを使用する必要があります。実装への提案またはリンク。
c# - 異なるプレフィックスで XML をシリアライズする
2 つの異なる XSD から 2 つのクラスを取得しました。そのうちの 1 つはその子ノードです。ルート クラスには子のプロパティ (xmlelement 配列) があり、子ノードに異なるプレフィックスを付ける必要があります。これは私のコードです:
次に、ルートをシリアル化します。
XML ファイルは正しい形式で作成されましたが、子ルートには名前空間があり、そこには必要ありません。ルート ノードでのみ必要です。
performance - プレフィックス ツリー (トライ) 内の特定のプレフィックスのすべての要素を取得する複雑さはどれくらいですか?
トライで特定のプレフィックスを検索することは O(M) で行われることを知っています。ここで、M はトライに挿入される任意の単語の最大長です。
しかし、特定のプレフィックスで始まるすべての要素を取得する時間の複雑さはどのくらいでしょうか?
私は可能な答えについて考えました:
O(M+n) ここで、n はプレフィックスで始まる単語の数です。アイデア: プレフィックスの検索は O(M) にあります。次に、指定されたプレフィックスで始まるすべての単語を含むサブトリーがあり、それをトラバースするだけです。問題 (おそらく): プレフィックス ツリーに単語より多くのノードがあります。しかし、私がそれらを見る必要がないように、何らかの形の効率的な保存があるのではないでしょうか?
python - Trie ツリーの解析中に単語ストロークをカウントする
ここで説明されているキーボードのオートコンプリートの問題を解決しようとしています。 問題は、いくつかの辞書とオートコンプリートのルールが与えられた場合に、単語に必要なキーストロークの数を計算することです。たとえば、辞書の場合:
次の結果が得られます (詳細については、上記のリンクを参照してください)。
簡単な説明: ユーザーがを入力するh
と、e
で始まるすべての単語は2 番目の文字h
も持つため、オートコンプリートされます。e
ユーザーが を入力するl
と、もう一方l
が塗りつぶされ、 という単語が 2 ストロークになりますhell
。もちろん、hello
もう 1 ストローク必要です。その他の例については、上記のリンクを参照してください。
私のTrie
コードは次のとおりで、正常に動作します ( https://en.wikipedia.org/wiki/Trieから取得)。コードは、Stack
ルートからツリーを解析することです (以下の編集を参照)。
ストローク数を数える方法がわかりませんでした:
そして、ルートからツリーを解析するコードは次のとおりです。
どんなアイデアや建設的なコメントも役に立ちます、ありがとう!
編集
@SergiyKolesnikovによるすばらしい答え。への呼び出しを避けるためにできる小さな変更が 1 つありますendsWith()
。Trie クラスにブール値フィールドを追加しました。
そして、insert() の最後に:
curr.value.endswith('$'):
次に、に置き換えるだけcurr.eow
です。皆さん、ありがとうございました!