DFA가 NFA보다 효율적이라고 말할 수 있습니까?


13

방금 계산 이론에 대해 읽기 시작했습니다. 어느 것이 더 강력한 지 (문자열 수용에서) 비교하면 둘 다 동일합니다. 그러나 효율성은 어떻습니까? DFA는 나가는 가장자리가 하나 뿐이며 모호성이 없으므로 NFA에 비해 빠릅니다. 그러나 NFA의 경우 가능한 모든 사례를 확인해야하며 시간이 오래 걸립니다. DFA가 NFA보다 더 효율적이라고 말할 수 있습니까?

그러나 뇌의 다른 부분은 NFA가 이론에만 존재한다고 생각하므로 DFA와 효율성을 비교할 수 없습니다.

답변:


16

효율적인 정의 방법에 따라 두 가지 답변이 있습니다.

표현의 소형화

적은 비용으로 더 많은 것을 말하십시오 : NFA가 더 효율적입니다.

DFA를 NFA로 변환하는 것은 간단하며 표현의 크기를 늘리지 않습니다.

그러나 가장 작은 DFA가 가장 작은 NFA보다 기하 급수적으로 큰 정규 언어가 있습니다. 전형적인 예이다 에 대한 K 고정.(a|b)b(a|b)kk

계산

빠른 실행 : DFA가 더 효율적입니다.

오늘날 사용하는 컴퓨터는 본질적으로 결정 론적입니다. 그것은 비결정론을 다루는 데 나쁜 영향을 미친다. NFA를 결정적으로 처리하는 두 가지 일반적인 방법이 있습니다. 한쪽의 역 추적, 다소 비용이 많이 들거나 활성 상태를 추적하는 것입니다. 즉, 각 전환이 최대 배 더 오래 걸립니다 (여기서 N 은 NFA의 크기 임) .NN


압축성과 관련하여 NFA가 항상 더 효율적인 것은 아닙니다! 최소 DFA가 가장 컴팩트 한 NFA보다 기하 급수적으로 큰 언어가 있지만 모든 언어 세트에서 그러한 언어의 일부는 무엇입니까?
saadtaame

2
@saadtaame 그것은 이상하게 보일 수도 있지만, 가장 엄격한 의미에서 NFA는 비 결정적 일 필요는 없습니다. DFA는 특수한 종류의 NFA입니다. 즉, 시작 세트로 싱글 톤이있는 NFA이며 전환 기능은 주어진 시간에 하나의 상태 만 활성화되도록합니다.
카 우르

2
-1 "크기 증가 (잠재적으로 많음)". 연결된 목록 비용 공간 을 NFA 상태 수 에서 최대 로 유지하여 NFA 상태 세트를 시뮬레이션합니다 . 반면, 동등한 DFA는 O ( 2 N ) 상태 일 수 있습니다 . O(N)O(2N)
방황 논리

O(N)

이 답변에 감사드립니다 .NFA가 평가에 더 좋다고 주장하면서 요점이 더 미묘하다는 것을 알았습니다. 스마트 NFA 평가 알고리즘이 NFA가 DFA 인 특수한 경우 NFA가 더 간결 할 수 있기 때문에 DFA 평가 복잡성과 일치하기 때문에 NFA는 전반적으로 고정 언어에 더 좋습니다. 그러나 결정적이지 않은 NFA를 생성하거나 특정 크기 의 DFA 를 동일한 크기 의 DFA를 얻는 영리한 방법을 찾는 것 중에서 선택하는 경우 DFA가 더 좋습니다.
6005

4

n2n

DFA 일치는 입력 문자열 크기에서 선형입니다. NFA 일치에는 역 추적이 포함되므로 NFA가 더 많은 작업을 수행합니다. 따라서 DFA가 더 효율적입니다.


그러나 DFA가 더 효율적이라고 말할 수 있습니까?
avi

1
@avi 질문을 편집했습니다! 그런데 NFA는 이론 상으로는 존재하지 않습니다 : swtch.com/~rsc/regexp/regexp1.html
saadtaame

@avi 여기서 문제는 NFA와 동등한 DFA가 (대개) 훨씬 더 크다는 것입니다. 따라서 DFA를 훨씬 빨리 확인할 수 있지만 일반적으로 더 큰 DFA를 확인해야합니다.
Peter

@Peter, DFA가 더 크다는 것은 중요하지 않습니다. 단지 전환 기능을 제공하는 어레이가 더 크다는 것을 의미합니다.
vonbrand

1
@ 카 우르, 사실입니다. 당신이 들어갈하지만 문제의 종류, 당신은 엄청난 DFA 있습니다.
vonbrand

2

위의 답변에 추가하기 만하면됩니다.

NFA 병렬 프로세서에서 시뮬레이션 할 수 있다는 점에서 DFA보다 계산 효율성이 더 뛰어납니다.

BTW : 사람들은 NFA가 실제로 존재할 수 없다고 말하는 것을 봅니다. 나는달라고 간청한다. 프로세서 수가 많은 컴퓨터는 많은 작업을 병렬로 실행할 수 있으며 비 결정적 시스템으로 간주 될 수 있습니다. 계산의 각 분기를 새 프로세서에 할당하고 수락 할 때마다 모두 중지 할 수 있습니다.


1
DFA 나 NFA는 실제로 존재하지 않으며 둘 다 수학적 관계 일뿐 아니라 알고리즘으로 시뮬레이션 할 수 있습니다.
jmite 2016 년

1

ϵ


ϵ

1
ϵ

그러나 DFA가 ϵ 전환에서 자유롭지 않습니까?
avi

@avi, 그렇습니다. 답변이 명확하지 않으면 자유롭게 편집하십시오.
vonbrand 2013

아니요, 부탁합니다. 잘 모르겠습니다
avi

1

다른 사람들이 지적했듯이 "효율"의 의미를 정의해야합니다. 이것을 설명하기 위해 나는 다른 대답으로 합리적인 모델을 제시합니다.

특히 실제 머신에서 어떻게 구현할 것인지를 무시하고있는 오토 마톤 모델 살펴보면 명백한 효율 측정은 "(가장 짧은) 실행에서 수행 된 전환 수"입니다.

ε


1

기술적으로 NFA는 비결정론을 사용할 필요가 없기 때문에 DFA보다 일반적인 개념입니다. 다시 말해 모든 DFA는 NFA입니다. 이러한 관점에서 모든 언어에 대해 가장 효율적인 DFA만큼 효율적인 NFA가 있습니다.

이것 외에는 Raphael에 동의하는데, 그것은 효율성 과 구현에 대한 의미가 매우 중요하다는 데 동의합니다 .


-4

우리가 알고있는 Automata, 즉 사람의 힘이나 사람의 직접적인 참여없이 어떤 행동을 수행 할 수있는 기계. 예 : 세탁기. 유한 오토마타는 1 프레스 ON 2 프레스 OFF와 같은 기계로 작업을 수행하는 상태를 알고 있으므로 유한 오토마타라고하는 2 가지 상태 만 있습니다. 이제 결정 론적 유한 오토마타와 같은 DFA로 오십시오. 공식적으로는 모호성이없는 상태를 쉽게 확인할 수 있으며 비공식적으로 1 개의 심볼에 1 개의 전환 만 허용하면됩니다. NFA : 비 결정적 유한 오토마타. 실제 상태를 계산하는 데 더 많은 시간이 필요하며 모호성이 있으며 비공식적으로 1 개의 심볼에 여러 개의 허용되는 전환이 있다고 말합니다. 대상에 도달하는 데 시간이 걸리는 경우 NFA는 DFA보다 시간이 더 걸리지 만 NFA는 DFA보다 더 많은 데이터를로드 할 수 있습니다. * DFA와 NFA는 문자열을 인식하는 능력이 동일합니다. 감사합니다 .. Deepali kaushik


1
유한 오토마타는 세탁기와 관련이 없습니다.
David Richerby 2016 년

2
@DavidRicherby. 어쩌면 "아무것도 없다"라는 문구가 약간 강합니다. 결국 세탁기는 상태 사이에 적절한 전환으로 준비 , 세척 , 헹굼회전 상태 있다고 말할 수 있습니다. 그러나 더 나은 은유는 동전으로 작동되는 소다 자판기입니다.
Rick Decker

1
@RickDecker 동의하지만 작은 관련성을 논의하는 데 시간을 보내는 것이 Wikipedia가 "무중 한 무게 "라고 부르는 예가 될 수 있습니다 . 그리고 어쨌든 내가 말하는 대답의 일부는 자동 장치를 계산 장치가 아닌 자체 전원 공급 장치로 논의하는 것입니다.
David Richerby 2016 년

1
이 답변이 질문에 가치있는 것을 추가한다고 생각하지 않습니다. 특히, 효율성 측정 방법이 확실하지 않으며 몇 가지 우려 사항을 혼합 한 것으로 보입니다.
Raphael

다른 답변은 거의 모든 것을 말할 수 없으며 불행히도 귀하의 답변은 약간 혼란 스럽습니다.
Evil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.