Nazwa tego problemu z przestawieniem / sortowaniem?


10

Otrzymujesz tablicę o długości . Każdy element tablicy należy do jednej z klas. Powinieneś zmienić układ tablicy za pomocą minimalnej liczby operacji wymiany, aby wszystkie elementy z tej samej klasy były zawsze pogrupowane razem, tj. Tworzą ciągłą pod-tablicę. Na przykład: Pozostały trzy inne ważne ustalenia.K.nK

[2,1,3,3,2,2][2,2,2,1,3,3], or[2,1,3,3,2,2][1,2,2,2,3,3], or[2,1,3,3,2,2][3,3,2,2,2,1].

Jak nazywa się ten problem w literaturze? Czy istnieje dla niego wydajny algorytm?


1
Nie jestem pewien, czy ten problem ma nazwę, choć z pewnością jest możliwy. Nie wszystkie możliwe problemy mają nazwy.
Yuval Filmus,

2
W praktyce byłoby to nazywane grupowaniem . Nie znam terminologii w klasycznej algorytmii. (Jest to z pewnością interesujący i potencjalnie trudny problem! Minimalizacja liczby zamian ma wrażenie „znajdź najlepszą permutację grup”, co z kolei wydaje się NP-trudne).
Raphael

Cóż, chłopaki, dziękuję za teraz. Oczywiście jestem zainteresowany rozwiązaniem problemu, ale pomyślałem, że już go zbadałem, więc poprosiłem o referencję.
Marko Bukal

Odpowiedzi:


6

Uwaga: jest to dowód na twardość i myślę, że istnieją praktyczne algorytmy, takie jak programowanie liczb całkowitych itp.

Biorąc pod uwagę instancję BIN_PACKING, w której chcesz spakować liczb n 1 , , n K do L pojemników o rozmiarze m 1 , , m L , i zapewnione jest, że n i = m jKn1,,nKLm1,,mL , to możemy zaprojektować przykład problemu w następujący sposób:ni=mj=N

  • Istnieją ;K+(N+1)(L1)
  • Pierwsze klasy mają odpowiednio rozmiar n 1 , , n K , a każda z pozostałych klas ma rozmiar N + 1 ;;Kn1,,nKN+1
  • Tablica jest podzielona na miejsca o rozmiarze: gdzie każde miejsce o rozmiarze ( N + 1 ) 2 jest wypełnione klasami N + 1 , ułożonymi sąsiadująco, a pozostałe są dowolnie ułożone.
    m1,(N+1)2,m2,(N+1)2,m3,,(N+1)2,mL
    (N+1)2N+1

Kluczową obserwacją jest to, że nie ma sensu utrzymywać co najmniej jednej klasy w gnieździe nieporuszonym i przesuwać inne (ponieważ nie zmieni to rozmiaru „kosza”). Tak oryginalne opakowanie bin jest dostępna tylko wtedy, gdy minimalna liczba swapów jest nie większy niż N . Ponieważ wiadomo, że BIN-PACKING jest silnie NP-zupełny , twój problem jest NP-trudny.(N+1)2N


To jest piękne! W przypadku, gdy inni również borykali się z problemami: (1) zamian jest zawsze wystarczające, aby utworzyć dowolne „pakowanie pojemników”, które chcemy w szczelinach o rozmiarze m 1 , , m L , ponieważ wystarczy jedna zamiana, aby przenieść jeden element do ostatecznego lokalizacja bez zakłócania już umieszczonych elementów. (2) Są tylko 2 możliwe rzeczy, które moglibyśmy zrobić z długimi ( N + 1 ) 2 „strefami buforowymi” pomiędzy „przedziałami”: przesunąć całą klasę długości - ( N + 1 ) na dowolnym końcu gdzie indziej ( ale to kosztuje N.Nm1,,mL(N+1)2(N+1)N+1zamienia już, więc nie możemy) lub „przesuń” całą rzecz o jedną pozycję w lewo lub w prawo (ale to pociąga za sobą „przesuwanie” każdego ...
j_random_hacker 10.10.17

... klasa w buforze w lewo lub w prawo jedna pozycja, i choć można to zrobić za pomocą jednego zamiany jednej klasy, istnieje zajęcia w strefie, więc co najmniej N + 1 są potrzebne swapy, więc jeszcze raz: niemożliwy). Ten punkt jest potrzebny do argumentowania, że ​​rozwiązanie problemu PO kosztem N oznacza prawidłowe pakowanie pojemników. (3) Ponieważ pakowanie w bin jest silnie NP-zupełne, zwyczajowe „nie-nie” tworzenia wielu gadżetów (tutaj elementów tablicy) proporcjonalnych do liczb zakodowanych na wejściu nie ma tutaj zastosowania :)N+1N+1N
j_random_hacker

1

Podejrzewam też, że jest to trudne dla NP, ale przy braku pomysłu na dowód, oto kilka szybko obliczalnych dolnych granic, które mogą być przydatne do sprawdzania optymalności rozwiązania heurystycznego lub przycinania wyszukiwania według gałęzi i granic .

Niech klasę zawierać n : i elementy. W każdym prawidłowym rozwiązaniu klasa i musi zaczynać się w pewnej pozycji j . Możemy zatem obliczyć dolną granicę L i na koszt „ustalania” klasy i , wypróbowując wszystkie możliwe pozycje początkowe j , licząc liczbę elementów innych niż i w bloku n i rozpoczynając od pozycji j (każda z tych pozycji będzie wymagał zamiany) i biorąc minimum. To L i można obliczyć dla dowolnego i w O ( niniijLiijinijLiiO(n)czas z zastosowaniem przesuwanego okna, dla całkowitego czasu . Dwie ogólne dolne granice to:O(Kn)

  1. Weź maksimum we wszystkich . Szczelne dla K = 2 , prawdopodobnie bardzo słaby dużej K .LiK=2K
  2. Zsumuj wszystkie podziel przez 2, zaokrąglając w górę. Jest to ważne, ponieważ każda zamiana może naprawić maksymalnie 2 nieprawidłowe pozycje.Li

W twoim przykładzie obie granice dają 1 (w drugim przypadku 0,5 można zaokrąglić w górę), co oczywiście jest luźne.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.