最短共通スーパーストリング:指定されたすべてのストリングフラグメントを含む最短ストリングを検索


12

いくつかの文字列フラグメントを考えて、すべてのフラグメントを含む最短の単一文字列(「出力文字列」)を見つけたいと思います。フラグメントは、出力文字列で互いにオーバーラップできます。

例:

文字列フラグメントの場合:

BCDA
AGF
ABC

次の出力文字列にはすべてのフラグメントが含まれており、単純な追加によって作成されています。

BCDAAGFABC

ただし、この出力文字列はオーバーラップを使用するため、より優れています(短い)。

ABCDAGF
^
ABC
 ^
 BCDA
    ^ 
    AGF

この問題のアルゴリズムを探しています。厳密に最短の出力文字列を見つけることは絶対に重要ではありませんが、短いほど良いです。入力フラグメントのすべての順列を追加し、オーバーラップ(NP完全と思われる)を削除しようとする明白な単純なアルゴリズムよりも優れたアルゴリズムを探しています。

私は解決策に取り組み始めましたが、それは非常に興味深いことを証明しています。他の人が何を思い付くのか見てみたいです。しばらくして、進行中の作業をこの質問に追加します。


3
問題はNP完全なようです。その場合、最短の文字列を決定するための多項式アルゴリズムを見つけることはできませんが、近似的な(最短ではない)解を与える多項式アルゴリズムがある場合があります。
superM

3
:NP-コンプリートに関するこのブログの記事はいいですcodinghorror.com/blog/2008/11/...
occulus

ブログは本当にすてきです、私はいつもそれを読みます)))
superM

@superMこれは、巡回セールスマン(各ストリングは都市であり、都市間のコスト=いくつかの重複)に十分似ています
ラチェットフリーク

彼らはまったく共通の文字を持っていないとき@ratchetフリーク、それは彼らがより一般的な手紙を持っている場合_あなたは都市間の小さなコストを与える可能性があり、かつ最大のコスト
superM

回答:


14

あなたが求めているのは、最短共通スーパーストリング問題です。これには、すべての場合に機能するアルゴリズムはありません。しかし、これは(圧縮およびDNAシーケンスにおける)一般的な問題であり、いくつかの近似アルゴリズムがよく知られています。

「貪欲な」アルゴリズムは、一般的に最も効果的であると受け入れられています(最悪の最悪のケースがあるなど)。

詳細については、Jonathan Turnerによる論文「最短共通スーパーストリング問題の近似アルゴリズム」をお読みください。



うーん、コメントの最初のリンクは、スーパーストリングではなく、スーパーシーケンスのすぐ上にあることに注意してください!スーパーシーケンスでは、シーケンス内のすべての文字が連続している必要はないようです。
オクルス

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