いくつかの文字列フラグメントを考えて、すべてのフラグメントを含む最短の単一文字列(「出力文字列」)を見つけたいと思います。フラグメントは、出力文字列で互いにオーバーラップできます。
例:
文字列フラグメントの場合:
BCDA
AGF
ABC
次の出力文字列にはすべてのフラグメントが含まれており、単純な追加によって作成されています。
BCDAAGFABC
ただし、この出力文字列はオーバーラップを使用するため、より優れています(短い)。
ABCDAGF
^
ABC
^
BCDA
^
AGF
この問題のアルゴリズムを探しています。厳密に最短の出力文字列を見つけることは絶対に重要ではありませんが、短いほど良いです。入力フラグメントのすべての順列を追加し、オーバーラップ(NP完全と思われる)を削除しようとする明白な単純なアルゴリズムよりも優れたアルゴリズムを探しています。
私は解決策に取り組み始めましたが、それは非常に興味深いことを証明しています。他の人が何を思い付くのか見てみたいです。しばらくして、進行中の作業をこの質問に追加します。
3
問題はNP完全なようです。その場合、最短の文字列を決定するための多項式アルゴリズムを見つけることはできませんが、近似的な(最短ではない)解を与える多項式アルゴリズムがある場合があります。
—
superM
:NP-コンプリートに関するこのブログの記事はいいですcodinghorror.com/blog/2008/11/...
—
occulus
ブログは本当にすてきです、私はいつもそれを読みます)))
—
superM
@superMこれは、巡回セールスマン(各ストリングは都市であり、都市間のコスト=いくつかの重複)に十分似ています
—
ラチェットフリーク
彼らはまったく共通の文字を持っていないとき@ratchetフリーク、それは彼らがより一般的な手紙を持っている場合_あなたは都市間の小さなコストを与える可能性があり、かつ最大のコスト
—
superM