Dlaczego ta funkcja jest obliczalna w czasie ?

10

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 . "f:NNf(1)=2f(i+1)=2f(i)1.2nO(n1.5)inf(i)f(i+1)

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.iO(n1.5)ff(1),f(2),f(3)f(j)f(j)ninx2x1.2

Zapomniałem wspomnieć: Należy pamiętać, że jesteśmy w kontekście niedeterministycznym. Stwierdzono więc, że f można obliczać w O(n1.5) 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.iO(n1.5)

użytkownik1494080
źródło
1
To wygląda na niedoterministyczny dowód twierdzenia o hierarchii czasu w Arora i Barak, prawda? Jeśli tak, zakładam, że rolę odgrywa tu niedeterminizm.
G. Bach
Masz rację. Przepraszam za to, że powinienem wspomnieć o niedeterministycznym kontekście. Czy możesz wyjaśnić bardziej szczegółowo, w jaki sposób niedeterminizm pomaga nam pokazać granicę O (n ^ 1,5)?
user1494080

Odpowiedzi:

4

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|xlog2x+1x>02xO(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)nf(i)<nO(|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 .2xO(xlogx)O(n1.2logn)=O(n1.5)2x[x]1[[x]][x]x[[x]]0,1[[x]]0[[x1]]O(|x|)=O(logx)

Yuval Filmus
źródło
Perfekcyjnie, dzięki! Jeszcze jedno pytanie: czy nie musimy argumentować, że | f (i) | rośnie szybciej niż geometrycznie niż że f (i) rośnie szybciej niż geometrycznie?
user1494080
Ponieważ , to to samo, ale masz rację. To, czego tak naprawdę chcemy, to . |f(i+1)|=f(i)1.2ji|f(j)|=O(|f(i)|)
Yuval Filmus