매우 큰 NFA를 DFA로 변환하기위한 알고리즘


12

나는 결정적이지 않은 유한 한 오토 마톤을 가지고 있으며이를 DFA로 변환해야합니다.

큰 의미에서 나는 40000 개 이상의 상태를 의미합니다. 지금까지 몇 가지 실험을 수행하고 테이블을 검색하는 기본 알고리즘을 프로그래밍 했지만 ( 여기에 설명 된대로 ) 최적화 후에도 메모리 속도가 매우 느리고 매우 소비됩니다. 나는 국가의 수가 기하 급수적으로 증가 할 수 있다는 사실을 알고 있지만, 최소화 후 결과 DFA는 약 9000 개의 주를 가지고 있으며 이는 견딜 수있다.

그래서 내 질문은 더 빠르거나 더 메모리 친화적 인 알고리즘이 있습니까?


비디오는 분명히 표준 결정 알고리즘에 있습니다. 예를 들어 결정없이 NFA 최소화, stackoverflow
vzn

제품 구성을 사용하여 순진한 NFA-> DFA 변환을 수행하는 경우 결과 DFA는 얼마나됩니까? (최소화하기 전에)
DW

2
DFA로 무엇을 하시겠습니까? 포함 확인에 관심이 있다면 직접 수행하는 알고리즘이 있습니다.
Vijay D

매우 빠른 답변에 감사드립니다. 크기의 경우 RAM이 부족한 이후 정확히 알 수는 없지만 자세히 살펴보고 질문을 확장하는 것입니다. 내가하고 싶은 일에 대해서는 공개적으로 대화 할 수 있는지 확실하지 않습니다. 왜냐하면 그것이 약간의 회사 노하우이기 때문입니다. 그러나 실제로 결과 DFA가 필요하다고 말할 수 있습니다.
Jendas

1
멤버십 및 동등성 쿼리에서 DFA를 학습하기 위해 Angluin의 알고리즘을 실행 해 보셨습니까? 멤버쉽 부분은 쉽습니다 (필수 문자열에서 DFA를 실행하면됩니다). 동등성을 위해 많은 임의의 문자열을 그리거나 모든 문자열을 특정 길이까지 시도 할 수 있습니다. 이것은 당신이 끝났을 때 실제로 알 수 없기 때문에 휴리스틱 일뿐입니다. 그러나이 트릭은 실제로 잘 작동한다는 것을 알았습니다 ...
Aryeh

답변:


6

Brzozowski의 알고리즘 을 사용해 보셨습니까 ? 최악의 경우 실행 시간이 기하 급수적이지만, 특히 DFA로 전환하고 최소화하려는 NFA로 시작할 때 성능이 매우 우수하다는 일부 참고 문헌을 참조하십시오.

다음 논문은 관련성이있는 것으로 보입니다.

NFA로 시작하여 DFA로 변환하고 최소화하려는 상황에 대한 응용 프로그램을 포함하여 DFA 최소화를위한 여러 가지 알고리즘을 평가합니다.

NFA의 강하게 연결된 구성 요소 (SCC) 분해 (직접 그래프로 간주)는 어떻게 생겼습니까? 너무 큰 구성 요소가없는 구성 요소가 많이 있습니까? 그렇다면 단일 구성 요소를 사용하여 NFA에서 DFA로 변환 한 다음 최소화 한 다음 원본을 새로운 결정 버전으로 대체하는 분할 및 정복 알고리즘을 고안 할 수 있는지 궁금합니다. 이는 단일 입력 구성 요소 (해당 구성 요소의 모든 모서리가 단일 정점, 진입 정점으로 이어짐)에 가능해야합니다. 임의의 NFA에 대해 이와 같은 작업을 수행 할 수 있는지 즉시 알 수는 없지만 SCC의 구조가 어떻게 보이는지 확인하면 이러한 종류의 방향을 탐색 할 가치가 있는지 여부를 결정할 수 있습니다. .


Brzozowski의 알고리즘은 유망한 것처럼 보이지만 나누기와 정복 기술은 훨씬 더 중요합니다! 필자의 경우 이것은 실제로 수행하기 쉽고 큰 코드 변경이 필요하지 않습니다. 나는 그것을 할 것이고 그것이 효과가 있다면 나는 당신의 대답을 받아 들일 것입니다.
Jendas

2
내가 와서 물었다. 나는 나눠서 정복했다.
Jendas

2

이것은 "DFA로 결정 / DFA 최소화"라는 원래 / 오래된 전략 이외의 알려진 / 사용 가능한 알고리즘의 관점에서 매우 잘 연구 된 문제는 아닙니다. 결정 단계가 문제가되는 단계를 나타내는 것 같지만 지수 공간 / 시간이 더 나쁜 경우가 일반적입니다. 평균적으로 성능이 크게 달라질 수있는 몇 가지 DFA 최소화 알고리즘 이 있습니다.

"비결정없이 NFA 최소화" 라고도 비공식적으로 알려져 있습니다 . 이 백서에 표시된 것처럼 P = Pspace가 아니면 근사 알고리즘도 기본적으로 존재하지 않는다는 점에서 어려운 것으로 알려져 있습니다.

그러나이 논문은 결정된 DFA 1 발견에 기초하지 않은 일부 알고리즘의 일반적으로 거의 연구되지 않은 사례를 고려한다 .

우리는 비 결정적 오토마타에서 상태의 수와 전이를 줄이기위한 다른 기술을 제시한다. 이러한 기술은 왼쪽 및 오른쪽 언어의 포함과 관련된 상태 집합에 대한 두 가지 선주문을 기반으로합니다. 정확한 계산은 NP-hard이기 때문에 NFA를 모두 똑같이 줄일 수있는 다항식 근사에 중점을 둡니다.

AT & T FSM 라이브러리 는 대규모 NFA / DFA 변환 / 최소화 등을 일반적으로 효율적으로 처리 할 수있는 공개 패키지 / 구현에 주목하십시오 .

fsmcompact때로는 충분할 수 있는 전략 이 있습니다.

트랜스 듀서 또는 가중 억 셉터를 결정할 수 없거나 매우 커질 경우 다른 최적화가 유용 할 수 있습니다 fsmcompact. 이 작업은 입력 레이블, 출력 레이블 및 비용의 각 3 배를 하나의 새 레이블로 인코딩하고 클래식 (무가 중 수락 자) 결정 및 최소화를 수행 한 다음 인코딩 된 레이블을 원래 값으로 다시 디코딩합니다. 이는 항상 정의되며 경로를 따라 출력 레이블이나 비용을 이동시키지 않는다는 이점이 있습니다. 결과가 결정적이거나 최소가 될 수 없다는 단점이 있습니다.


또한 참조 NFA 감소에 일리, 바로, 유
vzn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.