DFA가 NFA와 동등한 지 어떻게 확인합니까?


10

NFA를 DFA로 변환하는 방법을 배우고 있으며 올바르게 수행하고 싶습니다. 분명히 다른 방향으로 돌아가는 것은 중요하지 않습니다. 누구나 DFA가 NFA와 같은지 확인하는 알고리즘을 알고 있습니까?


한 후보 해석 : NFA를 DFA로 변환하는 문제에 대한 "결과 검사기"( Waserman 및 Blum 의 의미 )가 있습니까? 다시 말해, 변환 알고리즘에 대해 주장 된 (입력, 출력) 쌍이 주어 졌을 때, 출력 자체가 변환을 수행하는 것보다 점진적으로 빠른 알고리즘이 있습니까?
DW

답변:


7

이것은 문제가되는 질문입니다. 오토마타의 동등성을 점검 할 수있는 방법이 있는데, 지금 설명 할 것이지만, 마지막에 보게 되겠지만 도움이되지 않을까 걱정됩니다.

두 세트 BA BB A 와 동일하다는 것을 상기하십시오 (이는 세트 평등의 정의입니다). 따라서, 당신이 있는지 확인하기에 충분하다 L ( D ) L ( N )L ( N ) L ( D ) , DN은 각각 당신의 DFA와 NFA됩니다.ABABBAL(D)L(N)L(N)L(D)DN

ABAB¯=B¯B

L(N)L(D)DN

L(D)L(N)N

기본적으로, 질문의 문제는 훨씬 더 깊은 : 당신이 확인하고 싶은 당신 (정의되지 않은 계산 모델) 제대로 잘 정의 된 알고리즘을 실행. 따라서 이것은 실제로 컴퓨터 과학 문제가 아닙니다.

L(D)L(N)22nnN


잘 생각한 답변에 감사드립니다. 나는 오늘 새로운 것을 배웠다. 내 최선의 방법은 내 작업을 JFLAP과 비교하는 것입니다.
IAmOnStackExchange

2
NFA가 크지 않은 경우 (예 : 7-8 개 이상의 주) 가장 좋은 방법은주의 깊게 확인하는 것입니다. 일반적으로 도달 할 수없는 상태를 제거한 후 작은 DFA가 발생하며 수동으로 확인하는 것이 그리 어렵지 않습니다.
Shaull

1
두 기계를 결정하고 최소화하고 두 기계가 동형인지 확인할 수 없습니까?
saadtaame

5

진행하는 한 가지 방법은 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 증명 스크립트, 구현 링크 및 대화식 애플릿이 포함 된 이 백서웹 부록 도 참조하십시오 .


진행하는 한 가지 방법은 NFA를 DFA로 변환하는 것입니다. 포스터의 목표는 해당 알고리즘의 결과를 확인하는 것입니다. 두 번 적용하는 것은 실제로 한 가지 방법이지만 알고리즘의 오해에 면역되지 않습니다. 아마도 검사 방법이 필요한 이유 일 것입니다.
AProgrammer

2
@aprogrammer 내 대답의 주요 부분은 Coq proof 스크립트를 사용할 수있는 알고리즘에 대한 참조이며, 내가 생각할 수있는 가장 안전한 검사 방법입니다.
J.-E.

1
NFA에서 DFA 로의 간단한 알고리즘에 대한 자신의 이해가 Coq 증명 스크립트로 무엇을 할 지 확신이 서지 않습니다. 이것은 대수학을 사용하여 3 학년의 수학 문제를 해결하는 것처럼 보입니다.
AProgrammer

0

이 질문은 이론적 질문이 아닌 응용 소프트웨어 테스트 및 실제 정확성 검증에 관한 것입니다.

  • D1D2¯D2D1¯D¯

  • 결과를 검증하기 위해 테스트 된 이전에 테스트 한 소프트웨어를 사용할 수 있습니다. 예 : AT & T FSM 라이브러리

  • 또 다른 아이디어 : 무작위 테스트. 언어 내에서 임의의 문자열을 선택하십시오. DFA / NFA에서 문자열을 수락할지 또는 수락하지 않았는지 확인합니다. 이 둘이 같지 않으면 높은 확률로 일치하지 않는 문자열을 찾을 수 있습니다.

  • 또 다른 아이디어 : DFA 및 NFA의 모든 지점을 특정 깊이까지 통과하고 일치하지 않는 코드를 작성할 수 있습니다. 이것은 주어진 길이의 모든 잠재적으로 허용되는 문자열을 열거하는 것과 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.