Czytałem pytanie na Stack Overflow, pytając, czy to NP- twarde, aby wymienić wszystkie proste cykle na wykresie zawierającym określony węzeł i przyszło mi do głowy, że nie mogę wymyślić żadnej istniejącej klasy złożoności, która byłaby odpowiednia dla mówiąc o problemach z formularzem „wymień wszystkie rozwiązania tego problemu”. Klasa NP w pewnym sensie składa się z problemów, które pytają, czy istnieje co najmniej jedno rozwiązanie, klasa FNP prosi o utworzenie jednego rozwiązania, a klasa #P prosi o policzenie, ile jest rozwiązań, ale żadne z nich nie dotyczy złożoności wyczerpującego wyliczenia wszystkich możliwych rozwiązań.
Czy istnieje klasa złożoności do opisywania problemów, które mają postać „biorąc pod uwagę predykat obliczany w czasie wielomianowym i ciąg , wylicz wszystkie dla których jest prawdziwe, z zastrzeżeniem [wstaw niektóre odpowiednie ograniczenia złożoności]? ” Rozumiem, że ustalenie ograniczeń może być trudne, biorąc pod uwagę, że liczba rozwiązań może być wykładniczo większa niż wielkość wejściowego , choć nie wydaje się to niemożliwe.
źródło
Odpowiedzi:
Pojęcie, którego szukasz, nazywa się złożonością wyliczania , czyli badaniem złożoności obliczeniowej wyliczania (wymieniania) wszystkich rozwiązań problemu (lub członków języka / zestawu). Algorytmy wyliczania można modelować jako proces dwuetapowy: etap wstępnego obliczania i faza wyliczania z opóźnieniem . Oba te etapy mają swoją złożoność czasu i przestrzeni (być może również entropię). W ogólnym duchu złożoności często występują między nimi kompromisy.
Etap wstępnego obliczenia wykonuje pewną pracę, która jest konieczna przed wyliczeniem pierwszego rozwiązania. Może to obejmować znalezienie samego rozwiązania lub zainicjowanie jakiejś dużej struktury danych, która zmniejszy ogólne opóźnienie między poszczególnymi rozwiązaniami.
Opóźnienie to koszty związane z zasobami do obliczenia niezbędnego pomiędzy dowolnymi wyliczonych rozwiązań. Innymi słowy, opóźnienie jest miarą przestrzeni i czasu potrzebnego do wytworzenia rozwiązania po i t h . Mówi się, że problemy, których rozwiązania wymagające czasu O ( 1 ) dla każdego wyliczenia mają stałe opóźnienie. Wymóg O ( s O l a ( n ) ), czas mówi się, że wielomian opóźnienia.i + 1t godz jat godz O ( 1 ) O ( p o l y( n ) )
W przypadku problemu z wyliczeniem, o którym konkretnie wspomniałeś w swoim pytaniu, powinieneś przyjrzeć się klasie i jej pokrewnemu rodzeństwu w sekcji 2.1 „Wyliczenia: algorytmy i złożoność” Johannesa Schmidta (Link na dole).miN.UM.N.P.
Dlaczego zależy nam na czasie i opóźnieniu wstępnego obliczenia?
Opóźnienie jest bardzo kluczowe dla zrozumienia prawdziwych zawiłości problemów z wyliczaniem. Wyliczenie elementów (do rozmiaru n ) i { → x : ϕ ( → x ) }, gdzie ϕ ( → x ) jest wzorem boolowskim (tj. SAT), zajmuje czas wykładniczy. Jednak wyliczanie przez Σ ∗Σ∗ n { x⃗ : ϕ ( x⃗ ) } ϕ ( x⃗ ) Σ ∗ wymaga tylko ciągłego opóźnienia, ponieważ możesz po prostu przejść przez elementy w określonej kolejności. Z tego, co wiemy, opóźnienie wyliczenia rozwiązań dla instancji 3SAT może być wykładnicze. Naszym zadaniem jako teoretyków złożoności jest uchwycenie, dlaczego ten drugi problem jest zasadniczo trudniejszy (bardziej złożony) niż poprzedni. Opóźnienie robi całkiem niezłą robotę, pokazując tę różnicę.
Podobnie musimy również wiedzieć, ile wykonano wstępnego obliczenia. Możemy zmniejszyć opóźnienie dowolnego problemu z wyliczaniem do stałego czasu i przestrzeni, wstępnie obliczając wszystkie rozwiązania i przechowując je na liście, która zostanie wyliczona w późniejszym czasie. Wyzwanie polega na znalezieniu najlepszej równowagi między tymi dwoma zasobami.
Kolejność wyliczania elementów może również wpływać na złożoność. Wymaganie zwrotu wyników w określonej kolejności sortowania może wymagać od nas wykonania dodatkowych obliczeń w obu etapach. Chociaż z pewnością badane są również sytuacje, w których wystarcza dowolna kolejność (o ile każdy wyliczony element jest unikalny).
O ile mi wiadomo, klasy te zwykle nie mają zwięzłych etykiet (podobnych do i N P ). Nie możemy oczekiwać, że będziemy w stanie to zrobić, ponieważ klasy złożoności wyliczeń żonglują wokół 3 lub więcej zasobów (obliczenia wstępne / całkowity czas, przestrzeń, opóźnienie i entropia). Po prostu jest zbyt wiele kombinacji granic zasobów, aby można było podać specjalne nazwy. Nie czyni to tych klas mniej interesującymi, a także nie powstrzymuje badaczy przed próbowaniem.P. N.P.
Zasoby
Ta ankieta (naprawdę próba sformalizowania) powinna pomóc Ci zacząć. Dowodzi to również pewnych podstawowych twierdzeń hierarchicznych.
Wyliczenie: algorytmy i złożoność (Johannes Schmidt, 2009)
https://www.thi.uni-hannover.de/fileadmin/forschung/arbeiten/schmidt-da.pdf
Aby uzyskać wyliczenie wyników w złożoności wyliczenia, sprawdź tę kompilację, której kuratorem jest Kunihiro Wasa. Ponieważ jest on podzielony na kategorie według rodzaju problemu, można łatwo znaleźć wiele artykułów poświęconych wyliczaniu cykli graficznych. Powinna być łatwa modyfikacja algorytmów, aby uwzględniały tylko cykle z danym węzłem.
http://www-ikn.ist.hokudai.ac.jp/~wasa/enumeration_complexity.html
źródło