나는 프로젝트에서 자바로 작업하고있다. (그러나 언어에 의존하지 않는다고 생각한다.) 작은 (4 상태 최대) 비 결정적 유한 상태 오토마타 이진 알파벳에 나는 이전의 것들과 동등한 것을 위해 생성 된 automaton을 빨리 체크해야한다. 따라서 너무 많은 automatas를 사용하지 않으려면 몇 가지 좋은 해시 함수를 사용해야합니다.유한 상태 오토마타에 의해 받아 들여지는 언어를위한 좋은 해시 함수를 찾는 것
첫 번째 생각은 전환시 DFS를 수행하고 길이가 최대가 될 때까지 허용 된 단어를 모두 찾았습니다. 5 그리고 나서 받아 들여진 단어 집합을 64 비트 길이 (길이가 최대 5 인 이진 단어의 양)로 매핑합니다. 그러나 그것은 4 개주의 NFA에서 너무 많은 충돌을 일으키는 것으로 보인다. 길이를 늘리면 해시 코드의 계산이 실제 사용에 비해 너무 느려집니다.
또 다른 접근법은 일련의 단어를 가지고 있고 그것들 중 어떤 것이 오토 마톤을 받아들이지 만 올바른 단어를 찾는 지 테스트하는 것이 사소한 것이 아닙니다.
속도가 크게 저하되지 않으면 서 너무 많은 충돌을 피하기 위해 해시 기능을 개선하는 방법에 대해 알고 계십니까? 단사 어떤 NFA의 기능 (더 정확하게 또는, 그것에 의해 받아 들여 언어) 정수로 - -의가 보자
가
하위 구성을 사용하여 NFA를 DFA로 변환 한 다음 DFA를 표준 DFA로 최소화 할 수 있습니까? – templatetypedef
예, 가능합니다. 단점은 상당히 저렴한 작업입니다. 이제는 dfa 최소화를 위해 Brozowski 알고리즘을 사용합니다. 매우 느린 것처럼 보이지만 Hopcroft가 더 빨라지기를 바랍니다. 구현하겠습니다. 해시 계산에 도움이 될 것이라고 생각하십니까? –
@RafaelK .: 정확하게 상태와 전환을 비교하여 최소화 된 DFA를 해시로 사용할 수 있습니다. – justhalf