LCSの問題には時間が必要であることを知っています〜O(m n)ここで、mとnはそれぞれ2つのシーケンスXとYの長さです。しかし、私の問題は少し簡単なので、~O(m n) よりも高速なアルゴリズムを期待しています。
これが私の問題です:
入力:
正の整数 Q、2 つのシーケンス X=x1,x2,x3...xn および Y=y1,y2,y3...yn、両方とも長さ n。
出力:
X と Y の LCS の長さが少なくとも n - Q の場合は true。
そうでなければ、偽。
よく知られているアルゴリズムのコストはここでは O(n^2) ですが、実際にはそれよりも優れた処理を行うことができます。共通の要素を見つけることなく、いずれかのシーケンスで Q 個の要素を削除するたびに、結果は False を返すためです。O(Q*n) に匹敵するアルゴリズムがあるはずだと誰かが言っていましたが、私にはわかりません。
更新: すでに答えが見つかりました!
テーブル c[i,j] の対角ブロックを計算するだけでよいと言われました。なぜなら、|ij|>Q の場合、両方のシーケンスに一致しない要素が既に Q 個以上あることを意味するからです。したがって、|ij|<=Q の場合にのみ c[i,j] を計算する必要があります。