タグ付けされた質問 「strings」

シンボルのシーケンス、そのセットとそのプロパティ、および使用法に関する質問。

2
範囲内の文字列内の異なる部分文字列の数
文字列の長さが、LCP配列を使用すると、個別の部分文字列の数を線形時間で見つけることができます。文字列全体で一意の部分文字列の数を求める代わりに、インデックスを含むクエリ、が、文字列指定されたクエリ範囲内の異なる部分文字列の数を求めます。。SSSnnnSSSqqq(i,j)(i,j)(i,j)0≤i≤j&lt;n0≤i≤j&lt;n0 \le i \le j < nS[i..j]S[i..j]S[i..j] 私のアプローチは、LCP配列の線形時間構築を各クエリに適用することです。複雑さを与えます。クエリの数はオーダーに増加する可能性があるため、すべてのクエリに応答するとます。O(|q|n)O(|q|n)O(|q|n)nnnO(n2)O(n2)O(n^2) すべてのクエリの線形時間よりも、それを行うことができますか? 一般に、サフィックス配列、サフィックスツリー、lcp配列がすでにある文字列の1つのプロセスサブ文字列がそれらの構造に関連しなくなった場合、もう一度最初から構築する必要がありますか?

1
ガリルの法則はボイヤー・ムーアアルゴリズムでどのように機能しますか?
ガリルのルールを使用したボイヤー・ムーアのテキスト検索アルゴリズムがどのように機能するかを知りたいのですが。検索を試みましたが、このWikipediaページなど、見つけた情報を理解できませんでした。そして、なぜこのルールで線形時間の複雑さを実現するのでしょうか?


1
文字列がコレクション内の部分文字列と一致するかどうかを効率的に確認するにはどうすればよいですか
部分文字列のコレクションがあります "this" "is" "a" "antelope" 与えられた文字列を見て、「この文字列に与えられた部分文字列はありますか」という質問に答える必要があります。 だから私の入力文字列は "issue" 「is」は「issue」のサブストリングであるため、どちらが一致します これを初めて試したところ、部分文字列のコレクションを誤ってトライに変えました。「入力文字列は与えられたコレクションの部分文字列である」と逆に答えたので、それは私をどこにも速くさせませんでした。 この質問に効率的に答えるためにコレクションを変換できるアルゴリズムまたはデータ構造はありますか?つまり、単純なブルートフォースの「すべての部分文字列に対して入力をチェックする」メソッドを実行できましたが、もっと良い方法があるようです。 私の与えられた例では、「a」がカモシカがするすべてのケースをカバーするので、「カモシカ」が決してチェックされないことを期待します。「is」は「this」を削除することを期待しているかもしれません。したがって、長い部分文字列を短い文字列で削除すると、パフォーマンスが向上するようです。 私はとりとめています...私が調べなければならないことはありますか?

2
サブストリングマッチングのオートマトン
与えられたいくつかのアルファベットを超える文字列として、含まれている任意の文字列を受け入れ、対応する決定性有限オートマトン(DFA)を計算するために最もよく知られたアルゴリズム何である?ssssss 私は主に最も短い時間の複雑さに関心を持っているので、O表記で最もよく知られている複雑さを教えてください。

2
時間内にサフィックス配列を構築するアルゴリズム
最近、suffix配列を使用していて、理解しやすいsuffix配列を作成するための効率的なアルゴリズムを見つけることができません。多くのサイトでアルゴリズムがあることを見てきましたが、多くの重要な詳細が省略されているため、理解できません。Top Coderに例があります。O(nlog2n)O(nlog2⁡n)O(n \log^2 n) 誰かが私に理解しやすいサフィックス配列構築のための効率的なアルゴリズムを紹介してくれませんか?

2
文字列のセットに近い文字列はいくつありますか?
この質問は、高速なスペルチェッカーを構築するための効率的なデータ構造によって促されました。 2つの文字列が与えられた u,vu,vu,v、私たちは彼らがそうだと言います kkk-それらのダメラウ–レヴェンシュタイン距離 ¹が小さい場合、つまりLD(u,v)≥kLD⁡(u,v)≥k\operatorname{LD}(u,v) \geq k 固定の k∈Nk∈Nk \in \mathbb{N}。非公式に、LD(u,v)LD⁡(u,v)\operatorname{LD}(u,v) 変換に必要な削除、挿入、置換、および(隣接)スワップ操作の最小数です uuu に vvv。それはで計算することができますΘ(|u|⋅|v|)Θ(|u|⋅|v|)\Theta(|u|\cdot|v|)動的プログラミングによる。ご了承くださいLDLD\operatorname{LD}はメトリックであり、特に対称的です。 関心のある問題は次のとおりです。 セットを考える SSS の nnn ひも ΣΣ\Sigma 長さが最大 mmm、のカーディナリティは何ですか Sk:={w∈Σ∗∣∃v∈S. LD(v,w)≤k}Sk:={w∈Σ∗∣∃v∈S. LD⁡(v,w)≤k}\qquad \displaystyle S_k := \{ w \in \Sigma^* \mid \exists v \in S.\ \operatorname{LD}(v,w) \leq k \}? 同じ長さの2つの弦でも数が異なるため kkk-closestrings²一般的な式/アプローチは見つけるのが難しい(不可能?)場合があります。したがって、所定の数ごとに明示的に数を計算する必要があるかもしれませんSSS、主な質問に私たちを導きます: セットのカーディナリティを見つけることの(時間)複雑さは何ですか {w}k{w}k\{w\}_k (任意) w∈Σ∗w∈Σ∗w \in …

1
KMPプレフィックス関数と文字列照合オートマトンの間の接続
LET文字列照合オートマトンパターンのための、ありますAP=(Q,Σ,δ,0,{m})AP=(Q,Σ,δ,0,{m})A_P = (Q,\Sigma,\delta,0,\{m\})P∈ΣmP∈ΣmP \in \Sigma^m Q={0,1,…,m}Q={0,1,…,m}Q = \{0,1,\dots,m\} δ(q,a)=σP(P0,q⋅a)δ(q,a)=σP(P0,q⋅a)\delta(q,a) = \sigma_P(P_{0,q}\cdot a) for all and a \ in \ Sigmaq∈Qq∈Qq\in Qa∈Σa∈Σa\in \Sigma σP(w)σP(w)\sigma_P(w)の最長プレフィックスの長さPPPの接尾辞であるwwwであり、 σP(w)=max{k∈N0∣P0,k⊐w}σP(w)=max{k∈N0∣P0,k⊐w}\qquad \displaystyle \sigma_P(w) = \max \left\{k \in \mathbb{N}_0 \mid P_{0,k} \sqsupset w \right\}。 さて、聞かせて\パイプレフィックス機能からクヌース-モリス-プラット法であるが、ππ\pi πP(q)=max{k∣k&lt;q∧P0,k⊐P0,q}πP(q)=最高{k|k&lt;q∧P0、k⊐P0、q}\qquad \displaystyle \pi_P(q)= \max \{k \mid k < q \wedge P_{0,k} \sqsupset P_{0,q}\}。 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.