왜 NFA가 비결정론 적이라고 불리는가?


14

나는이 [재미있는] 질문을 염두에두고있다. 왜되는 비 결정적 유한 오토 마톤 라는 비 결정적 우리는 입력에 대해 전환을 정의하면서. 글쎄, 다중 및 엡실론 전환 이 있지만 , 그것들은 기계가 그러한 전환에 결정적임을 의미합니다. 그것은 결정적이라는 것을 의미합니다.


12
이론적 컴퓨터 과학에서 사용되는 비결정론은 무작위와 다릅니다.
adrianN

10
그것은의 선택에 결정적 인 전환 사이.
reinierpost

NFA 란 무엇입니까? (우리 가운데 계몽되지 않은 사람들을 위해)
DarcyThomas

@DarcyThomas, 내가 처음으로 소개 한 것은 swtch.com/~rsc/regexp/regexp1.html 입니다. NFA를 소개하는 기사 의 목적 은 아니지만 정규 표현식에 대해 논의하는 것이 좋습니다.
와일드 카드

답변:


22

"결정적"이란 "시스템을 동일한 상황에 두 번두면 두 번 모두 동일한 선택을 보장합니다"를 의미합니다.

"비결정론 적"은 "결정적이지 않은"을 의미합니다. 즉, "시스템을 동일한 상황에 두 번 배치하면 두 번 모두 동일한 선택을 할 수도 있고 그렇지 않을 수도 있습니다"라는 의미입니다.

비 결정적 유한 오토 마톤 (NFA)은 상태에서 여러 번의 전환을 가질 수 있습니다. 이는 해당 상황에서 수행 할 수있는 작업에 대한 여러 옵션이 있음을 의미합니다. 항상 같은 것을 선택해야하는 것은 아닙니다. 한 입력에서는 첫 번째 전환을 선택하고 다른 입력에서는 동일한 전환을 선택할 수 있습니다.

여기서 "상황"을 "입력에서 다음에 읽은 심볼과 함께 NFA의 상태"로 생각할 수 있습니다. 둘 다 동일하더라도 NFA는 여전히 해당 상태에서 벗어날 수있는 여러 개의 일치하는 전환이있을 수 있으며, 어느 것을 선택해야하는지 임의로 선택할 수 있습니다. 반대로 DFA에는 해당 상황에서 사용할 수있는 일치하는 전환이 하나만 있으므로 선택의 여지가 없습니다. 해당 상황에있을 때마다 항상 동일한 전환을 따릅니다.


"어느 쪽을 선택할지 임의로 선택할 수 있습니다." 기본적으로 확률적인 성격을 가지고 있습니까?
Trilarion

@ Trilarion, 아니오, 그것은 수락 상태로 이어지는 지 여부에 달려 있습니다. 실제로 확률 적 FA는 NFA의 일반화입니다.
rus9384

"비결정론 적"은 "결정 론적이지 않음", 즉 "시스템을 동일한 상황에 두 번 배치하면 두 번 동일한 선택을 할 수도 있고 그렇지 않을 수도 있음"을 의미합니다. 이것은 두 가지 다른 경우에 기계가 동일한 문자열을 수락하고 거부 할 수 있음을 의미합니다.
Madhusoodan P

3
@MadhusoodanP 당신의 직감은 여기에 쓰여진 것에서 정확하며, 그것은 우리가이 대답에서 빠진 것으로 이끌어줍니다. NFA를 분석 할 때 우리는 항상 가능한 모든 실행 경로를 고려 합니다 . 만큼 어떤 인정으로 받아들이는 상태로 그 기계의 리드에서 경로, 우리는 입력을 고려한다. 따라서 그것은 확률에 관한 것이 아니며, 수용 상태에 도달 할 수 있는지 여부에 관한 것입니다. NFA가 DFA로 축소되는 방법에 대해 생각할 때 이러한 직관이 더 명확 해집니다. NFA의 모든 가능한 실행을 시뮬레이션해야하므로 건설의 기하 급수적 인 폭발로 이어집니다.
ComicSansMS

3
이를 시각화하는 방법은 여러 전환을 선택할 수있는 경우 NFA가 모든 전환 을 수행한다고 가정하는 것입니다 . 입력 문자열이 도달 한 모든 상태의 트리와 같은 구조를 작성 하고 분기 하나가 수락 상태로 끝나는 경우 문자열이 승인됩니다. 즉, DFA, 당신은 요구하고있다 "입니다 상태 내 입력에 의해 도달이 상태를? 동의"는 NFA와 반면에, 당신은 요구하고있다 "입니다, 어떤 국가 내 입력에 의해 도달 온 상태를 받아 들일 수 있을까?".
해리슨 페인

8

이 자동 장치를 예로 들어 보면 NFA이고 문자열 허용합니다 . 더 pedantic하기 위해 10으로 끝나는 문자열을 허용 합니다.011010

오토 마톤 예, 출처 : /cs/61159/what-is-the-difference-between-following-two-finite-automata/61208

우리가 수락 상태에 도달했는지 확인하기 만하면됩니다.

q01q00q11q20

이제 빨간 줄에 또 다른 가능성이있었습니다. 즉, 두 번째 읽을 때 나는 q 0에 머물 수 있습니다.1q0 다음에 머물 마지막 읽을 때 0 . Automata에는 메모리가 없으므로 상태를 '저장'하고 내 문자열이 10으로 끝나는 지 나중에 확인할 수있는 방법이 없습니다.q0010 이 NFA와 비슷합니다 . 허용 가능한 상태로 분기하기 전에 문자열이 끝나는 지 여부를 추측합니다 . 여기서 비결정론은 많은 선택을하고 항상 올바른 선택을하는 것입니다.10

DFA를 만드는 것보다 NFA를 만드는 것이 더 쉽습니다. 좋은 점은 동등 .


예, 저는 NFA의 이론 부분을 알고 있습니다. 그러나 내가 묻는 것은 단일 입력 문자에 대해 여러 전환이 있어도 기계는 스레드를 생성하여 도달 할 수있는 모든 상태에 대해 결정적입니다. 따라서 문자 그대로 DFA입니다. [또는 결정론 의 의미를 잘못 해석한다고 생각
하십니까?

1
동일한 목적의 DFA가 NFA와 동일한 수의 상태를 사용하고 특별히 복잡하지 않기 때문에 예제는 약간 더 복잡한 NFA로 개선 될 수 있습니다. 대조적으로,보다 복잡한 정규식을 일치시키기 위해서는 복잡하고 지저분한 DFA가 필요할 수 있지만 NFA에서는 사소 할 수 있습니다.
supercat

ε

1
@Aristu 선호하는 프로그래밍 언어로 NFA를 구현하는 경우 스레드가 끔찍한 선택입니다. 오히려, 입력의 각 문자를 읽은 후 오토 마톤이 "있을 수있는"상태 세트를 추적해야합니다. 결과 코드는 DFA 구현만큼이나 빠릅니다.
David Richerby

1
ϵ

5

NFA의 전환 기능은 특정 시점에서 허용되는 전환을 지정합니다. 하나 이상의 옵션이있을 수 있으며 NFA 는 최종적으로 수용 상태에 도달 할 목적으로 비 결정적 으로 전이를 선택합니다 .

비 결정적 튜링 머신에 대해 배울 때까지 기다려야 할 것입니다. 비결정론은 두 경우 모두 같은 의미입니다.


"비 결정적으로 전이"를 강조 할 수 있습니까? 또한 내 답변을 검토하십시오
Madhusoodan P

당신의 직감은 건전하지만 우리의 대답은 모두 좋지 않다고 생각합니다.
Yuval Filmus

3

유한 오토 마톤으로 시작하십시오. 상태와 승인 상태 및 전환이 있습니다.

이제 각 상태에 대해 둘 이상의 전이 규칙을 제공하고 일련의 전이 규칙 있는 경우 수락한다고 말하십시오. 을 부여하고, 사실 이후에 선택된 하십시오. 제공하고 입력 문자열이 주어지면 수락 상태로 이어지는 .

입력 문자열이 있으면 고정 된 구체적인 전환 세트가 있으며 해당 문자열을 수락하기 위해 한 번에 하나씩 진행됩니다. 그러나 선택하는 전환 은 문자열의 끝 에서만 선택 됩니다 . 문자열을 읽는 동안 수행 할 경로는 결정되지 않습니다.

비 결정적입니다. 입력을 읽을 때가 아니라 전체 문제가 발생한 후 그래프를 통해 경로를 선택합니다.


자, 우리는 이것을이 생각 실험과 다르게 공식화하지만, 이것이 왜 그 이름을 얻었는지 동기를 부여합니다.

이것은 처음에 어떻게 이름을 얻었는지 설명합니다. 예, NDFA를 완전히 결정 론적으로 모델링 할 수 있지만 이름은 고정되어 있습니다. 일단 Bob이라고 부르면 Alice라고 할 때 아무도 당신이 무슨 말을하는지 알지 못하므로 다른 이름으로 바꾸려면 통신 비용이 발생합니다.


예! NFA에 대한 귀하의 설명에 동의합니다. 그러나 내 질문은 일련의 상태가 단일 입력에 대해 정의되었지만 왜
결정적이지 않은지에 관한 것입니다.

@MadhusoodanP 그것은 발명 / 계획 된 방식 때문에 비 결정 론적 이라고 합니다. 그리고 우리가 multilpe를 완전히 결정적인 방법으로 정의 한 후에도 이름은 끈적 거리지 않습니다.
Yakk

1

에서 위키 피 디아 , 이것에 대해 생각하는 가장 좋은 방법은 결정적 유한 상태 기계 (DFA)와 함께 시작하는 것입니다. DFA의 경우 각 전환은 현재 상태 및 처리 할 입력 심볼에 따라 고유하게 결정됩니다. 비결정론 적 유한 상태 머신 (NFA)은 전환이 고유하게 정의되지 않도록이 결정론 규칙을 완화 할 때 얻는 것입니다. DFA에서 결정 규칙을 제거하면 얻을 수있는 것입니다.


비결정론도 특정 수용 조건이기 때문에 조금 더 복잡합니다.
Yuval Filmus

1

NFA와 DFA는 모두 다른 문자열 중에서도 특정 문자열을 인식하는 데 사용됩니다.

비 결정적 유한 오토 마톤은 결정에 영향을 미쳤던 것처럼 작동합니다. 경로를 따르도록 "선택"할 수 있습니다.

NFA example

위의 이미지에서 문자열 "00111"을 처리 할 때 첫 번째 "1"을 발견하면 따라야 할 두 가지 방법이 있습니다. "p"에 머 무르거나 "q"로 갈 수 있습니다. 오토마타가 "q"로 이동해야한다면, 문자열을 받아들이지 않을 것입니다 ( "q"에서 가장자리가 나오지 않기 때문에). 그러나 문자열은 마지막 1로 "q"로 이동하여 다른 모든 것을 위해 "p"를 유지 함으로써이 automata에 의해 받아 들여질 수 있습니다 (그리고 그 일이 일어나고 있습니다).

NFA는이를 "자동화"한 것처럼 보이게하고 그에 따라 선택합니다.

물론 그렇지 않습니다. DFA와 NFA는 전력면에서 동등합니다 (NFA를 DFA로 줄이고 NFA를 사용하여 DFA를 더 간단하게 만들 수 있음). 그러나 NFA는 그래프를 많이 유지하면서 DFA와 동일한 언어를 정의 할 수 있기 때문에 유용합니다 더 짧고 읽기 쉽습니다.

거기에는 무작위가 없습니다. 결정적이지 않은 부분은 취해야 할 "선택"이 있다는 사실에 중점을 두지 만, 진실은 오토마타가 결정을 내리지 않는다는 것입니다.


0

여기에 [Peter Linz 4E의 공식 언어 및 오토마타 입문]의 내용과 나의 이해가 혼합되어 있습니다.

기계가 다음 움직임을 결정해야하는 게임 재생 프로그램을 고려하십시오 (예 : 틱택 토). 여러 이동이 가능하므로 결정적으로 각 이동을 선택하고 이동을 평가하고 가장 적합한 것을 선택합니다. 선택 과정이 결정 론적이며 가능한 많은 움직임이 있었음에도 불구하고, 최종적인 움직임은 단일 움직임이었고 시도 된 모든 움직임 계산을 상대방으로부터 숨기면서 최고의 움직임으로 선택되었습니다. [여기서 우리는 각각의 가능한 움직임의 평가 과정이 상대방에게 숨겨져 있다고 가정합니다].

따라서 하나의 선택 만하고 상대방에게 움직임이 결정적이지 않은 환상을 갖게됩니다.

글쎄, 당신이 최선의 움직임이 결정 론적 계산의 산물이라고 묻는 것에 의해 아직 확신하지 못한다면, 완벽하게 무작위적인 움직임을 만드는 기계를 고려해야합니다 (기계가 느슨해 지지만 NFA 일 것입니다).


1
이것을 넣는 또 다른 방법 : 상대방 에게 당신의 선택은 비 결정적이었습니다. 상대방의 관점에서 시스템을 모델링 할 때 상대방이 결정적인 과정을 알아 내지 않은 한, 당신의 움직임은 결정적이지 않은 선택입니다.
reinierpost

@reinierpost 내가 정확히 말하고 싶었던
Madhusoodan P

더 흥미로운 예는 정보가 제한된 움직이는 조각 게임 (예 : "경찰과 강도"스타일) 일 수 있습니다. 한 선수는 미로를 도둑질하고 다른 선수는 경찰을 움직입니다. 경찰이 강도를 볼 수있는 경우, 강도는 그 위치가되지만 경찰이 강도를 볼 수 없을 때마다 강도는 그 위치에 인접한 광장으로 이동할 수 있으며 경찰은 그 순간에 보이지 않습니다.
supercat

니스 하나 @supercat하지만, 만든 전환은 항상 하나의 상태이며, 당신은 최고의 이동의 계산을 숨길 경우는 비 결정적 보인다
Madhusoodan P
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.