Spotkałem następujące pytanie, które jest łatwym ćwiczeniem (spoiler poniżej).
Dostajemy wystąpień problemu z zatrzymaniem (np. TM ) i musimy dokładnie zdecydować, które z nich zatrzymają się na . Oznacza to, że musimy . Dostajemy wyrocznię za problem zatrzymania, ale musimy go użyć minimalną liczbę razy.
Nie jest trudno pokazać, że można tego dokonać za pomocą wywołań .
Moje pytanie brzmi: czy możemy udowodnić dolną granicę? Czy istnieje powód, by podejrzewać, że takie ograniczenie będzie bardzo trudne do znalezienia?
Odpowiedź na samo pytanie (spoiler, kursor myszy):
Rozważ przypadek baz TM. Możemy zbudować TM która równolegle i zatrzymuje się, jeśli przynajmniej dwa z nich zatrzymają się (w przeciwnym razie utknie). Podobnie możemy zbudować TM która zatrzyma się, jeśli przynajmniej jedna z nich się zatrzyma. Następnie możemy wezwać wyrocznię na . Jeśli się zatrzyma, możemy uruchomić maszyny równolegle i poczekać, aż jedna się zatrzyma. Następnie możemy zadzwonić do wyroczni w ostatnim. Jeśli wyrocznia mówi „nie”, to uruchamiamy wyrocznię na . Jeśli się zatrzyma, wtedy uruchamiamy maszyny, aż się zatrzyma, i tylko ta się zatrzyma. Jeśli się nie zatrzyma, żaden z nich się nie zatrzyma. Rozszerzenie tego na maszyn jest łatwe.
Pierwsze spostrzeżenie na temat tego pytania jest takie, że wydaje się niemożliwe do rozwiązania za pomocą narzędzi teoretycznych, ponieważ polegamy przede wszystkim na naszej zdolności do uzyskiwania informacji przez uruchamianie maszyn bez wyroczni.
źródło
Odpowiedzi:
Wynik można znaleźć w
Ich dowód w rzeczywistości pokazuje, że problemu nie można rozwiązać za pomocą mniej niż zapytań do dowolnego zestawu , nie mówiąc już o samym problemie zatrzymania. W przypadku niektórych notacji problem jest czasami oznaczany jako lub (w zależności od ulubionej notacji dotyczącej problemu zatrzymania).log2n X CKn CHALTn
Aby zobaczyć ten i wiele powiązanych wyników, zobacz także:
Ta ankieta przeprowadzona przez Gasarch
Książka Bounded Queries in Recursion Theory autorstwa Gasarcha i Martina.
źródło
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).n n=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 .log2n n n O(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 :
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.)n n {M′i} (i=1,2,…,n) M′i n i i
Teraz niech będzie najmniejszą liczbą całkowitą (jeśli istnieje) taką, że następujące:n0 n
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>1 C(1)=−1 n0>2 C(2)=0 2 n
Twierdzenie: Jeśli jest skończone, to dla dowolnego można obliczyć maksymalną wydajność danych maszyn w wywołaniach oracle.n0 n n C(n0) (Zauważ, że jeśli jest skończone, to .)n0 C(n0)=O(1)
Dowód. . Udowadniamy to przez indukcję na . Przypadki bazowe są , które posiadają z definicji i .n n≤n0 n0 C
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.Q0 n0 C(n0)
Napraw dowolne . Biorąc pod uwagę dowolne maszyn , oblicz maksymalną moc w następujący sposób.n>n0 n M1,…,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,…,Mn0 Q0 n0 Q0 C(n0) n′=2C(n0) n′=2C(n0)<n0 oi i i=1,…,n′ M′i Q0
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).n n0 M1,…,Mn0 n′<n0 M′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 maszynyi oi Q0 M′i n0 n′ (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
źródło