問題タブ [string-algorithm]

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 投票する
7 に答える
3383 参照

string - 文字列の定数時間ハッシュ?

SO に関する別の質問では、一部の言語で、文字列をハッシュしてテーブル内で高速に検索できるようにする機能が取り上げられました。この 2 つの例は、.NET の Dictionary<> と Python の {} ストレージ構造です。他の言語は確かにそのようなメカニズムをサポートしています。C++ にはそのマップがあり、LISP にも同等のマップがあり、他のほとんどの最新の言語と同様です。

文字列のハッシュ アルゴリズムは一定時間内に実行できるという質問への回答で、プログラミングで 25 年の経験を持つ 1 人の SO メンバーが、あらゆるものを一定時間内にハッシュできると主張することで争われました。私の個人的な主張は、特定のアプリケーションが文字列の長さに境界を設定しない限り、これは正しくないということです。これは、定数 K によって文字列の最大長が決まることを意味します。

私は演算にハッシュ関数を使用する Rabin-Karp アルゴリズムに精通していますが、このアルゴリズムは使用する特定のハッシュ関数を指示しません。著者が提案したのは O(m) で、m は長さです。ハッシュされた文字列。

いくつかのハッシュ アルゴリズムを表示するこのページ ( http://www.cse.yorku.ca/~oz/hash.html )などの他のページをいくつか見ますが、それぞれが文字列の全長にわたって繰り返されるようです。その値に到達します。

この件に関する私の比較的限られた読書から、文字列型のほとんどの連想配列は、実際には、フードの下で何らかのツリーで動作するハッシュ関数を使用して作成されているようです。これは、キー/値ペアの値要素の場所を指す AVL ツリーまたは赤/黒ツリーの場合があります。

このツリー構造でも、n をツリーの要素数として theta(log(n)) のオーダーを維持するには、一定時間のハッシュ アルゴリズムが必要です。それ以外の場合は、文字列を反復処理するという追加のペナルティがあります。多くの文字列を含むインデックスの場合、theta(m) は theta(log(n)) によって隠されますが、検索対象のテキストが非常に大きくなるようなドメインにいる場合は無視できません。

接尾辞ツリー/配列と Aho-Corasick を使用すると、検索を theta(m) まで下げてメモリをより多く消費できることを認識していますが、任意の長さの文字列に対して一定時間のハッシュ メソッドが存在するかどうかを具体的に尋ねています。他の SO メンバーによって主張されました。

ありがとう。

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

algorithm - Books on string algorithms

There have been numerous posts on string algorithms:

However, no general literature was mentioned.

Could anyone recommend a book(s) that would thoroughly explore various string algorithms? The topic which is of special interest is approximate string matching [things like google-offered corrected search string variants :) ].

Thanks a lot for advice.

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

algorithm - 最長回文接頭辞

O(n)で文字列の最長の回文プレフィックスを見つける方法は?

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

algorithm - 文字の長いストリームで単語を検索します。自動トークン化

長い文字の流れの中から正しい単語をどのように見つけますか?

入力:

Googleの出力:

(これは、出力を生成した時間を考慮すると十分に近いです)

グーグルはどうやってそれをしていると思いますか?どのように精度を上げますか?

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

php - PHP での複数キーワード (数百から数千) 検索 (文字列検索アルゴリズム)

PHP プロジェクトでこの問題を解決する必要があります。この問題では、一部のキーワード (数百から数千まで、長さはさまざま) を 100 ~ 300 文字の長さ、場合によっては 30 ~ 50 文字の短い文字列で検索する必要があります。検索文字列の新しいインスタンスを再利用するために、キーワードを前処理できます。私はPHPが初めてで、PHPライブラリでこれを行う方法が見つかりませんでした。少し検索したところ、Aho Corasick アルゴリズムでいくつかの適切な候補が見つかりました。次に、Sun Wu と Udi Manber によるこの改善は、agrep としても知られている (または agrep の一部である) ようです: http://webglimpse. net/pubs/TR94-17.pdf

Rabin Karp や Suffix Trees などもありますが、最初は固定長のキーワード用で、後者は非常に汎用的でかなり多くの作業が必要になるため、あまり適していないように見えました。

Agrep/Sun Wu-Manber を PHP で自分で実装することがこの問題を解決する良い方法であるかどうか、誰か教えてもらえますか? 別のフィードバックはありませんか?

編集: 以下のコメントで述べたように、何百もの異なる検索キーワードがあるため、正規表現は役に立ちません。したがって、その応答は役に立ちません。

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

c# - 検索を最適化するために文字列を保存する方法

VARCHAR型の列を含むテーブルがあります。ユーザー入力クエリに従って列内の文字列を検索したい。近似検索を実装したい。そして私のテーブルにはレコードのラックが含まれています。検索を実装できると私が考えている方法はいくつかあります。

  1. すべてのレコードをC#でロードし、検索アルゴリズムを適用します。(ただし、メモリを大量に消費します。)

  2. レコードを個別に、または事前定義されたバッチサイズでフェッチし、検索アルゴリズムを適用します。(ただし、データベース接続が迅速に確立されるため、パフォーマンスが低下する可能性があります。)

この機能を実装するための他のメカニズムや、データをより速く検索できるようにデータを保存するためのテクニックがあると確信しています。

これを実装するために、誰かが私にもっと良いアイデアを与えることができますか?

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

boost - string_algo/ranges を使用して部分文字列の c-string の配列を検索する

部分文字列の c-string の配列を検索する必要があります。

答えが返ってくると思ったものを作成しましたが、構文的に正しいだけで意味的に間違っていますが、どこが間違っているのかわかりません。

これにはサブクエスチョンもあります。私が試した例を示した後、質問します。

ir.first == ir.last

イテレータの結果は、これを正しく記述していないことを示しています。

最初のパラメーターが実際にconst char [8]悪影響を及ぼしているかどうかはわかりません。

私の主な質問は、それを修正するために何をすべきか、そして補足的な質問は、constCharRange または実際にそのような typedef から find_first が必要とする型をどのように抽出できるかです。

編集:

end を間違って使用していることがわかります。その後、わずかに異なる例を機能させることができましたが、実際に使用する必要がある定義と互換性がありません (コードに追加することはできますが、既存の定義を変更することはできません)。

別のテスト

これは私が得ることができる最も近いものですが、戻り値の型の仕様を正しく取得できないようです

0 投票する
4 に答える
2285 参照

php - Aho-Corasick PHP 実装の高速化

PHPでAho–Corasickの実用的な実装はありますか? ウィキペディアの記事で言及されているPHP での Aho-Corasick 文字列マッチングが 1 つあります。

しかし、私はそれを使用するのに苦労しています。赤ちゃんの例では機能しますが、数千のキーワードを読み込もうとすると、スクリプトは読み込みの 30 秒の制限を超えます。

他のスクリプト言語については、Perl 用のhttp://metacpan.org/pod/Text::ScanやPython 用のhttp://pypi.python.org/pypi/ahocorasick/0.9などの素晴らしい実装があります。なぜPHPではないのですか?

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

algorithm - 不要な単語を含むドキュメント検索

次のクエリをサポートするように、全長nのSドキュメントのコレクションのインデックス作成に役立つデータ構造を構築しています。2つの単語P1とP2が与えられた場合、P1を含むがP2を含まないすべてのドキュメントをカウントします。答えを完全なものにしたい(結果を見逃さないようにする)。

一般化された接尾辞木を作成し、すべてのsqrt(n)番目の葉とその祖先を選択します(そして、すべての1子ノードを削除します)。内部ノードごとにvノードuに対するクエリの回答を事前に計算します。

しかし、これにより、ノードvとuのツリーに表示される単語がクエリに含まれている場合、O(1)で答えを得ることができますが、選択したノードの1つに単語がない場合はどうすればよいですか?

前処理でO(n 2)データ構造を維持し、O(1)時間検索の準備ができているすべての可能な答えを用意することで簡単にそれを行うことができますが、目標はO(n)空間でこのデータ構造を構築することです。クエリを可能な限り効率的にします。

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

ruby - アルゴリズム:文字列の類似性

私はInterviewStreetでこの課題を解決しようとしています:https ://www.interviewstreet.com/challenges/dashboard/#problem/4edb8abd7cacd

私はすでに動作するアルゴリズムを持っていますが、そのパフォーマンスを改善したいと思います。その方法について何か提案はありますか?

ありがとう、グレッグ