EDYCJA: Argument, na który odpowiedziałem, nie był zły, ale był nieco mylący, ponieważ pokazał tylko, że górna granica musiała być ciasna dla jakiegoś (co jest tak naprawdę trywialne, ponieważ musi być ciasna, gdy a granica wynosi 1).nn=2
Oto bardziej precyzyjny argument. Pokazuje, że jeśli górna granica
jest luźna dla dowolnego konkretnego , to dla wszystkich wymagana liczba wywołań wyroczni wynosi .log2nn nO(1)
(Z pewnością nie jest to , więc górna granica nigdy nie jest luźna! Ale tak naprawdę nie udowadniam, że tutaj, a biorąc pod uwagę inną odpowiedź na problem, nie warto tego robić).O(1)
Rozważ problem obliczania maksymalnej wydajności :
Biorąc pod uwagę -tuple M_1 maszyn Turinga, oblicz maksymalną moc wyjściową (maszyn Turinga, które zatrzymają się, jeśli zostaną uruchomione na ). Jeśli żaden z nich się nie zatrzyma, zwróć 0.n(M1,…,Mn)ϵ
W zależności od liczby najgorszy przypadek wywołań wyroczni wymaganych do obliczenia tej funkcji jest taki sam, jak liczba wymagana do podjęcia decyzji, które danych maszyn ma się zatrzymać. (Jeśli wiem, które maszyny się zatrzymają, mogę łatwo obliczyć maksymalną moc wyjściową. I odwrotnie, jeśli chcę wiedzieć, które maszyny się zatrzymują, postępując zgodnie z konstrukcją w problemu, mogę konstruować maszyny
gdzie obsługuje wszystkie danych maszyn równolegle, a następnie zatrzymuje się i wyprowadza jeśli kiedykolwiek z nich się zatrzyma. Maksymalna wydajność powie mi liczbę, która się zatrzymała. Na tej podstawie mogę obliczyć który dokładnie się zatrzyma.)nn{M′i} (i=1,2,…,n)M′inii
Teraz niech będzie najmniejszą liczbą całkowitą (jeśli istnieje) taką, że następujące:n0n
Używając wywołań oracle, można obliczyć maksymalną wydajność danych maszyn. (To znaczy, górna granica nie jest ciasna dla .)C(n)=max{k∈Z:2k<n}nn
Wyraźnie , ponieważ . W rzeczywistości również, ponieważ , ale nie jest możliwe obliczenie maksymalnej wydajności danych maszyn (bez wywołań wyroczni). Teraz rozważ większe :n0>1C(1)=−1n0>2C(2)=02n
Twierdzenie: Jeśli jest skończone, to dla dowolnego można obliczyć maksymalną wydajność danych maszyn w wywołaniach oracle. n0nnC(n0)(Zauważ, że jeśli jest skończone, to .)n0C(n0)=O(1)
Dowód. . Udowadniamy to przez indukcję na . Przypadki bazowe są , które posiadają z definicji i .nn≤n0n0C
Niech będzie TM, która, biorąc pod uwagę dowolne maszyny Turinga , oblicza maksymalną moc wyjściową, używając tylko wywołań do wyroczni.Q0n0C(n0)
Napraw dowolne . Biorąc pod uwagę dowolne maszyn , oblicz maksymalną moc w następujący sposób.n>n0nM1,…,Mn
Skoncentruj się na pierwszych maszynach . Rozważ uruchomienie na tych komputerach . Zauważ, że wykonuje do wyroczni, i istnieje tylko możliwych odpowiedzi wyroczni na te wywołania. Zauważ, że z definicji . Niech oznacza tą możliwą odpowiedź. Dla każdego maszynę
która symuluje na tych komputerach w następujący sposób:M1,…,Mn0Q0n0Q0C(n0)n′=2C(n0)n′=2C(n0)<n0oiii=1,…,n′M′iQ0
TM (na wejściu ):M′iϵ
- Symuluj na maszynach , ale zamiast wywoływać wyrocznię, , że wyrocznia odpowiada zgodnie z .Q0n0(M1,…,Mn0)oi
- Ta symulacja może się nie zatrzymać (np. Jeśli nie jest tym, co rzeczywiście powróciłaby wyrocznia).oi
- Jeśli symulacja się zatrzyma, niech będzie maksymalnym wyjściem, które według zostanie podane.hiQ0
- Dovetail wszystkie maszyny . Jeśli jeden z nich kiedykolwiek wyprowadza , zatrzymaj i .n0(M1,…,Mn0)hihi
Teraz, w podanej sekwencji maszyn, zamień pierwsze maszyny na te maszyny . Zwraca wartość obliczoną przez rekurencję w tej sekwencji maszyn. (Zauważ, że wyrocznia nie jest wywoływana przed powtórzeniem, więc wyrocznia jest wywoływana dopiero po osiągnięciu przypadku podstawowego).nn0M1,…,Mn0n′<n0M′1,…,M′n′n−(n0−n′)<n
Oto dlaczego to obliczenie jest poprawne. Dla , że jest `` poprawną '' odpowiedzią wyroczni na zapytania, zatrzyma się i da poprawną maksymalną wydajność oryginalnych maszyn . Zatem maksymalna wydajność maszyn
to co najmniej maksymalna wydajność maszyn . Z drugiej strony, w kroku 4 żaden nie
może dać wyniku większego niż maksymalny wynik . Tak więc, dane wyjściowe maksimum maszynyioiQ0M′in0n′(M′1,…,M′n′)n0(M1,…,Mn0)M′i(M1,…,Mn0)n′(M′1,…,M′n′)
równa się maksymalnej wydajności maszyn , które zastępują. CO BYŁO DO OKAZANIAn0