My podręcznik mówi „określamy funkcji następująco: i . Zauważ, że biorąc pod uwagę , możemy łatwo znaleźć w czasie liczbę taką, że jest umieszczone pomiędzy i . "
Jak mogę się przekonać, że tak naprawdę możemy łatwo znaleźć w czasie ? Ponieważ jest zdefiniowane rekurencyjnie, myślę, że musimy obliczyć aż . Aby dowiedzieć się, ile czasu zajmują te obliczenia, myślę, że musimy znaleźć odpowiednią górną granicę dla zależną od i musimy znaleźć górną granicę na czas wykonania funkcji . Na koniec mamy nadzieję, że pokażemy cytowaną propozycję. Niestety nie widzę ani jednej, ani drugiej.
Zapomniałem wspomnieć: Należy pamiętać, że jesteśmy w kontekście niedeterministycznym. Stwierdzono więc, że można obliczać w przez niedeterministyczną maszynę Turinga.
Ponieważ sporo osób już przeczytało to pytanie, a niektóre z nich uważają je za przydatne i interesujące, ale jak dotąd nikt nie odpowiedział, chcę podać więcej informacji na temat kontekstu: cytowane twierdzenie jest integralną częścią dowodu twierdzenie o niedeterministycznej hierarchii czasu. Dowód (wraz z roszczeniem) można znaleźć np. W książce Arory i Baraka , ale znalazłem też sporo innych zasobów w sieci, które przedstawiają ten sam dowód. Każde z nich nazywa roszczenie łatwym lub trywialnym i nie wyjaśnia, jak znaleźć w czasie . Więc albo wszystkie te zasoby, które właśnie skopiowałem z Arory i Baraka, albo roszczenie nie jest wcale takie trudne.
źródło
Odpowiedzi:
Oznacz jakodługość liczby , tj. (dla ). Obliczenie wymaga czasu w modelu RAM, a zatem obliczenie z zajmuje czas . Ponieważ rośnie szybciej niż geometrycznie, całkowity czas na obliczenie wynosi . Jak zauważyłeś, musisz to robić, aż , co oznacza, że . Dlatego całkowity czas działania wynosi|x| x ⌊log2x⌋+1 x>0 2x O(x) f(i+1) f(i) O(f(i)1.2)=O(|f(i+1)|) f(i) f(i+1) O(|f(i+1)|) f(i+1)≥n f(i)<n O(|f(i+1)|)=O(f(i)1.2)=O(n1.2) .
W modelu maszyny Turinga z pojedynczą taśmą obliczenie zajmuje czas , a zatem całkowity czas pracy wynosi . Algorytm obliczania zastępuje przez (tutaj to binarna reprezentacja , a to binarna reprezentacja przy użyciu różnych cyfr ), a następnie wielokrotnie uruchamia transformację , co zajmuje czas .2x O(xlogx) O(n1.2logn)=O(n1.5) 2x [x] 1[[x]] [x] x [[x]] 0′,1′ [[x]]⟶0[[x−1]] O(|x|)=O(logx)
źródło