Motivation : lors du développement d'outils de gestion des versions de données, nous avons fini par chercher des algorithmes pour «différencier» deux ensembles d'entiers, en proposant une séquence de transformations qui amènent un ensemble d'entiers à l'autre. Nous avons pu réduire ce problème au problème très naturel suivant qui semble avoir des connexions pour modifier la distance, le regroupement par échange et la partition de chaîne commune minimale .
Problème : On nous donne une chaîne, c'est-à-dire une séquence de lettres, et notre objectif est de l' homogénéiser à moindre coût. Autrement dit, nous voulons une séquence réarrangée de telle sorte que toutes les lettres qui se ressemblent sont côte à côte.
La seule opération autorisée est de récupérer une sous-séquence de lettres qui sont semblables et de déplacer cette sous-séquence n'importe où, et cela me coûte 1 unité.
Toute aide caractérisant la complexité de ce problème serait très appréciée!
Exemple :
- aabcdab: entrée
- bcd aa ab: après avoir déplacé le premier aa à la position juste après "d"
- b bcdaaa: après avoir déplacé le b de fin vers la première position
Puisque la chaîne résultante est homogène, nous avons un coût de 2.
Notez que nous ne sommes soumis à aucune contrainte en ce qui concerne la sortie: tant qu'elle est homogène, nous n'avons pas besoin de garantir un ordre spécifique.