2011-01-02 2 views
3

(내가 대답을 발견, 그 아래에 다른 사람을위한 주석)시간 복잡도 무역 오프는

내가있는 더 나은 사용하고 컴파일러에서 무엇을 circumstanes NFA 또는 토론을 찾고 있어요 dfa. nfa 대 dfa를 시뮬 레이팅하는 시간 복잡성 거래는 무엇이고 컴파일러에서 어떤 상황에서 더 적합합니까 ??

은 대학 시험에 도움을 개정 메신저 크게 apriciated 될 것입니다 감사합니다 :)

리앤을. 누군가가 나에게 대답 : (

+0

을 간단한 아이디어를 줄 수 있습니다 (더 내다 없다고 가정, 그것은 그래서 막 다른 골목으로 실행되는 다음 문자가 될 것입니다 무엇을 알고하지 않습니다) 나는 다른 사람이 .. – user560618

+0

를 찾고에 대한 답을 발견 시간 - 공간 트레이드 오프 목표 : 주어진 reg. exp.r과 input stringx, Lx에 있는지의 여부를 결정한다. Method # 1 : Thompson의 구조를 사용하여 NFAN fromr을 구축하고 이전 알고리즘을 실행한다. NFA inO (| r |) 시간을 구성 할 수있다. ¡ N은 | r |의 두 배만큼 많은 상태를 가지며 각 상태에서 최대 두 개의 전환이 있으므로 전환 표는 | (| r |) 공간입니다. ¡ 이전 알고리즘이 허용하거나 거부하는 inO (| r | × | x |) 시간 – user560618

+0

방법 2 : Thompson의 구조를 사용하여 NFAN fromr을 만든 다음 하위 집합 구성을 사용하여 N 의 DFAD를 작성합니다. 마지막으로 수락/거절에 대한 을 사용하십시오. ¡ D는 최대 2k 개의 상태를 가질 수 있습니다. 여기서 k는 N의 상태를 나타냅니다. '최악의 경우' '문자열 (a | b) * a (a | b) (a | b) ... (a | b) : 왜? (x |) – user560618

답변

0
  • NFA에서 DFA의 건설 시간은 O (2^m)입니다. 여기서 m은 노드의 수입니다.
  • DFA의 실행 시간은 O (n)입니다. 여기서 n은 입력 문자열의 길이입니다. 이는 주어진 문자열에 대해 DFA를 통과하는 경로가 하나뿐이기 때문입니다.
  • NFA의 구축 시간은 O (m) 여야합니다. 여기서 m은 노드 수입니다.
  • NFA의 실행 시간은 비 결정적이며 컴퓨터는 가능한 모든 항목을 확인해야하므로 O (m²n)입니다. 문자열에있는 현재 문자의 경로.

이 수치는 UA에게

+0

당신이 제안하는 것처럼, 역 추적을 통해 NFA를 실행하는 것은 최악의 경우에 O (2^n)를 취할 것입니다. 다행히 O (mn) 시간이 걸리는 똑똑한 알고리즘이 있지만 역 참조는 지원하지 않습니다. (한 가지 구현은 Google의 re2입니다.) – delnan