Myślę, że jest ich wiele. stałe chowające się tam. Możesz udowodnić, że . Wystarczy wymienić wszystkie możliwe niedeterministyczne domysły algorytmu i uruchomić algorytm z tymi domysłami. Zaakceptuj, jeśli jedna z domysłów prowadzi do stanu akceptacji. NTIME(f(n))⊆DSPACE(2⋅f(n))
Igor Shinkar,
1
Dlaczego nie uczynić tego odpowiedzią?
Yuval Filmus,
@IgorShinkar Istnieją różne wyniki, takie jak twierdzenie o liniowym przyspieszeniu i twierdzenie o kompresji taśmy, które mówią, że można pozbyć się tych stałych w „większości” okoliczności. liniowe mówi, że dla dowolnego ; kompresja taśmy mówi, że , znowu dla każdego . DTIME(f(n))⊆DTIME(ϵf(n)+n+2)ϵ>0DSPACE(f(n))⊆DSPACE(ϵf(n)+O(1))ϵ>0
David Richerby
Odpowiedzi:
4
Oto rozszerzona wersja komentarza Igora Shinkara. Najprostszym sposobem na symulację niedeterministycznej maszyny działającej w czasie i przestrzeni użycie przestrzeni . Wymieniamy wszystkie możliwe rzuty monetami, symulując oryginalną maszynę na każdym z nich; wymaga to miejsca do przechowywania rzutów monet oraz miejsca do symulacji rzeczywistej maszyny. Istnieje tutaj niewielka trudność: kiedy rzuty monetą są „odczytywane” przez (oryginalną) maszynę, musimy jakoś zaznaczyć, gdzie jesteśmy w sekwencji rzutów monet; możemy użyć dodatkowego bitu na rzut monetą. Prawdopodobnie można to jeszcze bardziej zoptymalizować.f(n)s(n)≤f(n)s(n)+2f(n)+O(1)f(n)s(n)
Jeśli będziemy ostrożni, możemy być w stanie uzyskać coś jeszcze lepszego, ponieważ w każdym uruchomieniu programu łączna liczba rzutów monetą i całkowita użyta przestrzeń sumują się co najwyżej . Podejrzewam, że można uruchomić symulację w przestrzeni . Być może będziemy musieli do tego założyć coś takiego jak .f(n)(1+o(1))f(n)f(n)=Ω(logn)
Jak wspomina Igor, zwykle klasy ograniczone do zasobów są definiowane tylko „do dużego O”, tak że wynik, który używa spacji , wciąż znajduje się w .O(f(n))DSPACE(f(n))
Odpowiedzi:
Oto rozszerzona wersja komentarza Igora Shinkara. Najprostszym sposobem na symulację niedeterministycznej maszyny działającej w czasie i przestrzeni użycie przestrzeni . Wymieniamy wszystkie możliwe rzuty monetami, symulując oryginalną maszynę na każdym z nich; wymaga to miejsca do przechowywania rzutów monet oraz miejsca do symulacji rzeczywistej maszyny. Istnieje tutaj niewielka trudność: kiedy rzuty monetą są „odczytywane” przez (oryginalną) maszynę, musimy jakoś zaznaczyć, gdzie jesteśmy w sekwencji rzutów monet; możemy użyć dodatkowego bitu na rzut monetą. Prawdopodobnie można to jeszcze bardziej zoptymalizować.f(n) s(n)≤f(n) s(n)+2f(n)+O(1) f(n) s(n)
Jeśli będziemy ostrożni, możemy być w stanie uzyskać coś jeszcze lepszego, ponieważ w każdym uruchomieniu programu łączna liczba rzutów monetą i całkowita użyta przestrzeń sumują się co najwyżej . Podejrzewam, że można uruchomić symulację w przestrzeni . Być może będziemy musieli do tego założyć coś takiego jak .f(n) (1+o(1))f(n) f(n)=Ω(logn)
Jak wspomina Igor, zwykle klasy ograniczone do zasobów są definiowane tylko „do dużego O”, tak że wynik, który używa spacji , wciąż znajduje się w .O(f(n)) DSPACE(f(n))
źródło