비 결정적 오토 마톤은 오토 마톤이있는 상태와 입력 스트링이 얼마나 멀리 있는지를 추적하여 입력 문자열에서 쉽게 시뮬레이션 할 수 있습니다. 그러나 비 결정적 변환기 (변환기는 물론 입력 기호를 출력 기호로 변환하고 부울 값이 아닌 문자열을 출력으로 제공 할 수 있습니다)를 시뮬레이션 할 수 있습니까? 비대칭 성 때문에 수 많은 출력 문자열을 어떻게 든 추적해야하기 때문에 더 복잡합니다.비 결정적 유한 변환기를 어떻게 시뮬레이트 할 수 있습니까?
답변
기본적으로 NFA와 동일하지만 true 또는 false를 반환하는 대신 출력 세트에 출력을 추가합니다. 다음은 약간의 의사 코드입니다.
function rec(in, current_state, pos, out)
if(current_state.isFinal && pos == in.length) out_set += out
for(t <- lambda transition going out from current_state)
rec(in, t.destination, pos, out + t.output_symbol)
for(t <- transition going out from current_state for symbol in(pos)
rec(in, t.destination, pos+1, out + t.output_symbol)
나는 이해하지 못한다. 더 자세히 설명해 주시겠습니까? – oskarkv
우선, 일부 이론입니다. 다음은 별개의 대수 구조 :
발전기 (전환 시스템)
수용체 (자동 장치)
트랜스 듀서 (기계)
는 괄호 용어는 매우 일반적이다 문학에서 발견 된 것처럼, 아쉽게도 잘못 사용되는 경우가 많습니다. 이 대수적 구조는 서로 닮아있다. 많은 작은 변화를 통해 하나 또는 다른 것 또는 하이브리드로 전환 될 수있다. 그러나 그들은 근본적으로 다른 아칸소 사실로부터 방해하지 않아야
발전기 언어의 건설 표현, 즉 (유한 또는 무한) 단어의 집합이다. 당신은 비 결정 론적으로 생성자를 가로 지르고 그렇게함으로써 당신은 그 언어로 모든 단어를 생성합니다.
억 셉터는 다시 단어 세트 (언어)를 정의하기위한 구성이지만 각 가능한 단어 (유한 또는 무한)에 대한 표시 기능을 나타냅니다. 따라서 각 단어를 부울 값으로 매핑합니다 (트랜스 듀서와 비교하기 위해 유한 또는 무한 출력 단어로 적절히 확장 될 수 있음 - 구별되는 차이점 있음).
트랜스 듀서는 각각 허용 가능한 유한 입력 단어를에 매핑하는 기능을 나타냅니다 (). 셉터 관계없이 길이의 모든 유한 한 단어를 수락하거나 할 수 없기 때문에 제한된 언어의 맥락에서
무한 언어로 된 문맥에서 구별이 명확합니다. infinite-word automaton은은 주어진 (무한) 입력 단어의 유한 접두어에 대한 출력을 생성 할 수 없습니다. 이 제한은 전체 (무한한) 단어에 대해 무한 단어 수락이 정의 된 결과입니다.결과적으로 수용자는 각 입력 단어를 부울 값에 매핑하거나 그러한 관점이 선호되는 경우 출력 단어를 매핑합니다. 반대로 변환기 (기계)는 입력 단어의 각 유한 접두어를 동일한 길이의 유한 출력 단어에 매핑합니다. 이러한 이유 때문에 그들은 기계라고 부릅니다. 왜냐하면 단계별로 반응하기 때문입니다.
무어 기계가 반점이 기계에 의해 표현 될 수있다 : 트랜스 듀서의 두 가지 종류가
있습니다. 모든 Mealy 기계가 Moore 기계로 표현할 수있는 것은 아닙니다. 이 두 가지 유형의 트랜스 듀서를 정의하고 비교하는 데에는 일반적으로 잘못된 문법이 있습니다. 정확한 정의에 대해서는 원래의 출판물을 참조하십시오.
두 정의 모두 결정적입니다. 결정론에 대한 제한이있는 이유는 변환기가 시스템을 제어하는 데 사용되므로 적용 할 다음 제어 작업을 결정적으로 파악해야합니다. 이로 인해 결정 론적 변환기가 문헌에서 표준이되었습니다.
그러나, 비 결정적 변환기는 또한, 예를 들어 다중 전략의 소형 표현으로 유용 할 수있다. 그러나 실행될 때 단일 경로를 따라 가면서 동시에 여러 개가 아닌 단일 출력 단어를 생성하는 것이 타당합니다 (실행 중에 생성 된 비 결정적 인수 자의 경우와 동일).
따라서 트랜스 듀서의 비 결정적 시뮬레이션은 의도 한 용도와 일치하지 않습니다. 이것은 대안 전략의 집합을 나타냅니다 (하나의 고정 된 방식으로 결정할 때마다 혼합 될 수도 있습니다).
그래서 실제로 빠르게 폭발 할 수있는 가능한 출력 단어의 트리를 만들어야합니다. 이 트리는 본질적으로 입력 주석의 변환기를 제거하여 얻을 수있는 생성기 (전환 시스템)의 전개입니다.
- 1. 비 결정적 유한 자동화 문제
- 2. 비 결정적 유한 오토마타를 구축하십시오
- 3. 규칙 결정적 유한 오토마타
- 4. 어떻게 유한 오토마타를 구성 할 수 있습니까
- 5. 튜링 기계를 어떻게 시뮬레이트 할 수 있습니까?
- 6. 탭 컨트롤을 어떻게 시뮬레이트 할 수 있습니까?
- 7. 비 결정적 프로그래밍 언어
- 8. 결정적 유한 상태 오토 마톤 질문
- 9. 두 개의 결정적 유한 오토마타의 합집합?
- 10. 런타임까지 SimpleParse 비 결정적 문법
- 11. 하이퍼 그래프가 비 결정적 튜링 기계를 나타낼 수 있습니까?
- 12. 비 결정적 IRB 완료 동작?
- 13. TFS로 비 결정적 dll 체크인
- 14. 이 코드 블록에서 어떻게 hoverIntent를 시뮬레이트 할 수 있습니까?
- 15. ext3 파일 시스템 손상을 어떻게 시뮬레이트 할 수 있습니까?
- 16. 중단 된 웹 서비스를 어떻게 시뮬레이트 할 수 있습니까?
- 17. 코드에서 마우스 이벤트를 어떻게 시뮬레이트 할 수 있습니까?
- 18. TCP/IP 오류를 어떻게 시뮬레이트 할 수 있습니까?
- 19. 커스텀 버튼으로 UISegmentedControl을 어떻게 시뮬레이트 할 수 있습니까?
- 20. Android에서 전화와 SMS를 어떻게 시뮬레이트 할 수 있습니까?
- 21. 내 iPhone4에서 어떻게 클릭 이벤트를 시뮬레이트 할 수 있습니까? IOS
- 22. MySQL에서 print 서술문을 어떻게 시뮬레이트 할 수 있습니까?
- 23. MySQL UPDATE 문에서 어떻게 OFFSET을 시뮬레이트 할 수 있습니까?
- 24. 어떻게 포인터를 사용하지 않고 포인터를 시뮬레이트 할 수 있습니까?
- 25. 어떻게 복제를 사용하지 않고 CouchDB에서 충돌을 시뮬레이트 할 수 있습니까?
- 26. 이 응용 프로그램이 멈추는 시나리오를 어떻게 시뮬레이트 할 수 있습니까?
- 27. XSLT에서 부울 플래그를 시뮬레이트 할 수 있습니까?
- 28. 플러그인이나 UI없이 스크롤바를 시뮬레이트 할 수 있습니까?
- 29. 비 결정적 튜링 기계가있는 상황에 맞는 언어
- 30. 어떻게 비 정적에 액세스 할 수 있습니까?
확실히 더 복잡합니다. 시작 노드에서 깊이 우선 검색을하는 것보다 더 좋은 방법이 있는지 확신하지 못합니다. 모든 경로가 유효하고 독특한 출력을 생성하는 변환기를 정의 할 수 있습니다 ... 최악의 경우, 모든 경로를 걸어야합니다. – Patrick87