Motywacja : Opracowując narzędzia do wersjonowania danych, zaczęliśmy szukać algorytmów do „różnicowania” dwóch zestawów liczb całkowitych, wymyślając sekwencję przekształceń, które przenoszą jeden zestaw liczb całkowitych na drugi. Udało nam się zredukować ten problem do następującego bardzo naturalnego problemu, który wydaje się mieć połączenia do edycji odległości, grupowania przez zamianę i minimalnej wspólnej partycji ciągów .
Problem : Otrzymujemy ciąg znaków, tzn. Ciąg liter, a naszym celem jest ujednolicenie go przy minimalnych kosztach. Oznacza to, że chcemy zmienić kolejność sekwencji, tak aby wszystkie podobne litery były obok siebie.
Jedyną dozwoloną operacją jest pobranie podsekwencji podobnych liter i przeniesienie tej podsekcji w dowolne miejsce, co kosztuje mnie 1 jednostkę.
Będziemy wdzięczni za wszelką pomoc charakteryzującą złożoność tego problemu!
Przykład :
- aabcdab: Input
- bcd aa ab: Po przeniesieniu pierwszego aa do pozycji tuż po „d”
- b bcdaaa: Po przesunięciu trailing b do pierwszej pozycji
Ponieważ powstały ciąg jest jednorodny, mamy koszt 2.
Zauważ, że nie jesteśmy w żaden sposób ograniczeni w odniesieniu do wyniku: dopóki jest on jednorodny, nie musimy zapewniać żadnej konkretnej kolejności.