2013-06-09 15 views
8

FInd algorytm dla następnego problemu: Biorąc pod uwagę zestaw S n punktów w płaszczyźnie 2D, punkt (x1, y1) dominuje inny punkt (x2, y2), jeśli x1> x2 i y1> y2. Znajdź największy zestaw punktów M taki, że M jest podzbiorem S i żaden punkt M nie jest zdominowany przez inny punkt S.Algorytm dla maksymalnego zestawu zdominowanego

+0

Ładny mały problem, dzięki. –

+0

user1256960, Edytowałem pytanie, dodając ustawione nazwy S i M. W ostatnim zdaniu zmień "inny punkt M" na "dowolny punkt S", jeśli o to ci chodzi. (Pierwotne pytanie było niejednoznaczne na temat tego, czy inne punkty są w S, czy w M.) –

+0

Jest to zasadniczo maksymalny niezależny problem związany z ustawionym wykresem. Ogólny problem to NP-zupełny, więc nie można gorzej niż 'O (2^n)'. –

Odpowiedz

8

Sortuj wszystkie punkty, zwiększając współrzędne x. Jeśli dwa punkty mają tę samą współrzędną x, posortuj je, zmniejszając współrzędne y. Teraz można pokazać, że podzbiór punktów jest zdominowany wtedy i tylko wtedy, gdy ich współrzędne y są nie rosnące w naszej posortowanej sekwencji, co oznacza, że ​​każda współrzędna y jest mniejsza lub równa poprzedniej w podciągnięciu.

Więc algorytm będzie:

  1. Uporządkuj punkty jak opisano powyżej. Czas: O (n * logn).
  2. Znajdź najdłuższy nie zwiększający się podciąg współrzędnych y. Czas: O (n * logn). Można to zrobić, dostosowując algorytm do znajdowania longest increasing subsequence.

Daje to największy możliwy zestaw w O (n * logn).

+0

Uważam, że # 2 powinien prosić o "najdłuższy nierozszerzający się podciąg", nieprawdaż? –

+0

@JanDvorak Masz rację, dziękuję. – interjay

+0

Rzeczywisty problem zadaje pytanie, czy żaden punkt M nie jest zdominowany przez inny punkt w S. – user1256960

1

Istnieje algorytm dziel i podbijaj, który wykonuje to w czasie O (n * logn).

Podzielmy punkty na dwie połówki, o wielkości n/2 każda, na podstawie ich współrzędnych x. W obu połowach znajdujemy niedominowany punkt. Musisz zauważyć, że wszystkie niedominowane punkty znalezione w prawej połowie pojawią się na naszej ostatecznej liście.

Dzięki tej obserwacji możemy napisać nasz krok łączenia, usunąć wszystkie niedominowane punkty w lewej połowie, które mają współrzędną y mniejszą niż najwyższa współrzędna y punktu w niedominowanym zbiorze po prawej stronie pół. Mamy zestaw niedominowanych punktów.

Algorytm:

Find the median along x axis - O(n) time 
Find non-dominated points in the right half - T(n/2) 
Find non-dominated points in the right half - T(n/2) 
set of non-dominated points could be on O(n) so, the combine step might have to check O(n) points 

Równanie czasu:

T(n) = 2T(n/2) + O(n) which is O(n*logn) 

Można to poprawić dodatkowo O (N * logH), w którym H oznacza liczbę nie zdominowanych punktów , wymaga więcej wglądu w problem i jest dobrym rozszerzeniem, nad którym możesz popracować.

Powiązane problemy