Duże luki między pamięcią RAM a złożonością maszyny Turinga

9

Jeśli weźmiemy pod uwagę tylko problemy w P, czy są jakieś duże luki między najszybszym znanym algorytmem RAM-słowo i najszybszym znanym algorytmem maszyny Turinga dla określonych problemów? Jestem szczególnie zainteresowany, jeśli istnieją duże luki w naturalnych problemach leżących w interesie ogólnym.

Lembik
źródło
6
maszynę RAM można symulować za pomocą maszyny Turinga z narzutem w czasie wykonywania. Więc nie będzie naprawdę dużych luk. O(nlogn)
Shaull
@Shaull Czy istnieje luka o takim rozmiarze dla jakiegokolwiek naturalnego / popularnego problemu?
Lembik
3
Palindrom zabiera czas na TM na jednej taśmie (i jest w pamięci RAM). eecs.yorku.ca/course_archive/2008-09/W/6115/palindrome.pdfΩ(n2)O(n)
SamM
6
Komentarz Shaulla jest prawdą tylko dla niedeterministycznych maszyn i dla ustawienia dwóch taśm TM, o ile mi wiadomo. Cytowanie, Shaull?
Ryan Williams
1
@ qbt937 - Wow, co za podmuch z przeszłości :) Wierzę, że nie dostarczyłem cytatu, ponieważ go nie miałem (ani go już nie mam) i być może Ryan Williams ma rację.
Shaull

Odpowiedzi:

6

Wiadomo, że każdy problem, który można obliczyć na maszynie RAM w czasie , można to zrobić na maszynie Turinga w czasie co najwyżej . Musisz zauważyć, że całkowity rozmiar używanej pamięci nie może być większy niż , ponieważ oznaczałoby to, że wykonałeś więcej operacji zapisu niż , więc za każdym razem, gdy pobierasz coś z pamięci RAM, Turing maszyna zajęłaby w najgorszym przypadku czas, aby znaleźć żądany element sekwencyjnie z taśmy. Poza dostępem do pamięci pozostałe operacje powinny zająć mniej więcej ten sam czas. I tak dostajesz granicę.T(n)T(n)2T(n)T(n)T(n)

Javier Cano
źródło
2
RAM może obliczyć długość wejścia (a więc także składową tej długości) w czasie logarytmicznym, ale podstawowe maszyny Turinga potrzebują czasu liniowego do obliczenia tej parzystości.
1

Poniższy przykład pokazuje, że algorytm który wymaga do rozwiązania problemu z ramą słów, może wymagać na 1-taśmowej maszynie Turinga (TM) ), która dokładnie wykonuje wszystkie obliczenia wskazane przez . Rozumiem, że pytanie dotyczy 1-taśmy TM i używam tego tylko w mojej odpowiedzi. To jest edycja, aby odpowiedzieć na uwagi Emila Jeřábka.AO(nlog(n))O(n2log(n)3)A

Znajdziemy następujący bardziej ogólny wniosek . Aby udowodnić, że TM może rozwiązać w problem rozwiązany w przez algorytm na pamięci RAM, nie wystarczy uruchomić na TM. Mądry może być potrzebny algorytm. To samo dotyczy sytuacji, gdy ktoś chce udowodnić narzut . W każdym razie udowodnienie istnienia sprytnego algorytmu wydaje się być dalekie od natychmiastowego. Nie jest to zgodne z innymi odpowiedziami, które w zasadzie proponują jedynie symulację / wykonanie na TM wszystkich obliczeń pamięci RAM (algorytmu ) w celu ogłoszenia złożoności TM, takiej jakO(T(n)2)O(T(n))AAO(nlog(n))AO(T(n)2) lub .O(T(n)nlog(n))

Problem: tablicę / tabelę z liczb całkowitych, każda zapisana w bitach. Otrzymujemy drugą tablicę z pozycjami , z których każda rejestruje pewną liczbę bitów. Dla dowolnego definiujemy if MOD MOD . W przeciwnym razie . Wyjście . Uważam, że dane wejściowe podano jako taśmę ztabn=2klog(n)dlog(n)log(n)t[0..log(n)1]Xt=1tab[i]d[t]=tab[n/2+i]d[t] i[0..n/21]Xt=0t=0log(n)1Xtnlog(n)+log(n)log(n) cyfry binarne, aby odpowiedzieć na komentarze Emila Jeřábka.

Algorytm w pamięci RAMA A Pamięć RAM o rozmiarze słowa potrzebuje = do odczytu wejściowego ciągu binarnego dane. Ale po odczytaniu danych może działać tylko ze słowami o rozmiarze . Algorytm oblicza dowolne w , przechodząc przez wszystkie i testując warunek. Główna pętla to FOR : oblicz . Całkowita złożoność wynosi (odczyt danych) +w=log(n)O(nlog(n)+log(n)2)O(nlog(n))log(n)AXtO(n)i[0..n/21]At=0,1,2,log(n)1XtO(nlog(n))O(nlog(n))(wykonując obliczenia), więc może zrobić to wszystko w na RAM.AO(nlog(n))

Algorytm na TM na 1 taśmę:A Twierdzę, że TM na jedną taśmę potrzebuje czasu na ustalone . Z punktu widzenia TM określenie jest równoważne testowaniu równości dwóch ciągów binarnych o długości . Na przykład operacja MOD MOD może być równoważna usunięciu bitu z . W takich przypadkach ustalenie jest równoważne testowi równości na ciągach bitów o długości . Dobrze wiadomo, że testowanie równości dwóch łańcuchów długościO(n2log(n)2)tAtO(nlog(n))tab[i]d[t]0tab[i]Atn(log(n)1)/2mwymaga na 1-taśmie TM, ale tak naprawdę nie mogę teraz znaleźć odniesienia. Jednak dostarczam dowód w ps. Jeśli TM wykonuje główną pętlę z , musi wydać co najmniej dla każdego , kończąc się w .O(m2)AO((nlogn)2)t=0,1,2,log(n)1O(n2log(n)3)


ps. Pokazuję, że testowanie równości na ciągach bitów z bitami nie może być szybsze niż testowanie palyndromu na ciągach bitów z bitami (wiadomo, że palyndrom zajmuje co najmniej czas ). Możemy zmodyfikować dowolny algorytm TM do testowania równości w celu rozwiązania palindromu. Załóżmy, że TM testująca równość rozpoczyna się od dwóch liczb całkowitych: jednej po lewej stronie głowy, jednej po prawej (jest to najprostsza forma wprowadzania TM). Każdy ruch nad lewymi pozycjami może być odzwierciedlony (odbity) nad prawymi pozycjami. Budujemy lustrzaną bazę TM: ilekroć początkowa baza TM znajduje się w pozycji (po lewej), lustrzana baza TM znajduje się w pozycji (po prawej). Jeżeli TM rozwiązała test równości w mniej niżmmO(m2)x<0xO(m2), ta zmodyfikowana lustrzana TM rozwiązałaby palindrom w mniej niż .O(m2)

Ponadto istnieją pewne algorytmy TM do testowania równości i wszystkie z nich wymagają kwadratowego czasu, ponieważ wymagają trochę zygzakowatości, patrz na przykład Turing Machine Przykład 2 na kursy.cs.washington.edu/courses/cse431/14sp/scribes/ lec3.pdf

Daniel Porumbel
źródło
Dolna granica dla palindromów dotyczy tylko nienaturalnego modelu z jedną taśmą. Łatwo jest przetestować równość dwóch łańcuchów na TM w czasie liniowym. To samo dotyczy równości dwóch sekwencji dłuższych wpisów. Ponadto, aby pytanie w ogóle miało sens, dane wejściowe dla obu modeli maszyn muszą być identyczne, tzn. Zapisane jako ciągi znaków nad skończonym alfabetem. Zatem pamięć RAM potrzebuje czasu O (log n) na odczyt każdego wpisu i konwersję go na słowo, co czyni tę operację bezcelową.
Emil Jeřábek
@Emil Jeřábek, zmienię swoją odpowiedź, aby wskazać, że myślę tylko o 1-taśmie TM. Kiedy mówisz, że TM może testować równość w czasie liniowym, przypuszczam, że myślisz o 2-taśmowej TM. Zrozumiałem jednak, że całe pytanie dotyczy TM z 1 taśmą. Jeśli chodzi o formularz wejściowy, muszę przyznać, że masz rację, przynajmniej w przypadku niektórych pamięci RAM. Ale o ile mi wiadomo, tablica int C ++ przechowuje liczby całkowite jedna po drugiej bez separatora, tak jakby zapisywały razem sekwencję bitów. 10 liczb wewnętrznych na 16 bitów zajmuje dokładnie 160 bitów, prawda? Nawet jeśli tak nie jest, można zbudować maszynę działającą w ten sposób.
Daniel Porumbel
3
Standardowym modelem maszyny Turinga w teorii złożoności jest wielowarstwowa. Nie widzę tutaj znaczenia C ++, nie dyskutujemy o C ++, ale model RAM. W tym modelu poszczególne lokalizacje pamięci mogą zawierać liczby o długości , ale nadal możemy operować tylko jedną lokalizacją pamięci (lub ) jednocześnie. W szczególności możemy uzyskiwać dostęp do danych wejściowych tylko w jednym miejscu na raz: nie ma operacji, która pozwoliłaby ci na „odczytanie danych wejściowych i podzielenie ich razem na pojedyncze słowo” w stałym czasie. O(logn)O(1)logn
Emil Jeřábek
Istnieją dwie możliwości: (1) Lokalizacja wejściowa [0] zawiera pierwszy bit pierwszej liczby, lokalizacja [1] zawiera drugi bit pierwszej liczby i tak dalej. Następnie potrzebuje czasu na odczyt na RAM, tak jak na maszynie Turinga. Zatem nawet w przypadku TM z pojedynczą taśmą uzyskuje się jedynie kwadratowe przyspieszenie. (2) Lokalizacja wejściowa [0] zawiera pierwszą liczbę, lokalizacja [1] drugą liczbę i tak dalej. Wtedy problem nie ma znaczenia w TM, ponieważ nie może przetworzyć danych wejściowych tego formularza. W ten sposób nie uzyskujesz żadnego przyspieszenia, ale problem, który można wyrazić tylko w jednym z modeli maszyn. O(nlogn)
Emil Jeřábek
@Emil Jeřábek, Po twoich uwagach zredagowałem pytanie, aby zaproponować problem i algorytm pamięci RAM, który jawnie przyjmuje do odczytu danych (z taśmy). Usunąłem niektóre z moich uwag, które nie są już istotne. Mam nadzieję, że to rozwiązuje problem, który wskazałeś. O(nlog(n))
Daniel Porumbel