Aho-CorasickアルゴリズムとRabin-Karpアルゴリズムの比較


11

複数のパターン検索をサポートする文字列検索アルゴリズムに取り組んでいます。実行時間の点で最も強力な候補のように見える2つのアルゴリズム、すなわちAho-CorasickRabin-Karpを見つけました。しかし、2つのアルゴリズムの包括的な比較は見つかりませんでした。どのアルゴリズムがより効率的ですか?また、並列計算と複数パターン検索にはどちらが適していますか?最後に、必要なハードウェアリソースが少ないのはどれですか。

ACアルゴリズムの場合、検索フェーズは時間かかりますが、RKの場合はO n m です。ただし、RKの実行時間はあり、ACに類似しています。私の暫定的な結論は、RKはACほど多くのメモリを必要としないため、RKは実質的に優れているように見えるということです。あれは正しいですか?O(n+m)O(nm)O(n+m)


パターンはすべて同じ長さですか?
Hendrik Jan

@HendrikJanいいえ、さまざまな長さのパターン
Hawk

パターンの長さが異なる場合、RKを使用してそれらを並行して処理するのは難しいように見えますか?ウィキペディアのページでは、これらのパターンの長さが同じであることを示唆しているようですが、ハッシュの更新はさまざまな長さで行うことができます。
Hendrik Jan

何らかの理論的な研究や実際の経験に興味がありますか?
ラファエル

@Raphael学問的には、経験的に証明する前に、まず理論的研究を適用していました。プログラミングの回答を期待していないので、ここに質問を投稿しました。論理的なアルゴリズムの答えが必要
Hawk

回答:


4

漸近実行時間分析は、これらの2つのアルゴリズムの間で選択するのに最適なツールとは限りません。漸近分析は定数因子を無視し、定数因子はここで重要になります。2つのアルゴリズムは基本的に同じ漸近実行時間を持っているので、漸近分析はおそらくそれらを選択するのにあまり役に立ちません。

代わりに、2つのアルゴリズムを選択する正しい方法は、実験的分析によるものです。代表的なワークロードを特定し、実際に使用する予定の種類のマシンで、ワークロードの両方のアルゴリズムのパフォーマンスをベンチマークします。


O(nm)O(n+m)

O(n+m)c(n+m)cO(n+m)

O(n+m)O(nm)


1

しかし、2つのアルゴリズムの包括的な比較は見つかりませんでした。

O(n+m)O(nm)

しかし、「包括的な比較」に対する暗黙のクエリについては、これらの2つのアルゴリズムと他のアルゴリズムを実際のデータで比較し、さまざまなアルゴリズムの分析/長所/短所/トレードオフの分析/比較を含むいくつかの論文が実験的/経験的に書かれています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.