Przez jakiś czas myślałem o następującym problemie i nie znalazłem rozwiązania wielomianowego. Tylko brutalne źródło. Próbowałem też zredukować problem NP-Complete bez powodzenia.
Oto problem :
Masz posortowany zestaw par dodatnich liczb całkowitych.
Poniższy operacja może być zastosowana do pary: Swap(pair)
. Zamienia elementy pary, więc stanie się
Kiedy para w zestawie zostanie zamieniona, zestaw zostanie automatycznie ponownie posortowany (zamieniona para jest nie na miejscu i zostanie przeniesiona na swoje miejsce w zestawie).
Problem polega na sprawdzeniu, czy istnieje sekwencja, która, zaczynając od jakiejś pary, zamienia cały zestaw, z następującym warunkiem:
Po zamianie pary następna para do zamiany musi być albo następcą, albo poprzednią parą w zestawie.
Byłoby wspaniale znaleźć rozwiązanie problemu wielomianowego w czasie lub zredukować do niego problem NP-Complete.
Uwaga:
to już problem decyzyjny. Nie chcę wiedzieć, która sekwencja jest: tylko jeśli sekwencja istnieje.
Przykład sortowania zestawu po zamianie pary
Jeśli zamienię pierwszą parę, staje się to: , a po posortowaniu zestawu (umieszczeniu posortowanej pary w nowej pozycji) mamy:
Następnie muszę zamienić parę (poprzednik) lub ( 7 , 8 ) (sukcesor) i powtarzać proces, aż wszystkie pary zostaną zamienione (jeśli to możliwe).
Ważne:
Nie możesz zamienić już zamienionej pary.
Jeśli istnieje sekwencja operacji „zamiany”, wówczas wszystkie pary należy zmienić na raz i tylko raz.
Przykład, w którym nie można zamienić wszystkich par
( 1 , 4 ) ( 3 , 2 ) ( 5 , 5 )