動機:データのバージョン管理用のツールを開発しているときに、2つの整数のセットを "比較"するアルゴリズムを検討しました。この問題を、距離の編集、スワッピングによるグループ化、最小の共通文字列パーティションへの接続があると思われる次の非常に自然な問題に減らすことができました。
問題:文字列、つまり一連の文字が与えられ、最小のコストでそれを均質化することが目標です 。つまり、類似するすべての文字が互いに隣り合うように並べ替えられたシーケンスが必要です。
許可される唯一の操作は、類似した文字のサブシーケンスを取得し、そのサブシーケンスをどこにでも移動することです。これには1ユニットかかります。
この問題の複雑さを特徴付ける助けがあれば大歓迎です!
例:
- aabcdab:入力
- bcd aa ab:最初のaaを「d」の直後の位置に移動した後
- b bcdaaa:末尾のbを最初の位置に移動した後
結果の文字列は均一であるため、コストは2になります。
出力に関しては何の制約も受けないことに注意してください。均質である限り、特定の順序を保証する必要はありません。