ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW MASZYNY O DOSTEPIE SWOBODNYM (RAM) Bartosz Zieliński Katedra Fizyki Teoretycznej i Informatyki Zima 2011-2012
INSTRUKCJE MASZYNY RAM Instrukcja Argument Znaczenie READ j r 0 := i j READ j r 0 := i rj STORE j r j := r 0 STORE j r ij := r 0 LOAD x r 0 := x ADD x r 0 := r 0 + x SUB x r 0 := r 0 x HALF r 0 := r 02 JUMP j κ := j JPOS j if r 0 > 0 then κ := j JZERO j if r 0 = 0 then κ := j JNEG j if r 0 < 0 then κ := j HALT κ := 0 gdzie x ma formę = j, j lub j. BARTOSZ ZIELIŃSKI (KFTII) ZŁOŻONOŚĆ... 2011/12 2 / 12
MNOŻENIE LICZB, PSEUDOKOD xy = log y k=0 PROGRAM OBLICZA ILOCZYN x I y 1: sum := 0; ˆx := x; ŷ := y; 2: while ŷ 0 do ; 3: ŷ 2 := ŷ 2 2 k xy[k] 4: if ŷ 2 + ŷ 2 ŷ 0 then 5: sum := sum + ˆx; 6: end if 7: ˆx := ˆx + ˆx; ŷ = ŷ 2 ; 8: end while 9: PRINT(sum); sum = xy BARTOSZ ZIELIŃSKI (KFTII) ZŁOŻONOŚĆ... 2011/12 3 / 12
MNOŻENIE LICZB, PROGRAM RAM 1. READ 1 2. STORE 1 ˆx := x 3. READ 2 4. STORE 2 ŷ := y 5. JZERO 20 while ŷ 0 do 6. HALF 7. STORE 4 ŷ 2 := ŷ 2 8. ADD 4 9. SUB 2 10. JZERO 14 if ŷ 2 + ŷ 2 ŷ 0 then 11. LOAD 3 12. ADD 1 13. STORE 3 sum := sum + ˆx 14. LOAD 1 end if 15. ADD 1 16. STORE 1 ˆx := ˆx + ˆx 17. LOAD 4 18. STORE 2 ŷ = ŷ 2 19. JUMP 5 end while 20. LOAD 3 PRINT(SUM) 21. HALT BARTOSZ ZIELIŃSKI (KFTII) ZŁOŻONOŚĆ... 2011/12 4 / 12
SYMULACJA MASZYNY TURINGA PRZEZ RAM Niech Σ = {σ 1,..., σ k } alfabet maszyny Turinga. Niech D Σ = {(i 1,..., i n ) 1 i j k, j = 1,..., n}. Jeśli L (Σ ) jest językiem to φ L : D Σ {0, 1}, { 1 gdy σi1... σ φ L (i 1,..., i n ) = in L 0 gdy σ i1... σ in / L TWIERDZENIE Niech L będzie językiem należacym do TIME(f (n)). Wówczas istnieje program RAM który oblicza funkcję φ L w czasie O(f (n)). BARTOSZ ZIELIŃSKI (KFTII) ZŁOŻONOŚĆ... 2011/12 5 / 12
DOWÓD TWIERDZENIA O SYMULACJI MT Niech M = (K, Σ, δ, s) maszyna Turinga rozstrzygajac a język L w czasie f (n). Niech n długość słowa wejściowego. Symulacja zaczyna od skopiowania danych do rejestrów o numerach od 4 do n + 3. Rejestr 1 zawiera numer rejestru zawierajacy kod znaku pod aktualna pozycja kursora (na poczatku 4). Program składa się z ciagu instrukcji dla każdego stanu q K. Każdy z ciagów składa się z Σ podciagów (dla każdego symbolu z Σ). Niech podciag odpowiadajacy stanowi q i symbolowi σ j zaczyna się od linii N q,σj BARTOSZ ZIELIŃSKI (KFTII) ZŁOŻONOŚĆ... 2011/12 6 / 12
SYMULACJA JEDNEGO KROKU MT NIECH δ(q, σ j ) = (p, σ l, D) N q,σj. LOAD 1 (pobierz symbol pod kursorem) N q,σj + 1. SUB = j (odejmij numer tego symbolu) N q,σj + 2. JZERO N q,σj + 4 (jeśli symbolem nie jest σ j N q,σj + 3. JUMP N q,σj+1 to skok do obsługi σ j+1 ) N q,σj + 4. LOAD = l N q,σj + 5. STORE 1 (Zapisujemy σ l pod kursorem) N q,σj + 6. LOAD 1 (Przesuwamy kursor o d gdzie N q,σj + 7. ADD = d d = 1 dla D =, d = 1 dla N q,σj + 8. STORE 1 D = i d = 0 dla D = ) N q,σj + 9. JUMP N p,σ1 (Rozpocznij symulację stanu p) BARTOSZ ZIELIŃSKI (KFTII) ZŁOŻONOŚĆ... 2011/12 7 / 12
SYMULACJA RAM PRZEZ MASZYNE TURINGA REPREZENTACJA Niech b(i) binarna reprezentacja i. Niech I = (i 1,..., i n ) ciag liczb całkowitych. Wtedy binarna reprezentacja b(i) := b(i 1 );... b(i n ). Niech D zbiór skończonych ciagów liczb całkowitych. Niech φ : D Z. Maszyna Turinga M oblicza φ gdy M(b(I)) = b(φ(i)). TWIERDZENIE Jeżeli program Π maszyny RAM oblicza funkcję φ w czasie f (n) to istnieje maszyna Turinga z 7 ciagami która oblicza φ w czasie O(f (n) 3 ). BARTOSZ ZIELIŃSKI (KFTII) ZŁOŻONOŚĆ... 2011/12 8 / 12
DOWÓD TWIERDZENIA O SYMULACJI RAM CIAGI MASZYNY TURINGA M Ciag 1 to ciag wejściowy tylko do odczytu. Ciag 2 reprezentacje zawartości (zmodyfikowanych) rejestrów R. Sekwencje słów b(i) : b(r i ) odzielonych średnikami, znaki puste, koniec znak. Uaktualnienie rejestru i para b(i) : b(r i ) zastępowana spacjami, nowa para dopisywana na końcu. Ciag 3 bieżaca wartość licznika rozkazów κ. Ciag 4 adres aktualnie poszukiwanego rejestru. CIagi 5,6,7 ciagi robocze. BARTOSZ ZIELIŃSKI (KFTII) ZŁOŻONOŚĆ... 2011/12 9 / 12
KROKI SYMULACJI Stany maszyny M podzielone sa na m grup gdzie m jest liczba instrukcji w programie Π. Zawartość potrzebnego w danej instrukcji rejestru jest odnajdywana przez przegladanie ciagu 2: Dla każdej pary b(i) : b(r i ) słowo b(i) jest porównywane z zawartościa ciagu 4. Jeśli się zgadzaja to b(r i ) jest kopiowane do jednego z pozostałych ciagów celem przetworzenia. W przeciwnym wypadku szukamy dalej. Trzy operacje arytmetyczne wykonywane sa na ciagach 4, 5, 6. Dwa zawieraja argumenty a w trzecim zapisujemy wynik. Po obliczeniu aktualizujemy ciag 2. Dla instrukcji HALT zawartość rejestru 0 przenoszona jest z ciagu 2 do ciagu 7. BARTOSZ ZIELIŃSKI (KFTII) ZŁOŻONOŚĆ... 2011/12 10 / 12
CZAS DZIAŁANIA SYMULACJI LEMAT Po t krokach obliczeń programu RAM na danych I zawartość każdego rejestru ma długość najwyżej t + l(i) + l(b) gdzie B jest największa liczba zapisana jawnie w instrukcji programu Π. DOWÓD OGRANICZENIA CZASOWEGO Wystarczy dowieść że symulacja jednej instrukcji programu Π zabiera M czas O(f (n) 2 ) Zdekodowanie instrukcji i stałych stały czas. Pobranie wartości rejestrów z ciagu 2 O(f (n) 2 ): Ciag zawiera O(f (n)) par, każda długości O(f (n)) (Lemat). Proste operacje (ADD, SUB, HALF) czas O(f (n)) liniowy do rozmiaru argumentów. BARTOSZ ZIELIŃSKI (KFTII) ZŁOŻONOŚĆ... 2011/12 11 / 12
ZADANIE/PRZYKŁAD Dane wejściowe: Ciag dwóch liczb całkowitych KOD RAM 1. READ 1 2. JZERO 6 3. STORE 1 4. READ 2 5. ADD 1 6. HALT Zadanie: Zdefiniować MT symulujac a powyższy program. BARTOSZ ZIELIŃSKI (KFTII) ZŁOŻONOŚĆ... 2011/12 12 / 12