Possiamo dire che DFA è più efficiente di NFA?


13

Ho appena iniziato a leggere sulla teoria del calcolo. Se confrontiamo quale è più potente (nell'accettare le stringhe), entrambi sono uguali. Ma che dire dell'efficienza? DFA sarà veloce rispetto a NFA, poiché ha un solo vantaggio in uscita e non ci sarà alcuna ambiguità. Ma nel caso di NFA dobbiamo controllare tutti i casi possibili e ciò richiede sicuramente tempo. Quindi possiamo dire che DFA è più efficiente di NFA?

Ma anche l'altra parte del mio cervello sta pensando che l'NFA esiste solo in teoria, quindi non possiamo confrontare la sua efficienza con DFA.

Risposte:


16

Ci sono due risposte, a seconda di come definisci efficiente.

Compattezza della rappresentazione

Raccontare di più con meno : gli NFA sono più efficienti.

La conversione di un DFA in un NFA è semplice e non aumenta la dimensione della rappresentazione.

Tuttavia, esistono lingue regolari per le quali il DFA più piccolo è esponenzialmente più grande del NFA più piccolo. Un esempio tipico è per fisso.(a|b)b(a|b)kk

Calcolo

Esecuzione rapida : i DFA sono più efficienti.

I computer che usiamo oggi sono di natura deterministica. Ciò li rende cattivi nell'affrontare il non determinismo. Esistono due modi comuni di trattare in modo deterministico con gli NFA: il backtracking da un lato, che è piuttosto costoso, o tenere traccia degli stati attivi, il che significa che ogni transizione richiederà fino a volte più a lungo (dove è la dimensione dell'NFA) .NN


Per quanto riguarda la compattezza, gli NFA non sono sempre più efficienti! È vero che ci sono lingue per le quali il DFA minimo è esponenzialmente più grande del NFA più compatto, ma qual è la frazione di tali lingue nel set di tutte le lingue?
Saadtaame,

2
@saadtaame Può sembrare strano, ma nel senso più stretto, gli NFA non devono essere non deterministici. I DFA sono un tipo speciale di NFA, vale a dire NFA con un singleton come set iniziale e la funzione di transizione è tale che è attivo solo uno stato in un dato momento.
Khaur

2
-1 "aumentandone le dimensioni (potenzialmente molto)". Simulazione di insiemi di stati NFA mantenendo uno spazio di costi di elenco collegato al massimo nel numero di stati NFA. Il DFA equivalente, d'altra parte, potrebbe avere stati . O(N)O(2N)
Wandering Logic,

@WanderingLogic Hai ragione, la conversione non deve essere esplicita (stai ancora utilizzando il DFA equivalente, ma non in forma estesa). Tuttavia, il punto principale è ancora valido, poiché ciò richiede tempi di calcolo più lunghi rispetto all'esecuzione di un DFA della stessa dimensione . Correggerò l'ultimo paragrafo per tenerne conto. O(N)
Khaur,

Grazie per questa risposta, perché nella mia ricerca ho sostenuto che gli NFA sono migliori per la valutazione e vedo ora che il punto è più sottile. Nel complesso, gli NFA sono decisamente migliori per un linguaggio fisso, perché qualsiasi algoritmo di valutazione NFA intelligente corrisponderà alla complessità della valutazione DFA nel caso speciale in cui NFA sia un DFA e perché l'NFA potrebbe essere più conciso. Tuttavia, se la scelta è tra la produzione di un NFA altamente non deterministico o la ricerca di un modo intelligente per ottenere un DFA della stessa dimensione , invece, per alcune applicazioni particolari, DFA è migliore.
6005

4

In termini di potenza, sono equivalenti come hai detto e c'è un algoritmo (costruzione di sottogruppi) per convertire un NFA in un DFA equivalente. Come si può dire dal nome dell'algoritmo, costruisce sottoinsiemi di stati dell'NFA. Se il tuo NFA ha stati, l'algoritmo può generare un DFA con 2 n stati ma questo è un limite superiore. A volte, il numero di stati non cambia affatto o addirittura si riduce. Quindi, in pratica, conta meno su quale usare.n2n

La corrispondenza DFA è lineare nella dimensione della stringa di input. La corrispondenza NFA implica il backtracking, quindi gli NFA svolgono più lavoro. Pertanto, i DFA sono più efficienti.


Ma possiamo dire che DFA è più efficiente?
avi

1
@avi Ho modificato la domanda! A proposito, gli NFA non esistono solo in teoria: controlla questo: swtch.com/~rsc/regexp/regexp1.html
saadtaame,

@avi Il problema qui è che il DFA che è equivalente all'NFA (spesso) sarà molto più grande. Quindi, anche se puoi controllare il DFA molto più velocemente, di solito dovrai controllare un DFA più grande.
Peter,

@Peter, che il DFA è più grande non importa: significa solo che l'array che fornisce la funzione di transizione è più grande.
vonbrand,

1
@Khaur, vero. Ma se ti imbatti in quel tipo di problema, hai un enorme DFA.
vonbrand,

2

Basta aggiungere alle risposte sopra:

Gli NFA possono essere computazionalmente più efficienti dei DFA, nel senso che possono essere simulati su un processore parallelo.

A proposito: vedo la gente dire che gli NFA non possono esistere nella realtà. Mi permetto di dissentire. Un computer con un gran numero di processori può eseguire molte attività in parallelo e può essere considerato come una macchina non deterministica. Si potrebbe assegnare ogni ramo del calcolo a un nuovo processore e fermarli tutti quando uno di loro accetta.


1
Né i DFA né gli NFA esistono nella realtà, entrambi sono solo relazioni matematiche ed entrambi possono essere simulati da algoritmi.
jmite,

1

ϵ


ϵ

1
ϵ

ma DFA non è privo di transizioni ϵ?
avi

@avi, si. Sentiti libero di modificare la risposta se non è chiara lì.
vonbrand,

no, te lo sto chiedendo. Neanche io ne sono sicuro
avi

1

Come altri hanno notato, devi definire cosa significa "efficienza". Per illustrare questo, do un modello ragionevole con una risposta diversa.

Osservando solo i modelli di automi, che ignorano in particolare il modo in cui li implementereste su macchine reali, la misura evidente dell'efficienza è "il numero di transizioni eseguite su una corsa (il più breve) accettante".

ε


1

Tecnicamente parlando un NFA è un concetto più generale di un DFA, poiché non è necessario utilizzare il non determinismo. In altre parole: ogni DFA è un NFA. Da questo punto di vista esiste per ogni lingua un NFA che è almeno efficiente quanto il DFA più efficiente, per qualunque misura di efficienza tu preferisca.

A parte questo, concordo con Raphael che dipende molto da cosa intendi con efficienza e implementazione.


-4

Come sappiamo di Automata, ovvero una macchina che può compiere qualsiasi azione senza alcun potere umano o senza la partecipazione diretta dell'uomo. ad es .: lavatrice. Automi finiti significa che conosciamo lo stato di esecuzione delle attività per macchina come 1 premere ON 2 premere OFF quindi ci sono solo 2 stati, ovvero automi finiti. Ora vieni a DFA, ovvero automi finiti deterministici. significa formalmente che possiamo facilmente determinare gli stati in cui non c'è ambiguità e informalmente è necessaria solo 1 transizione consentita su 1 simbolo. NFA: automi finiti non deterministici. c'è bisogno di più tempo per calcolare lo stato attuale e c'è ambiguità e informalmente dice che c'è una transizione multipla consentita su 1 simbolo. in caso di tempo per raggiungere la destinazione NFA impiega più tempo di DFA ma NFA può caricare più dati di DFA. * DFA e NFA hanno lo stesso potere di riconoscere la stringa. grazie .. Deepali Kaushik


1
Gli automi finiti non hanno nulla a che fare con le lavatrici.
David Richerby,

2
@DavidRicherby. Forse la frase "niente" è un po 'forte. Dopotutto, potremmo dire che una lavatrice ha stati pronti , lavaggio , risciacquo e centrifuga con opportune transizioni tra stati. Una metafora migliore, tuttavia, sarebbe un distributore automatico di bibite a gettoni.
Rick Decker,

1
@RickDecker D'accordo, ma passare il tempo a discutere della piccola rilevanza sarebbe un esempio di ciò che Wikipedia chiama " peso eccessivo ". E, in ogni caso, la parte della risposta di cui sto parlando è discutere gli automi come macchine autoalimentate, non dispositivi computazionali.
David Richerby,

1
Non credo che questa risposta aggiunga qualcosa di utile alla domanda. In particolare, non sei chiaro sulla tua misura di efficienza e sembra mescolare diverse preoccupazioni.
Raffaello

Altre risposte esauriscono quasi tutto ciò che deve essere detto e sfortunatamente la tua risposta è leggermente confusa.
Evil
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.