1つのストリングのサブシーケンスで他のストリングのサブシーケンスではない


7

しましょう Σ アルファベットにしてみましょう x+,x1,,xnΣそのアルファベットの文字列である。文字列を呼び出すsΣ 良けれs のサブシーケンスです x+ のサブシーケンスではない x1,,xn

与えられた x+,x1,,xn、私は最短の良い文字列を探しています s。これに適したアルゴリズムはありますか?ワーストケースの実行時間がそれほど長くない場合でも、実用的なアルゴリズムに興味があります。私のドメインでは、文字列x+,x1,,xn かなり長いかもしれませんが、良い紐が存在すると思います s それが役立つ場合、それはかなり短いです。

ケース n=1ある文字列の最下位サブシーケンスによって処理されます。これは別の文字列のサブシーケンスではありませんが、ケースに対処する必要がありますn>1


1
私の標準的な提案:サフィックスツリー?あなたが探している文字列は、(x+,_)葉として。ああ、ちょっと…サブシーケンス?くそー。うーん。
ラファエル

この問題はなくても x+デュアルから最長の共通サブシーケンス?もしそうなら、多分それらに沿って何かを行うことができます。(長さを増やすことで一般的な非サブシーケンスを列挙すると、問題が解決します。)
ラファエル

AryabhataのDPはかなり簡単に拡張できます。 n>1 ケース:使用するだけ n テーブル、各1つ xi、次に最小のものを探します Lその結果、各テーブルのi、そしていくつかのために kis_there[i,k,t,L]=false。長さがわかります(L)と最後の文字(x+[k])、しかし、以前の文字を抽出する方法はまだわかりません...
j_random_hacker 2017

2
@j_random_hacker、私はそれがうまくいくとは思いません。それは1つのサブシーケンスを選ぶかもしれませんx+ 長さの L それはのサブシーケンスではありません x1、およびの別のサブシーケンス x+ 長さの L それはのサブシーケンスではありません x2。(最初の1つは、x2、および2番目のサブシーケンス x1、これは悪いことです。)の単一のサブシーケンスが必要です x+、それぞれ個別ではありません xi。それともあなたの考えについて何か賢いことを見逃しましたか?
DW

3
絶対に最短のサブシーケンスが必要ない場合は、文字列の場合、 s のサブシーケンスではありません xi、それはまた、文字列のインターリーブのサブシーケンスではありませんxi。したがって、ランダムにインターリーブするさまざまな方法を試すことができますn 文字列 xi 単一の文字列に、そしてそのようなインターリーブごとに yj、サブシーケンスを探す zjx+ のサブシーケンスを回避する yj AryabhataのDPを使用して、どちらかを選択します zj最短です。
j_random_hacker 2017

回答:


1

間違い

最初に、コメントでいくつかの間違いをしました:インターリーブについて行った最初の主張とそれを「修正する」(現在は削除されている)コメントの両方が間違っていました。も間違っていました(以下に簡単な反例を示します)。最後に、設定する私の提案x+=zj 繰り返し、またはビーム検索を使用しても、実際には役に立たない:これを実行し、AryabhataのDPを適用することによって得られる答えは、元の x+DPが選択できるソリューションセットのサイズを縮小するだけなので、ごめんなさい!うまくいけば、以下の改良版にはそれ以上の問題はありません...

アリヤバタの民主党の 2つの間違いにも気づきましたました。幸いなことに、どちらも簡単に修復できます(その投稿に対する私のコメントを参照してください)。

ランダムインターリーブを使用したヒューリスティックソリューション

絶対に最短のサブシーケンスが必要ない場合は、文字列の場合、 s 一部のサブシーケンスです xi、それはまた、すべての文字列の可能なすべてのインターリーブのサブシーケンスですxi。もしこれを逆にするとs すべての文字列の特定のインターリーブのサブシーケンスではありません xi、それはそれは任意の個人のサブシーケンスではありませんxi

したがって、ランダムにインターリーブするさまざまな方法を試すことができます n 文字列 xi 単一の文字列に、そしてそのようなインターリーブごとに yj、最短のサブシーケンスを探します zjx+ のサブシーケンスを回避する yj使用した2列の場合のアリヤバータの素敵なDPアルゴリズムを、そしてどちらを選びますzj あなたが試みたすべてのインターリーブの中で最短です。

警告:すべてのインターリーブを試みても、最適性は保証されません

驚いたことに(少なくとも私にとって)、可能なすべてのインターリーブに対して上記の手順を繰り返しても、最適なソリューションを見つけることが保証されていません。 x+=aaan=2、および x1=x2=a。その後aa 長さ2の最適なソリューションですが、すべてのインターリーブを試行することで見つかる最短のソリューション x1 そして x2 です aaa、長さ3。

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