Motivação : Ao desenvolver ferramentas para controle de versão de dados, acabamos analisando algoritmos para "diferenciar" dois conjuntos de números inteiros, criando uma sequência de transformações que levam um conjunto de números inteiros para o outro. Conseguimos reduzir esse problema ao seguinte problema muito natural que parece ter conexões para editar a distância, o agrupamento por troca e a partição mínima comum de cadeias .
Problema : recebemos uma sequência, ou seja, uma sequência de letras, e nosso objetivo é homogeneizá- la a um custo mínimo. Ou seja, queremos uma sequência reorganizada de modo que todas as letras iguais sejam próximas uma da outra.
A única operação permitida é pegar uma subsequência de letras iguais e mover essa subsequência para qualquer lugar, e isso me custa 1 unidade.
Qualquer ajuda para caracterizar a complexidade desse problema seria muito apreciada!
Exemplo :
- aabcdab: Input
- bcd aa ab: Depois de mover o primeiro aa para a posição logo após "d"
- b bcdaaa: Depois de mover o b final para a primeira posição
Como a sequência resultante é homogênea, temos um custo de 2.
Observe que não somos limitados de maneira alguma com relação à saída: contanto que seja homogênea, não precisamos garantir nenhuma ordem específica.