Łatwo jest wymienić czas na przestrzeń w następujący sposób.
Konwertuj wyrażenie regularne na NFA - dla konkretności przy porównywaniu algorytmów założymy, że jest liczbą stanów NFA, więc twój czas O ( r s ) związany z bezpośrednią symulacją NFA jest prawidłowy, a twój O ( 2 r ) przestrzeń związana z uruchomieniem przekonwertowanego DFA jest również ważna za każdym razem, gdy pracujesz w pamięci RAM, która może zająć tak dużo pamięci.rO ( r s )O ( 2r)
Teraz podzielić stany NFA (arbitralnie) do podzbiorów S I co najwyżej ⌈ r / k ⌉ Zjednoczonych każdego. W obrębie każdego podzbioru Ś I , można podzbiory indeks I z S ı liczbami od 0 do 2 ⌈ R / K ⌉ - 1 .kS.ja⌈ r / k ⌉S.jaZAjaS.ja02)⌈ r / k ⌉- 1
Zbuduj tabelę gdzie i oraz j mieszczą się w zakresie od 0 do k - 1 , c jest symbolem wejściowym, a A i jest (indeks numeryczny) podzbiorem S i . Wartości przechowywane w tabeli oznacza (wskaźnik liczbowy) podzbiór S j : stan Y jest T [ ı , j , c , A ı ] wtedy i tylko wtedy, gdyT.[ i , j , c , Aja]jajotk - 1doZAjaS.jaS.jotyT.[ i , j , c , Aja] należy do S j a jest to stan, w A, i który przechodzi do Y na symbol wejściowy C .yS.jotZAjaydo
Aby symulować NFA, utrzymania indeksy, po jednym dla każdego S I , określając podgrupie A ja z państw, w S í do których można dotrzeć za pośrednictwem prefiksu wejścia. Dla każdego symbolu wejściowego , c , za pomocą tabel sprawdzić dla każdej pary i , j , zestaw stanów w S j , który może być osiągnięty ze stanu w A ı przez przejście na C , a następnie użycie binarnego logicznym OR operacja na wskaźnikach liczbowych tych zestawów stanów, aby połączyć je w jeden podzbiór stanów S jkS.jaZAjaS.jadoja , jS.jotZAjadoS.jot. Zatem każdy etap symulacji wymaga czasu , a całkowity czas symulacji wynosi O ( s k 2 ) .O ( k2))O ( s k2))
Wymagane miejsce to miejsce dla wszystkich tabel, którym jest . Analiza czasu i przestrzeni obowiązuje dla każdej pamięci RAM, która może zająć tak dużo pamięci i która może wykonywać operacje binarne na słowach, które są wystarczająco duże, aby zająć taką pamięć.O ( k2)2)r / k)
Wynikający z tego kompromis czasoprzestrzenny nie pasuje idealnie do symulacji NFA, z powodu kwadratowej zależności od . Ale potem, jestem sceptyczny, że O ( r s ) jest właściwy czas związany do symulacji NFA: jak można symulować jeden krok NFA szybciej niż patrząc na wszystko z (wielu) kwadratowo ewentualnie przejść dozwolonych od aktualnie stan aktywny do innego stanu? Czy nie powinno to być O ( r 2 s ) ?kO ( r s )O ( r2)s )
W każdym przypadku, pozwalając zmieniać, możesz uzyskać ograniczenia czasowe na kontinuum między granicami DFA i NFA, z mniejszą ilością miejsca niż DFA.k