다음과 같이 공간을위한 시간을 절약 할 수 있습니다
정규식을 NFA로 변환-알고리즘 비교의 구체성을 위해 은 NFA 상태의 수 라고 가정 하여 NFA를 직접 시뮬레이션하기위한 시간이 유효하고 변환 된 DFA를 실행할 수있는 공간도 많은 메모리를 처리 할 수있는 RAM에서 작업 할 때마다 유효합니다.rO(rs)O(2r)
이제 NFA의 상태를 (임의로) 각각 최대 상태 의 서브 세트 로 분할하십시오 . 각각의 서브 세트 내 , 우리가 할 수있는 인덱스 서브 세트 의 행 번호에 의해 으로 .kSi⌈r/k⌉SiAiSi02⌈r/k⌉−1
테이블 여기서 와 는 0에서 사이의 범위에 있고 , 는 입력 기호이며, 는 의 부분 집합입니다 . 테이블에 저장된 값 (의 수치 인덱스)의 부분 집합이다 : 상태 인 의 경우에만, 속하는 하고있는 상태가 그 천이 행 입력 심볼에 .I , J의 K - 1 C I S I S J , Y T [ I , J , C , I ] Y S J I Y CT[i,j,c,Ai]ijk−1cAiSiSjyT[i,j,c,Ai]ySjAiyc
NFA를 시뮬레이션하려면 입력의 접두사로 도달 할 수있는 의 상태 하위 집합 를 지정하여 각 마다 하나씩 인덱스를 유지 하십시오. 각 입력 기호 에 대해 표를 사용하여 각 쌍 에 대해 의 전환으로 의 상태에서 도달 할 수있는 의 상태 세트를 찾은 다음 비트 이진 또는 연산을 사용하십시오. 이러한 상태 집합의 숫자 인덱스를 사용하여 상태의 단일 하위 집합으로 결합합니다 . 따라서 시뮬레이션의 각 단계에는 시간 가 걸리고 시뮬레이션 의 총 시간은S i A i S ikSiAiSici,jSjAicSjO(k2)O(sk2) 입니다.
필요한 공간은 모든 테이블의 공간이며, 입니다. 시간 및 공간 분석은 많은 양의 메모리를 처리 할 수 있고 많은 양의 메모리를 처리하기에 충분히 큰 단어에 대해 이진 연산을 수행 할 수있는 모든 RAM에서 유효합니다.O(k22r/k)
이로부터 얻은 시공간 상충 관계는 에 대한 2 차 의존성 때문에 NFA 시뮬레이션과 완벽하게 일치하지 않습니다 . 그러나 가 NFA 시뮬레이션에 적합한 시간 이라는 것에 회의적입니다 . 현재 활성에서 허용되는 모든 (2 차적으로 많은) 전이를 보는 것보다 NFA의 단일 단계를 더 빨리 시뮬레이션하는 방법 다른 상태로? 가 아니어야합니까 ?kO(rs)O(r2s)
어떤 경우 든 다양하게 설정하면 DFA와 NFA 경계 사이의 연속체에서 DFA보다 적은 공간으로 시간 범위를 확보 할 수 있습니다.k