をスタートとして、あなたは、少なくとも両方で発生していない任意のトリプレットを排除するためにset symmetric differenceを計算することによって、問題を軽減することができますシーケンス。
最長のサブシーケンスでは、アルゴリズムはdynamic programmingアプローチを使用します。それぞれのトリプレットについて、長さ2の最短部分文字列を両方の文字列で見つけます。これらのペアをループし、ペアを結合してそれらを拡張しようとします。各トリプレットの長さが最も長くなるまで拡張してください。これらの最長選ん:一般的に、バイオインフォマティクスに使用されている
ABQACBBA
ZBABBA
Eliminate symmetric difference
ABABBA and BABBA
Start with the first A in ABABBA.
It is followed by B, giving the elements [0,1]
Check to see if AB is in BABBA, and record a match at [1,2]
So, the first pair is ((0,1), (1,2))
Next, try the first B in ABABBA.
It is followed by an A giving the elements [1,2]
Check to see if BA is in BABBA and record a match at [0,1]
Continue with the rest of the letters in ABABBA.
Then, try extensions.
The first pair AB at [0,1] and [1,2] can be extended from BA
to ABA [0,1,3] and [1,2,4]. Note, the latter group is all the
way to the right so it cannot be extended farther. ABA cannot
be extended.
Continue until all sequences have extended are far as possible.
Keep only the best of those.
これは間違ったアルゴリズムだと思います。目標は、最も長い共通部分配列を抽出するだけで、配列を整列させることではありません。配列アライメントアルゴリズムはLCSアルゴリズムよりも効率的に動作しないため、シーケンスアラインメントアルゴリズムの結果として生じる解決策は、OPが望むものにうまく対応できない可能性があります。 – templatetypedef
@templatetypedef:私は同意します。アラインメントは、必要とされるものよりも特定の問題に対するより一般的なアプローチです。だから私はあなたのソリューションをupvoted :)です。彼はより詳細なアプローチが必要な場合に備えて私は鉱山を去ったが。 – Avaris