"30 분 이내에 정규 표현식을 DFA로 변환하기"를 원하기 때문에 상대적으로 작은 예제를 직접 작성하고 있다고 가정합니다.
이 경우 Brzozowski의 알고리즘 을 사용하여 언어의 Nerode 오토 마톤 (최소 결정 론적 오토 마톤과 동일 함)을 직접 계산할 수 있습니다. 파생 상품의 직접 계산을 기반으로하며 교차와 보완을 허용하는 확장 된 정규 표현식에도 적용됩니다. 이 알고리즘의 단점은 값 비싼 프로세스를 따라 계산 된 표현식의 동등성을 점검해야한다는 것입니다. 그러나 실제로 작은 예제의 경우 매우 효율적입니다.[ 1 ]
왼쪽 몫 . 하자 의 언어가 될 * 및하자 유 단어합니다. 그러면
U - 1 L = { V ∈ * | u는 v에 ∈ L }
언어 유 - 1 L가 착신되는 좌측 몫 (또는 유도체 왼쪽 )의 L이 .엘ㅏ※유
유− 1L = { v ∈ A※∣ u v ∈ L }
유− 1엘엘
Nerode 오토 마톤 . Nerode 오토 마톤 의 결정적 오토 마톤이고 ( L ) = ( Q , , ⋅ , L , F ) 여기서, Q = { U - 1 L | U ∈ * } , F = { U - 1 L | U ∈ L } 및 전환 함수가 정의됩니다. 각 a ∈엘ㅏ( L ) = ( Q , A , ⋅ , L , F)Q = { u− 1L ∣ u ∈ A※}에프= { u− 1L ∣ u ∈ L } , 화학식
( U - 1 L는 ) ⋅ A는 = - 1 ( U - 1 L ) = ( U ) - 1 L이
이 다소 추상적 정의주의. A의 각 상태는단어에 의해 L 의 왼쪽 몫이므로 A * 의 언어입니다. 초기 상태는 언어 L 이고 최종 상태 세트는 L 단어로 L 의 모든 왼쪽 몫 세트입니다.∈
( u− 1L ) ⋅ a = a− 1( u− 1L ) = ( u a )− 1엘
ㅏLA∗LLL
a,b
a−11a−1(L1∪L2)a−1(L1∩L2)=0=a−1L1∪u−1L2,=a−1L1∩u−1L2,a−1ba−1(L1∖L2)a−1L∗={10if a=bif a≠b=a−1L1∖u−1L2,=(a−1L)L∗
a−1(L1L2)={(a−1L1)L2(a−1L1)L2∪a−1L2si 1∉L1,si 1∈L1
L=(a(ab)∗)∗∪(ba)∗
1−1La−1L1b−1L1a−1L2b−1L2a−1L3b−1L3a−1L4b−1L4a−1L5b−1L5=L=L1=(ab)∗(a(ab)∗)∗=L2=a(ba)∗=L3=b(ab)∗(a(ab)∗)∗∪(ab)∗(a(ab)∗)∗=bL2∪L2=L4=∅=(ba)∗=L5=∅=a−1(bL2∪L2)=a−1L2=L4=b−1(bL2∪L2)=L2∪b−1L2=L2=∅=a(ba)∗=L3
[1]
편집 . (2015 년 4 월 5 일) 방금 비슷한 질문을 발견 했습니다. 주어진 정규 표현식에서 설명하는 언어를 인식하는 DFA를 구축하기 위해 어떤 알고리즘이 존재합니까? cstheory에 물었다. 이 답변은 복잡성 문제를 부분적으로 해결합니다.
a(a|ab|ac)*a+
. 이를 NDFA로 직접 변환하여 DFA로 줄이거 나 DFA에 즉시 매핑되는 것으로 정규화 할 수 있습니다.