Problemy 3sum-trudne w geometrii

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
?) 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
czy też w czasie
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
złożony z
liczb całkowitych. Czy istnieją takie
liczby
że
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
można zredukować
do problemu
w czasie
jeśli dowolną instancję
(czyli dane wejściowe) problemu
o rozmiarze
można
przekształcić w czasie
w stałą liczbę instancji problemu
o rozmiarze
tak, żeby na podstawie odpowiedzi
dla wyznaczonych instancji problemu
można było udzielić
odpowiedzi dla rozważanej instancji problemu
Będziemy wówczas pisali, że
co oznacza tyle, że problem
jest co najmniej tak trudny jak problem
gdyż jeśli umiemy
w czasie
rozwiązać problem
to umiemy w takim
samym czasie rozwiązać problem
Jeśli
oraz
to będziemy pisali, że
Problemem, który będziemy redukować do innych zagadnień, jest
wspomniany już problem
. Przez wiele lat znany był algorytm
rozwiązujący ten problem w czasie
(patrz zadanie 1 na marginesie)
i uważano, że nie da się go rozwiązać w złożoności mniejszej niż
Wprowadzono też klasę problemów
-trudnych, czyli
problemów, do których można zredukować problem
w czasie
Od 2005 roku wiadomo jednak, że problem
można
rozwiązać troszeczkę szybciej, a mianowicie w czasie

Mimo tego usprawnienia wciąż nie widać nadziei na znalezienie algorytmu
rozwiązującego ten problem w czasie istotnie lepszym niż
Zadanie 2. W problemie
elementy
mogą się powtarzać. Nie ma to jednak większego
znaczenia, gdyż w czasie
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
,
który jest równoważny z problemem
(tj.
):
Problem. Dane są trzy zbiory liczb całkowitych
zawierające
łącznie
elementów. Czy istnieją liczby
i
takie że
Zadanie 3. Udowodnij, że
, 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
– podstawowy problem
-trudny w geometrii,
służący jako narzędzie do dowodzenia
-trudności innych
problemów. Jest on określony następująco:
Problem. Danych jest
punktów kratowych
położonych na prostych
i
Czy istnieje prosta
inna niż pozioma przechodząca przez jakieś trzy spośród tych punktów?

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

czyli dokładnie gdy
Stąd odpowiedź dla otrzymanej instancji
problemu
jest pozytywna wtedy i tylko wtedy, gdy pozytywna
jest odpowiedź dla odpowiadającej jej instancji problemu
, a to jest
dokładnie to, co chcieliśmy uzyskać.
Problem
, 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
punktów. Czy istnieje prosta przechodząca przez jakieś trzy
spośród tych punktów?
Ten problem także jest
-trudny; tym razem redukcję
przeprowadzimy wprost z problemu
. Niech
będzie
instancją problemu
. Dla każdej liczby
rysujemy na
płaszczyźnie punkt
Zbadajmy, kiedy trzy różne tak otrzymane
punkty
i
są współliniowe:

Okazuje się zatem, że punkty
i
są
współliniowe wtedy i tylko wtedy, gdy liczby
stanowią rozwiązanie
problemu
. W ten sposób otrzymujemy żądaną redukcję problemu
do problemu
, 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
-trudność
problemu
implikuje bezpośrednio
-trudność
dualnego problemu:
Problem (dualny 3PointsOnLine). Na płaszczyźnie danych jest
prostych. Czy któreś trzy proste przecinają się w jednym punkcie?
Zadanie 4. Określmy przekształcenie geometryczne
które
punktowi
przyporządkowuje prostą
a prostej
przyporządkowuje
punkt
Udowodnij, że punkt
leży na
prostej
wtedy i tylko wtedy, gdy prosta
przechodzi
przez punkt
(Więcej na temat tej dualności Czytelnik znajdzie
w numerze 8/2013 Delty.)
Wróćmy teraz do problemu
. 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
-trudny. Jeśli
zatem pokażemy redukcję z tego problemu do jakiegoś innego problemu
geometrycznego działającą w czasie
to w ten sposób wykażemy,
że ów drugi problem również jest
-trudny. Pierwszym
problemem z tej serii, który weźmiemy pod lupę, jest:
Problem (Separator). Na płaszczyźnie danych jest
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.

Rys. 2 Redukcja instancji problemu
z rysunku 1 do instancji problemu
.
Sprowadzimy problem
do problemu
. Tym
razem redukcja będzie działać w czasie
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
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
.
Kolejny przykład. Okazuje się, że problem
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
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
.
To, co przedstawiliśmy do tej pory, to tylko niewielka grupa znanych
problemów
-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
-trudnego:
Problem (SegmentsContainPoints). Na prostej danych jest
punktów i
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
:
Problem (PolygonContainment). Na płaszczyźnie dane są dwa wielokąty,
odpowiednio o
i
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
do
problemu
w wersji (a). Redukcja powinna
działać w czasie
Wskazówka: szukane wielokąty mają
kształt grzebieni.
A już na sam koniec kilka problemów
-trudnych typu
:
- (a)
- Czy dany zbiór
dwustronnie nieskończonych pasków (o różnych szerokościach i kierunkach) pokrywa zadany prostokąt?
- (b)
- Czy dany zbiór
trójkątów pokrywa zadany trójkąt?
- (c)
- Czy pole sumy danych
trójkątów jest mniejsze od ustalonej liczby?
- (d)
- Czy suma danych
trójkątów zawiera jakąś dziurę?
- (e)
- Danych jest
półpłaszczyzn. Czy istnieje punkt płaszczyzny pokryty przez co najmniej
spośród tych półpłaszczyzn?