Przeskocz do treści

Delta mi!

Problemy 3sum-trudne w geometrii

Jakub Radoszewski

o artykule ...

  • Publikacja w Delcie: maj 2013
  • Publikacja elektroniczna: 30-04-2013
  • Wersja do druku [application/pdf]: (171 KB)
obrazek

Kiedy rozwiązujemy jakiś problem informatyczny, często naszym celem jest podanie jak najefektywniejszego algorytmu. Jednak czasem możemy natknąć się przy tym na „ścianę” – danego problemu nie da się rozwiązać tak efektywnie, jak byśmy tego chcieli. Najpowszechniej znanym przykładem opisanego zjawiska jest klasa problemów NP-zupełnych. O problemach z tej klasy (a należy do niej wiele naturalnych i praktycznych zagadnień) podejrzewa się, że nie da się ich rozwiązać w czasie wielomianowym względem rozmiaru danych wejściowych. Niestety, tylko podejrzewa się, a rozstrzygnięcie tej hipotezy (znanej też jako math?) jest obecnie najsłynniejszym otwartym problemem informatyki teoretycznej.

Na szczęście wiele ważnych problemów obliczeniowych umiemy rozwiązywać w czasie wielomianowym. Jednak w praktyce wielomian wielomianowi nierówny – jest przecież istotne, czy dany problem umiemy rozwiązać w czasie math  czy też w czasie math  Okazuje się, że także w przypadku problemów rozwiązywalnych w czasie wielomianowym (tzw. klasa problemów P) znane są pewne narzędzia pozwalające stwierdzić, że danego problemu zapewne nie da się rozwiązać w czasie szybszym niż taki a taki, a jeśli nawet się da, to jest to bardzo trudne.

W tym artykule skupimy naszą uwagę na następującym problemie:

Problem (3SUM). Dany jest zbiór math złożony z  math liczb całkowitych. Czy istnieją takie liczby math że math

Zadanie 1. Jak rozwiązać problem math w czasie math (Albo chociaż w czasie math )

Wszystkie omawiane w tym artykule problemy mają charakter decyzyjny, tzn. odpowiedzią w każdym z nich jest pojedyncza wartość logiczna. Na potrzeby naszego artykułu przyjmiemy następującą definicję redukcji problemu:

Definicja. Powiemy, że problem math  można zredukować do problemu math w czasie math  jeśli dowolną instancję (czyli dane wejściowe) problemu math  o rozmiarze math  można przekształcić w czasie math  w stałą liczbę instancji problemu math o rozmiarze math  tak, żeby na podstawie odpowiedzi dla wyznaczonych instancji problemu math można było udzielić odpowiedzi dla rozważanej instancji problemu math

Będziemy wówczas pisali, że math  co oznacza tyle, że problem math jest co najmniej tak trudny jak problem math  gdyż jeśli umiemy w czasie math  rozwiązać problem math  to umiemy w takim samym czasie rozwiązać problem math  Jeśli math  oraz math to będziemy pisali, że math

Problemem, który będziemy redukować do innych zagadnień, jest wspomniany już problem math. Przez wiele lat znany był algorytm rozwiązujący ten problem w czasie math (patrz zadanie 1 na marginesie) i uważano, że nie da się go rozwiązać w złożoności mniejszej niż math Wprowadzono też klasę problemów math -trudnych, czyli problemów, do których można zredukować problem math w czasie math Od 2005 roku wiadomo jednak, że problem math można rozwiązać troszeczkę szybciej, a mianowicie w czasie

display-math

Mimo tego usprawnienia wciąż nie widać nadziei na znalezienie algorytmu rozwiązującego ten problem w czasie istotnie lepszym niż math

Zadanie 2. W problemie math elementy math mogą się powtarzać. Nie ma to jednak większego znaczenia, gdyż w czasie math  można łatwo identyfikować instancje problemu, dla których istnieje rozwiązanie z powtarzającymi się elementami. Jak to zrobić?

Będziemy także używać następującego bliźniaczego problemu math, który jest równoważny z problemem math (tj. math):

Problem. Dane są trzy zbiory liczb całkowitych math  zawierające łącznie math elementów. Czy istnieją liczby math i  math  takie że math

Zadanie 3. Udowodnij, że math math math, tzn. pokaż, jak wykonać obie redukcje. Przykłady różnych redukcji znajdziesz w dalszej części artykułu.

Problemy, które będziemy rozważać w dalszej części tekstu, mają charakter geometryczny. Jako pierwszy rozpatrzymy problem nazywany math– podstawowy problem math-trudny w geometrii, służący jako narzędzie do dowodzenia math-trudności innych problemów. Jest on określony następująco:

Problem. Danych jest math punktów kratowych położonych na prostych math i  mathCzy istnieje prosta inna niż pozioma przechodząca przez jakieś trzy spośród tych punktów?

obrazek

Rys. 1 Instancja problemu math otrzymana z instancji math math math problemu math . Wynikiem jest math

Rys. 1 Instancja problemu math otrzymana z instancji math math math problemu math . Wynikiem jest math

Po chwili namysłu nietrudno dostrzec tu podobieństwo do problemu math. Nie jest to przypadek; zachodzi bowiem math. Przeprowadzimy tylko redukcję math, redukcja w drugą stronę jest właściwie taka sama. Wystarczy mianowicie dla każdej liczby math  wybrać punkt math  na prostej math dla każdej liczby math – punkt math a dla każdej liczby math – punkt math  patrz rysunek 1. Punkty math i  math są współliniowe, gdy

display-math

czyli dokładnie gdy math Stąd odpowiedź dla otrzymanej instancji problemu math jest pozytywna wtedy i tylko wtedy, gdy pozytywna jest odpowiedź dla odpowiadającej jej instancji problemu math, a to jest dokładnie to, co chcieliśmy uzyskać.

Problem math, jakkolwiek użyteczny, nie jest sam w sobie nadmiernie interesujący. Dużo ciekawszy jest podobny do niego następujący problem:

Problem (3PointsOnLine). Na płaszczyźnie danych jest math punktów. Czy istnieje prosta przechodząca przez jakieś trzy spośród tych punktów?

Ten problem także jest math-trudny; tym razem redukcję przeprowadzimy wprost z problemu math. Niech math będzie instancją problemu math. Dla każdej liczby math rysujemy na płaszczyźnie punkt math Zbadajmy, kiedy trzy różne tak otrzymane punkty math i  math są współliniowe:

pict

Okazuje się zatem, że punkty math i  math są współliniowe wtedy i tylko wtedy, gdy liczby math stanowią rozwiązanie problemu math. W ten sposób otrzymujemy żądaną redukcję problemu math do problemu math, pod warunkiem, że w tym pierwszym problemie interesują nas tylko trójki różnych liczb. To jednak możemy zapewnić (patrz zad. 2).

Wytrawny znawca geometrii natychmiast zauważy, że math-trudność problemu math implikuje bezpośrednio math-trudność dualnego problemu:

Problem (dualny 3PointsOnLine). Na płaszczyźnie danych jest math prostych. Czy któreś trzy proste przecinają się w jednym punkcie?

Zadanie 4. Określmy przekształcenie geometryczne math które punktowi math przyporządkowuje prostą math a prostej math przyporządkowuje punkt math Udowodnij, że punkt math leży na prostej math wtedy i tylko wtedy, gdy prosta math przechodzi przez punkt math (Więcej na temat tej dualności Czytelnik znajdzie w numerze 8/2013 Delty.)

Wróćmy teraz do problemu math. Skoro reklamowaliśmy go jako przydatne narzędzie w geometrii, to najwyższy czas, aby podać kilka jego zastosowań. Wykazaliśmy już, że jest to problem math-trudny. Jeśli zatem pokażemy redukcję z tego problemu do jakiegoś innego problemu geometrycznego działającą w czasie math to w ten sposób wykażemy, że ów drugi problem również jest math-trudny. Pierwszym problemem z tej serii, który weźmiemy pod lupę, jest:

Problem (Separator). Na płaszczyźnie danych jest math odcinków. Czy istnieje prosta nieprzecinająca żadnego z nich, dzieląca zbiór tych odcinków na dwa niepuste podzbiory? Jeśli chcemy, możemy założyć, że podane odcinki są parami rozłączne.

obrazek

Rys. 2 Redukcja instancji problemu math z rysunku 1 do instancji problemu math.

Rys. 2 Redukcja instancji problemu math z rysunku 1 do instancji problemu math.

Sprowadzimy problem math do problemu math. Tym razem redukcja będzie działać w czasie math  gdyż wymagać będzie sortowania. Posortujemy punkty na każdej z prostych poziomych i połączymy pary kolejnych punktów odcinkami w taki sposób, żeby między każdymi dwoma kolejnymi odcinkami występował bardzo mały odstęp, o długości równej math Widzimy już, że przy tej konstrukcji prosta rozdzielająca zbiór odcinków, przechodząca przez trzy odstępy, odpowiada trójce punktów współliniowych należących do różnych prostych poziomych. Należy jeszcze zadbać o wyeliminowanie poziomych prostych rozdzielających. Wystarczy w tym celu umieścić dwa pionowe odcinki po bokach konstrukcji i ustawić je „na zakładkę” z odcinkami poziomymi, tak aby z kolei wyeliminować trywialne proste rozdzielające pionowe (Rys. 2). W ten sposób wykazaliśmy, że math.

Zadanie 5. Jak dobrać math w opisanej redukcji?

Kolejny przykład. Okazuje się, że problem math możemy zredukować do następującego, całkiem naturalnego i mającego liczne zastosowania praktyczne problemu:

Problem (PlanarMotionPlanning). Na płaszczyźnie danych jest math odcinków-przeszkód i jeden odcinek reprezentujący robota. Czy robot może się przedostać z zadanej pozycji początkowej do zadanej pozycji końcowej, przemieszczając się jedynie za pomocą ciągłych przesunięć i obrotów bez dotykania żadnej z przeszkód? Znów, jeśli chcemy, możemy założyć, że odcinki-przeszkody są parami rozłączne.

Redukcja jest tutaj podobna jak poprzednio. Przeszkodami będą odcinki poziome z wcześniejszej redukcji. Robota umieścimy poniżej całej konstrukcji, a jego celem będzie przedostanie się powyżej konstrukcji. Sam robot będzie na tyle długi, żeby nie mógł przedostać się na drugą stronę inaczej niż tylko przez trzy odstępy naraz. Należy jeszcze zadbać, aby robot nie mógł ominąć całej konstrukcji bokiem. W tym celu trzeba poniżej i powyżej konstrukcji zbudować „klatki” uniemożliwiające ucieczkę robota do „nieskończoności”. W ten sposób otrzymujemy wniosek, że math.

Zadanie 6. Jak zbudować klatki w opisanej redukcji? (Narysuj!)

To, co przedstawiliśmy do tej pory, to tylko niewielka grupa znanych problemów math-trudnych. Dla Niestrudzonych Czytelników mamy w zanadrzu jeszcze kilka innych takich problemów – tym razem już dowody pominiemy. Zacznijmy od jeszcze jednego pomocniczego problemu math-trudnego:

Problem (SegmentsContainPoints). Na prostej danych jest math punktów i  math  parami rozłącznych przedziałów. Czy istnieje wektor, o który można przesunąć wszystkie zadane punkty, tak aby każdy z nich znalazł się w jakimś przedziale?

Problem ten można zredukować do każdego z następujących zagadnień typu math:

Problem (PolygonContainment). Na płaszczyźnie dane są dwa wielokąty, odpowiednio o  math i  math  bokach. Mamy do dyspozycji pewien zestaw izometrii płaszczyzny. Czy za pomocą tych izometrii możemy pierwszy z tych wielokątów umieścić wewnątrz drugiego, przy założeniu, że:

(a)
wielokąty są dowolne i dopuszczamy dowolne przesunięcia;
(b)
wielokąty są wypukłe i dopuszczamy dowolne obroty;
(c)
wielokąty są wypukłe i dopuszczamy dowolne obroty i przesunięcia?

O wersji tego problemu, w której wielokąty są wypukłe i dopuszczamy dowolne przesunięcia (ale nie obroty), można przeczytać w artykule Tomasza Idziaszka „Zawieramy wielokąty”.

Zadanie 7. Opisz redukcję problemu math do problemu math w wersji (a). Redukcja powinna działać w czasie math  Wskazówka: szukane wielokąty mają kształt grzebieni.

A już na sam koniec kilka problemów math-trudnych typu math:

(a)
Czy dany zbiór math dwustronnie nieskończonych pasków (o różnych szerokościach i kierunkach) pokrywa zadany prostokąt?
(b)
Czy dany zbiór math trójkątów pokrywa zadany trójkąt?
(c)
Czy pole sumy danych math trójkątów jest mniejsze od ustalonej liczby?
(d)
Czy suma danych math trójkątów zawiera jakąś dziurę?
(e)
Danych jest math półpłaszczyzn. Czy istnieje punkt płaszczyzny pokryty przez co najmniej math spośród tych półpłaszczyzn?

Zadanie 8. Opisz redukcję wariantu (a) problemu math do wariantu (b).


Do czytania

Redukcje dotyczące problemów math i  math są opisane w pracy: G. Barequet, S. Har-Peled, Polygon-containment and translational min-Hausdorff-distance between segment sets are math -hard, SODA 1999.

Redukcje do problemów typu math można znaleźć w podstawowej (tj. pionierskiej) pracy dotyczącej math-trudności: A. Gajentaan, M.H. Overmars, On a class of math  problems in computational geometry, Comp. Geom. 5(3), 1995.