Motivación : Mientras desarrollamos herramientas para el control de versiones de datos, terminamos buscando algoritmos para "diferenciar" dos conjuntos de enteros, creando una secuencia de transformaciones que llevan un conjunto de enteros al otro. Pudimos reducir ese problema al siguiente problema muy natural que parece tener conexiones para editar la distancia, la agrupación por intercambio y la mínima partición de cadena común .
Problema : se nos da una cadena, es decir, una secuencia de letras, y nuestro objetivo es homogeneizarla a un costo mínimo. Es decir, queremos una secuencia reorganizada de tal manera que todas las letras que sean iguales estén una al lado de la otra.
La única operación que se permite es recoger una subsecuencia de letras que son parecidas, y mover esa subsecuencia a cualquier lugar, y eso me cuesta 1 unidad.
¡Cualquier ayuda que caracterice la complejidad de este problema sería muy apreciada!
Ejemplo :
- aabcdab: entrada
- bcd aa ab: después de mover el primer aa a la posición justo después de "d"
- b bcdaaa: después de mover el final b a la primera posición
Como la cadena resultante es homogénea, tenemos un costo de 2.
Tenga en cuenta que no estamos limitados de ninguna manera con respecto a la salida: mientras sea homogéneo, no necesitamos asegurar ningún orden específico.