文字列の均質化の複雑さ


10

動機:データのバージョン管理用のツールを開発しているときに、2つの整数のセットを "比較"するアルゴリズムを検討しました。この問題を、距離の編集、スワッピングによるグループ化最小の共通文字列パーティションへの接続があると思われる次の非常に自然な問題に減らすことができました。

問題:文字列、つまり一連の文字が与えられ、最小のコストでそれを均質化することが目標です 。つまり、類似するすべての文字が互いに隣り合うように並べ替えられたシーケンスが必要です。

許可される唯一の操作は、類似した文字のサブシーケンスを取得し、そのサブシーケンスをどこにでも移動することです。これには1ユニットかかります。

この問題の複雑さを特徴付ける助けがあれば大歓迎です!

  • aabcdab:入力
  • bcd aa ab:最初のaaを「d」の直後の位置に移動した後
  • b bcdaaa:末尾のbを最初の位置に移動した後

結果の文字列は均一であるため、コストは2になります。

出力に関しては何の制約も受けないことに注意してください。均質である限り、特定の順序を保証する必要はありません。

回答:


6

この問題は、最小ヒットセットからの削減により、NP完全です。

最小打撃セットにおいて、我々は宇宙、与えられた、および集合の集合SようS SをsはUを。目的は、見つけることであるH Uように最小サイズのS SをH Hように、H SUSsSsUHUsShHhs

削減は次のとおりです。

  • 次のように文字列がある:各要素について、文字列の2つの文字が存在するであろうU '。これらの文字間の文字意志"それぞれのためSようにU Su のペアの間には、文字列で繰り返されない一意の文字があります。あなたUあなたssSあなたsあなた

  • 文字列を均質化するには、文字を移動する必要がありますs | sについて1回。また、各Uuがすべての場合を除き、文字は、一度に移動しなければならない"のペア間のuは別の場所に移動されました。s|s|1sあなたあなたsあなた

  • したがって、文字列を均質化するために必要な移動の数を最小限に抑えるために、すべてのs 'が別の場所に移動されるようにの数を最大化したいと考えています。U "" sが別の場所に移動していないが一緒に含まれている必要がありますSを"すべてのがのためにS、彼らは打つセットのためにしなければならないので。さらに、そのようなヒットセットは、各sをヒットするuに移動することにより、s 終了位置として機能します。あなたsあなたsssSssあなた

  • したがって、この文字列を均質化する動きの数に等しいですここで、H は最小ヒットセットです。Σ|s|+|H|H

最小ヒットセットはNP-Hardであるため、文字列を最適に均質化することも同様です。動きは目撃者を形成するので、それはNP-Completeです。


これはエレガントな削減です-ありがとう!
Aditya Parameswaran 2017

2

文字列のある文字から別の文字への変化の数を見てください。これは、文字列の不均一性の尺度として見ることができます。サブシーケンスの(便利な)移動ごとに、移動するサブシーケンスの前後に2つの異なる文字が続く場合は、この数を1つ減らします。それ以外の場合は、不均一性を2つ減らします。

したがって、k個の変更がある文字列の場合、最大でk-l + 1の 移動が必要です。lは文字列内の異なる文字の数です。結局、l-1個の変更が残るためです。長さnの文字列は最大でn-1文字の変更を持つことができるため、最大でn-lの移動が必要になる可能性があります。最小数はこの半分です。

したがって、最良の戦略は、フォームabbbaのサブシーケンスを探し、そこからbbbを移動することです。何も残っていないときは、何でも動かしてください。あなたはまだ新しいアバの状況を作成するそれらの操作を試みることができますが、私は利益が非常に少ないと思います。最悪の戦略(不均一性を増加させる愚かな動きがない場合)は、最適な動きの最大2倍の動きを使用するため、得られる可能性のある小さな動きは、特性とのisaacgの答えとしての努力と合理的な関係にないようですNP-hardが示唆しています。もちろん、実際には移動操作の数のみを数え、どの移動を行うかを決定する時間を気にしない限り、

したがって、最悪のケースは、すべての文字がその前任者とは異なる文字列です(そして、アバボーナスは得られません)。ここでは、文字列の長さに線形で、この長さにほぼ等しい数の操作が必要です。

あなたの例では、5-> 4-> 3の変更があり、3は文字数(4)から1を引いた数に等しい。

補足:サイズが2のみのアルファベットの場合、文字列の接頭辞または接尾辞を移動しないすべての移動で不均一性が2つ減少するため、合理的な移動のすべてのシーケンスが最適です。


移動によって変更の数を最大で2減らすことができると主張していますが、実際には、変更の数を最大3まで減らすことができます。たとえば、最初の部分文字列「bc」を次のように移動して、「aabcabc」を「aaabbcc」に変換します。 5から2への文字列の変更の数の減少をもたらす「BC」第二サブストリングの中央
ミハイルRudoy

こんにちは、@ MikhailRudoy。質問は、操作が「類似した文字のサブシーケンスを取得する」であると述べているので、私が理解している限り、bcは許可されていません。
Peter Leupold 2017

私はその詳細を完全に逃しました。あなたはその場合正しいです。
Mikhail Rudoy 2017

ピーターは正解です。これらの移動は許可されていません。
Aditya Parameswaran 2017

Re:残りの答え-実際、これらの観察re:下限、アルファベットサイズ2のケースの最適性、および任意の時点で何をすべきかについてのヒューリスティックスは価値があります。最悪の場合の移動は、その文字のシーケンスにのみメリットがあり、最良の場合、アバのように最大で2つの文字のシーケンスがマージされるため、2近似は自然に見えます。
Aditya Parameswaran 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.