NFA를 DFA로 변환하는 방법을 배우고 있으며 올바르게 수행하고 싶습니다. 분명히 다른 방향으로 돌아가는 것은 중요하지 않습니다. 누구나 DFA가 NFA와 같은지 확인하는 알고리즘을 알고 있습니까?
NFA를 DFA로 변환하는 방법을 배우고 있으며 올바르게 수행하고 싶습니다. 분명히 다른 방향으로 돌아가는 것은 중요하지 않습니다. 누구나 DFA가 NFA와 같은지 확인하는 알고리즘을 알고 있습니까?
답변:
이것은 문제가되는 질문입니다. 오토마타의 동등성을 점검 할 수있는 방법이 있는데, 지금 설명 할 것이지만, 마지막에 보게 되겠지만 도움이되지 않을까 걱정됩니다.
두 세트 와 B 가 A ⊆ B 와 B ⊆ A 와 동일하다는 것을 상기하십시오 (이는 세트 평등의 정의입니다). 따라서, 당신이 있는지 확인하기에 충분하다 L ( D ) ⊆ L ( N ) 와 L ( N ) ⊆ L ( D ) , D 와 N은 각각 당신의 DFA와 NFA됩니다.
기본적으로, 질문의 문제는 훨씬 더 깊은 : 당신이 확인하고 싶은 당신 (정의되지 않은 계산 모델) 제대로 잘 정의 된 알고리즘을 실행. 따라서 이것은 실제로 컴퓨터 과학 문제가 아닙니다.
진행하는 한 가지 방법은 NFA를 DFA로 변환 한 다음 선형 알고리즘이있는 두 DFA의 동등성을 확인하는 것입니다 [1].
다음 백서는 두 NFA의 동등성에 대한보다 일반적인 사례를 다루고 있습니다 (물론 귀하의 사례에도 적용됨).
Filippo Bonchi, Damien Pous, 프로그래밍 언어 원칙 (POPL) 까지의 일치도에 대한 NFA 동등성을 확인 , 2013 년 1 월, 로마, 이탈리아. ACM, 457-468, 2013 년.
초록 . 우리는 비 결정적 유한 오토마타의 언어 동등성을 입증하기위한 기술로서 합동까지의 시뮬레이션을 소개합니다. 이 기술을 이용하여 Hopcroft와 Karp에 의한 고전적인 알고리즘의 최적화를 고안한다 [1]. 우리는 두 가지 기본 일치 증명 방법을 분석하고 관련시켜 최근에 소개 된 안티 체인 알고리즘에 대한 접근 방식을 비교합니다. 우리는 안티 체인보다 기하 급수적으로 개선하는 구체적인 예를 제시합니다. 또한 실험 결과는 무시할 수없는 개선을 보여줍니다.
[1] JE Hopcroft와 RM Karp. 유한 오토마타의 동등성을 테스트하기위한 선형 알고리즘. 1971 년 12 월 코넬대 TR 114.
결과에 대한 Coq 증명 스크립트, 구현 링크 및 대화식 애플릿이 포함 된 이 백서 의 웹 부록 도 참조하십시오 .
이 질문은 이론적 질문이 아닌 응용 소프트웨어 테스트 및 실제 정확성 검증에 관한 것입니다.
결과를 검증하기 위해 테스트 된 이전에 테스트 한 소프트웨어를 사용할 수 있습니다. 예 : AT & T FSM 라이브러리
또 다른 아이디어 : 무작위 테스트. 언어 내에서 임의의 문자열을 선택하십시오. DFA / NFA에서 문자열을 수락할지 또는 수락하지 않았는지 확인합니다. 이 둘이 같지 않으면 높은 확률로 일치하지 않는 문자열을 찾을 수 있습니다.
또 다른 아이디어 : DFA 및 NFA의 모든 지점을 특정 깊이까지 통과하고 일치하지 않는 코드를 작성할 수 있습니다. 이것은 주어진 길이의 모든 잠재적으로 허용되는 문자열을 열거하는 것과 같습니다.