사이클이 겹치는 NFA를 정규식으로 변환하는 방법은 무엇입니까?


11

올바르게 이해하면 NFA는 정규 표현식과 동일한 표현력을 갖습니다. 종종 NFA에서 동등한 정규 표현식을 읽는 것이 쉽습니다.주기를 별, 접합점으로 대체 등으로 변환합니다. 그러나이 경우에해야 할 일 :

여기에 이미지 설명을 입력하십시오
[ 출처 ]

사이클이 겹치면이 오토 마톤이 무엇을 받아들이는지 (정규 표현으로)보기가 어렵습니다. 트릭이 있습니까?


2
다이어그램에서 초기 및 최종 상태가 무엇인지 표시 할 수 있다면 : 초기 상태에 대한 작은 화살표와 최종 상태로 이중 원이 표시됩니다. 또한 시도한 내용을 표시하지 않으면 잘못되고있는 부분을 파악하기가 어렵습니다.
Dave Clarke

아마도 이 문서는 당신을 도울 수 있습니다 : 그것은 분명히 RE에 NFA를 변환하는 방법에 대해 설명합니다.
Vor

1
왜 어려운가요? 표준 알고리즘 중 하나를 사용해 보셨습니까? 최고의 ansatz는 무엇입니까?
Raphael

3
이 사이트에 대한 질문 (imho)을 흥미롭고 유익하게 편집했습니다. 의견을 작성 하려면 개정 내역 을 참조하십시오 .
Raphael

1
NFA를 정규식으로 변환 할 수있는 답변이 준비되어 있지만 삭제했습니다 .Raphael의 답변은 직접 수행 해야하는 방법을 제공합니다 (예제에 대한 링크도 제공). 필요. 여전히 내 솔루션을 원하면 답변을 삭제 취소합니다.
Alex ten Brink

답변:


5

"읽기"보다는이를 위해 몇 가지 정식 방법 중 하나를 사용해야합니다. 지금까지 내가 본 것 중 가장 좋은 것은 해결할 수있는 (일반) 언어의 방정식 시스템으로 오토 마톤을 표현하는 것입니다. 다른 방법보다 더 간결한 표현을 얻는 것처럼 보이기 때문에 특히 좋습니다.

지난 여름 학생들을위한 방법을 설명하는 이 문서를 썼습니다 . 특정 강의와 직접 관련이 있습니다. 언급 된 참조는 정규 표현식의 일반적인 정의입니다. Arden의 Lemma (필요한 결과)의 증거가 포함되어 있습니다. 방법의 정확성에 대한 하나가 누락되었습니다. 강의에서 배운대로 슬프게도 언급이 없습니다.

한마디로 : 모든 상태 에 대해 방정식을 만듭니다qi

Qi=qiaqjaQj{{ε}, qiF, else

여기서 최종 상태와 세트 인 Q 나에게 →의 Q의 j 개의 수단으로부터의 전이가 Q Iq를 J 로 표시된 A는 . + 또는 (정규 표현식 정의에 따라) 로 읽으면 이것이 정규 표현식의 방정식임을 알 수 있습니다.Fqiaqjqiqja+

(사용하여 해결 아덴의 보조 정리하면 ) 한 정규 표현 수율 정확하게부터 허용 될 수있는 그 단어 설명 각 상태에 대한 Q I를 ; 따라서 Q 0 ( q 0 이 초기 상태 인 경우)이 원하는 표현입니다.QiqiQ0q0

주어진 오토 마톤에 적용하는 것은 운동으로 남습니다. 위의 링크 된 문서 에 완전한 예제가 포함되어 있습니다 .

비슷한 답변을 게시 한 곳 도 여기를 참조하십시오 .


1
다른 일반적인 방법 은 이 참조 질문참조 하십시오 .
Raphael

3

루프가없는 상태 체인 만 있다면 어떻게해야하는지 알고 있습니까?

이 겹치는 분기가없는 간단한 루프가 있다면 어떻게해야하는지 알고 있습니까?

(대답이“아니요”인 경우 먼저이 사례에 대해 생각하십시오.)

이제 아이디어는 오토 마톤을 점진적으로 변형시켜 체인, 루프 및 마지막에 수렴하는 분기 경로 (교대로 이어지는)와 같은 패턴을 발견 할 수있는 형태로 만듭니다. 변환의 모든 단계에서 변환 된 오토 마톤이 여전히 동일한 언어를 인식하도록주의하십시오.

이것은 결정적 오토 마톤 임을 명심하십시오 . 게시 한 내용은 결정 론적이지만 변형 할 때 그대로 유지할 필요는 없습니다.

q2q1fq2gq3q4q2q5q4jq5gq3

q3,q4,q5q3q3(hjg)

어떤 상태가 최종 상태인지 확인하십시오. 처음에는 이것에 대해 걱정하지 않고 하나의 큰 루프를 만든 다음 루프를 통해 부분적으로 끝나는 부분을 복제하십시오.

이것이 반드시 가장 효율적인 기술이거나 가장 간단한 정규식을 생성하는 기술은 아니지만 간단합니다.


3

Q_1 분할


그리고 이것은 어떻게 질문에 대답합니까?
라파엘

1
이런 식으로 상태 머신을 다시 작성하면 동등한 정규 표현식을 읽는 것이 간단합니다.
Jukka Suomela

1
아마도 답안에 이것을 포함시켜야 할 것입니다. 이것은 항상 작동합니까?
Raphael

@Raphael :이 경우 작동합니다. :)이 트릭의 기본 개념은 다음과 같습니다. 우리는 사이클을 "적절하게 중첩"했습니다. 즉, 우리는 순환 구조를 가지고 있지 않습니다 [(])[()].
Jukka Suomela
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.