6

次の非標準操作を使用して、一連のシーケンス (すべて同じ既知の長さ) を表すデータ構造が必要です。

ちょうど 1 つのインデックスで異なるセット内の 2 つのシーケンスを検索します。(または、そのようなペアが存在しないことを確認します。)

Nがシーケンスの長さとシーケンスMの数である場合、明らかなアルゴリズムO(N*M*M)があります。これをより効率的に解決する標準的な方法があるのだろうか。必要に応じて前処理を適用します。

ボーナス ポイントは、アルゴリズムがペアを返す代わりに、同じポイントで異なるすべてのシーケンスを返す場合です。

または、特定のシーケンスがセット内の任意のシーケンスと 1 つのインデックスで異なるかどうかを効率にチェックできるソリューションにも興味があります。それが役立つ場合、セット内で 2 つのシーケンスがそのプロパティを持っていないと仮定できます。

編集:Nかなり小さいと想定できます。これは、O(log(N)*M*M)私のユースケースではすぐには役に立たないような改善を意味します。

4

3 に答える 3

2

各シーケンスとそのシーケンス内の各位置 i について、位置 i を除いたシーケンスのハッシュを計算し、それをハッシュ テーブルに追加します。テーブルにすでにエントリがある場合は、1 つの位置だけが異なる潜在的なペアが見つかりました。開始と終了の両方からローリング ハッシュを使用し、それらを組み合わせることで、各ハッシュを一定時間で計算できます。合計実行時間は O(N*M) と予想されます。

于 2013-05-03T12:02:17.883 に答える