Złożoność obliczeniowa/Wykałd 4: Redukcje i zupełność: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Pitab (dyskusja | edycje)
Pitab (dyskusja | edycje)
Nie podano opisu zmian
Linia 187: Linia 187:
Pierwsze zdanie nie jest prawdziwe; zauważyliśmy wcześniej, że problemy z <math>P</math> są redukowalne w sensie Turinga do każdego problemu - w szczególności do problemu reprezentowanego przez język pusty. Łatwo zauważyć, że nietrywialnych - to znaczy nie reprezentowanych przez język pusty ani pełny - problemów z klasy <math>P</math> nie da się zredukować w sensie transformacji wielomianowej Karpa do problemu reprezentowanego przez język pusty; maszyna akceptująca ten język nigdy nie da odpowiedzi 'tak'.
Pierwsze zdanie nie jest prawdziwe; zauważyliśmy wcześniej, że problemy z <math>P</math> są redukowalne w sensie Turinga do każdego problemu - w szczególności do problemu reprezentowanego przez język pusty. Łatwo zauważyć, że nietrywialnych - to znaczy nie reprezentowanych przez język pusty ani pełny - problemów z klasy <math>P</math> nie da się zredukować w sensie transformacji wielomianowej Karpa do problemu reprezentowanego przez język pusty; maszyna akceptująca ten język nigdy nie da odpowiedzi 'tak'.


Widać, że powyższy dowód stosuje pewien "kruczek" w definicji redukcji; jeżeli
Widać, że powyższy dowód stosuje pewien "kruczek" w definicji redukcji; jeżeli założymy, że język <math>L_2</math> nie może być pusty ani pełny, to prawdziwość pierwszego zdania będzie problemem otwartym.
założymy, że język <math>L_2</math> nie może być pusty ani pełny, to prawdziwość pierwszego
zdania będzie problemem otwartym.
</div></div>
</div></div>

Wersja z 13:03, 6 sie 2006

Redukcje i zupełność

W poprzednim module przedstawione zostały podstawowe klasy złożoności dla problemów, jak również zależności między nimi. W tym rozdziale poznamy narzędzie bardzo pomocne przy określaniu przynależności problemów do zadanej klasy złożoności - redukcje.

Redukcje

Definicja

Niech będzie pewną rodziną funkcji o sygnaturze

 {0,1}{0,1}

domkniętą na składanie i zawierającą identyczność. Niech L1 i L2 będą językami nad alfabetem {0,1} (czyli inaczej mówiąc zakodowanymi binarnie problemami decyzyjnymi). Mówimy, że problem L1 jest redukowalny do problemu L2 w sensie rodziny i zapisujemy

 L1L2

wtedy i tylko wtedy, gdy

 fw{0,1}wL1f(w)L2

Intuicyjnie problem L1 jest w pewnym sensie co najwyżej tak trudny jak problem L2 - jeżeli znamy rozwiązanie problemu L2 oraz odpowiednią funkcję (zwaną redukcją lub transformacją), to znamy również rozwiązanie problemu L1. Warto zauważyć, że relacja jest preporządkiem, to znaczy jest zwrotna (ze względu na obecność identyczności) i przechodnia (ze względu na domkniętość rodziny na składanie).

Przedstawmy teraz najczęściej stosowane rodziny redukcji.

Redukcje wielomianowe

Rodzina redukcji wielomianowych (Karpa) to rodzina funkcji {0,1}{0,1} obliczalnych nadeterministycznej maszynie Turinga w czasie wielomianowym. Redukowalność w sensie rodziny redukcji wielomianowych najczęściej po prostu nazywa się redukowalnością wielomianową.

Klasycznym przykładem redukowalnosci wielomianowej jest redukowalność problemu maksymalnego skojarzenia w grafie dwudzielnym do problemu maksymalnego przepływu w grafie skierowanym.

ZO-4-1. Przekształcenie grafu dwudzielnego w sieć przepływową.

Redukcje wielomianowe mają ważną własność: Jeżeli problem L1 jest redukowalny wielomianowo do problemu L2 oraz L2 należy do klasy P, to L1 również należy do klasy P. Aby uzasadnić tą własność wystarczy skonstruować maszynę, która najpierw przekształci instancję problemu L1 do instancji problemu L2 (uczyni to w czasie wielomianowym, bo L1 jest wielomianowo redukowalne do L2), po czym w czasie wielomianowym da odpowiedź dla instancji problemu L2.

Ćwiczenie 1

Załóżmy, że L1 jest wielomianowo redukowalne do L2 oraz L2 należy do klasy NP. Pokaż, że L1 również należy do klasy NP.

Rozwiązanie

Redukcje logarytmiczne

Drugą ciekawą rodziną redukcji jest rodzina redukcji logarytmicznych. Aby zdefiniować tą rodzinę zmodyfikujemy definicję maszyny Turinga - otóż wyznaczamy na niej dwie specjalne taśmy - wejściową (tylko do odczytu, tak jak przy maszynie off-line) i wyjściową. Po zapisie na taśmę wyjściową głowica przesuwa się zawsze w tym samym kierunku, co uniemożliwia odczyt poprzednio zapisanych symboli.

Powróćmy teraz do redukcji. Redukcja logarytmiczna jest funkcją obliczalną na deterministycznej maszynie Turinga z użyciem logarytmicznej ilości pamięci na taśmie roboczej. Zauważmy, że nie nakładamy żadnych ograniczeń na wielkość słowa wyjściowego - najczęśniej jego wielkość będzie wielomianowo zależna od wielkości słowa wejściowego. Intuicyjnie transformacja logarytmiczna pozwala przechowywać na taśmie roboczej stałą liczbę wskaźników do komórek wejściowych (lub innych obiektów o podobnej wielkości).

Ćwiczenie 2

Czy problem maksymalnego skojarzenia w grafie dwudzielnym jest redukowalny do problemu maksymalnego przepływu w sensie rodziny transformacji logarytmicznych?

Wskazówka
Rozwiązanie

Ćwiczenie 3

Czy istnienie redukcji logarytmicznej z problemu L1 do problemu L2 implikuje istnienie redukcji wielomianowej z L1 do L2? Odpowiedź uzasadnij.

Wskazówka
Rozwiązanie

Warto się zastanowić czy prawdziwa jest następująca hipoteza:

Szablon:Hipoteza

Ta niewątpliwie cenna (o ile prawdziwa) hipoteza nie jest jednak tak oczywista jak poprzednio pokazywane analogiczne fakty dla transformacji wielomianowej i klas P oraz NP. Problem przy "składaniu" dwóch maszyn - transformacji oraz maszyny rozwiązującej L2 - tkwi w tym, że być może nie będziemy w stanie zapisac wyjścia transformacji (o potencjalnie wielomianowej wielkości) na taśmie roboczej.

Posłużymy się tutaj następującym trikiem: Uruchomimy maszynę rozwiązującą problem L2; za każdym razem, gdy maszyna ta będzie chciała odwołać się do któregoś - dla ustalenia uwagi i-tego - bitu wejścia, na osobnej taśmie uruchomimy maszynę implementującą redukcję z L1 do L2. Maszyna ta nie będzie jednak wypisywać kolejnych symboli na wyjście, tylko inkrementować specjalnie utworzony licznik operacji wyjścia; w momencie, gdy wykonana zostanie i-ta operacja wyjścia, maszyna powróci do wykonywania programu rozwiązującego problem L2, wykorzystująć symbol, który miał zostać wypisany na wyjście przez maszynę transformującą. Takie postępowanie wydaje się mało wydajne - tym niemniej na taśmach roboczych nigdy nie znajduje się większa niż logarytmiczna liczba symboli - a zatem otrzymujemy algorytm dla problemu L1, wykorzystujący logarytmiczną ilośc symboli. Analogiczny argument można zastosować do pokazania, że rodzina transformacji logarytmicznych jest domknięta na składanie.

Transformacja wielomianowa w sensie Turinga

Definiowana tutaj transformacja będzie miała trochę inny charakter od dwóch poprzednich - w szczególności formalnie nie będzie ona redukcją. Do jej zdefiniowania będziemy potrzebować pojęcia maszyny z wyrocznią.

Definicja

Maszyna z wyrocznią Q{0,1} jest wielotaśmową maszyną Turinga, z jedną wyróżnioną taśmą i trzema wyróżnionymi stanami {qa,qb,qc}. Zachowanie maszyny różni się od zachowania zwykłej maszyny Turinga w następujący sposób: Przejście maszyny do stanu qa jest traktowane jako odwołanie do wyroczni Q. Jeżeli słowo aktualnie zapisane na wyróżnionej taśmie należy do języka Q, to maszyna przechodzi do stanu qb; w przeciwnym razie przechodzi do stanu qc. Odwołanie do wyroczni wliczane jest do czasu działania maszyny jako jedno przejście.

Mówiąc nieformalnie maszyna może w trakcie działania wielokrotnie prosić wyrocznię o rozwiązanie problemu Q.

Definicja

Niech L1 i L2 będą językami nad alfabetem {0,1}. Mówimy, że L1 transformuje się do L2 w sensie wielomianowej transformacji Turinga wtedy i tylko wtedy gdy istnieje maszyna Turinga z wyrocznią L2 rozwiązująca L1 w czasie wielomianowym.

Transformacja Turinga intuicyjnie odpowiada stosowaniu podprogramów - jeżeli znamy rozwiązanie problemu L2 to stosujemy go jako podprocedurę przy rozwiązywaniu problemu L1.

Ćwiczenie 4

Niech L1 i L2 będą językami nad alfabetem {0,1} oraz niech L1 transformuje się do L2 w sensie transformacji wielomianowej Turinga. Które z poniższych zdań jest prawdziwe:

  • L1PL2P,
  • L2PL1P?
Rozwiązanie

Łatwo zauważyć, że transformacja wielomianowa w sensie Turinga wyznacza preporządek na językach zawartych w {0,1}. Oznaczamy ją symbolem T.

Ćwiczenie 5

Które z poniższych zdań jest prawdziwe:

  • L1TL2L1PL2,
  • L1PL2L1TL2?
Rozwiązanie