Perché NFA è chiamato non deterministico?


14

Ho in mente questa [specie di divertente]. Perché l' automa finito non deterministico è chiamato non deterministico mentre definiamo le transizioni per gli input. Bene, anche se ci sono transizioni multiple ed epsilon , sono definite, il che significa che la macchina è deterministica per quelle transizioni. Ciò significa che è deterministico.


12
Non deterministico come usato nell'informatica teorica è diverso da quello casuale.
adrianN,

10
È la scelta tra le transizioni non deterministica.
reinierpost,

Che cos'è un NFA? (Per i non illuminati tra noi)
Darcy Thomas

@DarcyThomas, la prima introduzione che ho avuto è stata swtch.com/~rsc/regexp/regexp1.html . È una buona lettura: non è lo scopo dell'articolo introdurre gli NFA, ma fa un buon lavoro nel discuterne con le espressioni regolari.
Carattere jolly

Risposte:


22

"Deterministico" significa "se si mette il sistema nella stessa situazione due volte, è garantito che si faccia la stessa scelta entrambe le volte".

"Non deterministico" significa "non deterministico" o, in altre parole, "se si mette il sistema nella stessa situazione due volte, potrebbe o meno fare la stessa scelta entrambe le volte".

Un automa finito non deterministico (NFA) può avere più transizioni da uno stato. Ciò significa che ci sono più opzioni per quello che potrebbe fare in quella situazione. Non è costretto a scegliere sempre lo stesso; su un input, potrebbe scegliere la prima transizione e su un altro input potrebbe scegliere la stessa transizione.

Qui puoi pensare a "situazione" come a "in che stato si trova l'NFA, insieme a quale simbolo viene letto dopo l'input". Anche quando entrambi sono uguali, un NFA potrebbe avere ancora più transizioni corrispondenti che possono essere portate fuori da quello stato e può scegliere arbitrariamente quale prendere. Al contrario, un DFA ha solo una transizione corrispondente che può essere intrapresa in quella situazione, quindi non ha scelta: seguirà sempre la stessa transizione ogni volta che si trova in quella situazione.


"può scegliere arbitrariamente quale prendere." Quindi ha fondamentalmente una natura probabilistica?
Trilarion,

@Trilarion, no, dipende dal fatto che porti ad accettare o meno lo stato. In effetti la FA probabilistica è una generalizzazione per NFA.
rus9384

"Non deterministico" significa "non deterministico" o, in altre parole, "se si mette il sistema nella stessa situazione due volte, potrebbe o meno fare la stessa scelta entrambe le volte". con questo intendi che la macchina può accettare e rifiutare la stessa stringa in due casi diversi.
Madhusoodan P

3
@MadhusoodanP La tua intuizione è corretta da ciò che è stato scritto qui, e questo ci porta a ciò che manca a questa risposta: quando analizziamo gli NFA consideriamo sempre tutti i possibili percorsi di esecuzione. Finché qualsiasi percorso in quella macchina porta a uno stato accettante, consideriamo l'input come accettato. Quindi non si tratta affatto di probabilità, si tratta semplicemente di raggiungere o meno uno stato accettante. Questa intuizione diventa più chiara quando si pensa a come gli NFA sono ridotti ai DFA: dobbiamo simulare tutte le possibili esecuzioni dell'NFA, che porta allo scoppio esponenziale della costruzione.
ComicSansMS,

3
Un modo per visualizzarlo è quello di supporre che, laddove si possano scegliere più transizioni, l'NFA prende tutte le transizioni. Si crea una struttura ad albero di tutti gli stati raggiunti da una stringa di input e se uno qualsiasi dei rami termina in uno stato di accettazione, la stringa viene accettata. In altre parole, con un DFA, stai chiedendo " lo stato raggiunto dal mio input è uno stato di accettazione?", Mentre con un NFA stai chiedendo "è uno stato che potrebbe essere raggiunto dal mio input uno stato di accettazione?".
Harrison Paine

8

Prendi questo automa per esempio, è un NFA e accetta la stringa . Per essere più pedante, accetta stringhe che terminano con 10 .011010

Esempio di automa, fonte: /cs/61159/what-is-the-difference-between-following-two-finite-automata/61208

Per vedere che dobbiamo solo verificare se raggiunge uno stato di accettazione.

q01q00q11q20

Ora nella riga rossa c'era un'altra possibilità, cioè quando leggevo il secondo potevo rimanere in q 0 e quindi rimanere in q 0 quando leggevo l'ultimo 0 . Gli automi non hanno memoria, quindi non c'è modo di "salvare" uno stato e verificare in seguito se la mia stringa termina con 10 , è come questo NFA sta facendo un'ipotesi se la stringa termina con 10 prima di diramarsi in uno stato accettabile. Il non determinismo qui sta facendo molte scelte e sempre facendo quelle giuste.1q0q001010

Costruire un NFA è più semplice che costruire un DFA, il bello è che entrambi sono equivalenti .


Sì, conosco la parte teorica di NFA. Ma quello che stavo chiedendo era anche se ci sono più transizioni per un singolo carattere di input, la macchina è deterministica su ciò che tutti gli stati può raggiungere (diciamo creando thread). Quindi è letteralmente DFA. [O pensi che io
stia

1
L'esempio potrebbe essere migliorato con un NFA leggermente più complicato, dal momento che un DFA per lo stesso scopo userebbe lo stesso numero di stati del tuo NFA e non sarebbe particolarmente complicato. Al contrario, la corrispondenza di un'espressione regolare più complicata può richiedere un DFA complicato e disordinato ma essere banale in un NFA.
Supercat,

ε

1
@Aristu Se stai implementando un NFA nel tuo linguaggio di programmazione preferito, i thread sono una scelta terribile . Piuttosto, dovresti semplicemente tenere traccia dell'insieme di stati in cui l'automa "potrebbe trovarsi" dopo aver letto ogni carattere di input. Il codice risultante sarà veloce quasi quanto un'implementazione di DFA.
David Richerby,

1
ε

5

La funzione di transizione di un NFA specifica le transizioni consentite in qualsiasi momento. Potrebbe esserci più di un'opzione e l'NFA sceglie una transizione in modo non deterministico con l'obiettivo di raggiungere infine uno stato accettante.

Forse dovresti aspettare di conoscere le macchine di Turing non deterministiche. Il non determinismo significa la stessa cosa in entrambi i casi.


puoi per favore sottolineare che "una transizione non deterministica". E
rivedi

Penso che entrambe le nostre risposte non siano molto buone, anche se la tua intuizione è solida.
Yuval Filmus,

3

Inizia con un automa finito. Ha stati e stati di accettazione e transizioni.

Ora, dagli più di una regola di transizione per ogni stato e dì che accetta se esiste un insieme di regole di transizione scelte dopo il fatto che porta allo stato di accettazione data una stringa di input.

Una volta che hai la tua stringa di input, c'è una serie fissa di transizioni concrete e afferma che passa (una alla volta) per accettare quella stringa. Ma quali transizioni seleziona vengono scelte solo alla fine della stringa . Durante la lettura della stringa, quale percorso prendere non è determinato.

Non è deterministico. Riesce a scegliere il suo percorso attraverso il grafico dopo avergli dato l'intero problema, non mentre legge l'input.


Ora formalizziamo questo in modo diverso rispetto a questo esperimento mentale, ma questo ti dà la motivazione per cui ha preso quel nome.

Questo spiega come ha ottenuto il nome in primo luogo. Sì, puoi modellare NDFA in un modo completamente deterministico, ma i nomi sono appiccicosi . Una volta che hai chiamato qualcosa Bob, c'è un costo di comunicazione per rinominarlo in qualcos'altro in quanto nessuno sa di cosa stai parlando quando lo chiami Alice.


sì! Sono d'accordo con la tua spiegazione su NFA. Ma la mia domanda è perché non è deterministico anche se l'insieme di stati è definito per un singolo input
Madhusoodan P

@MadhusoodanP Si chiama non deterministico a causa di come è stato inventato / immaginato. E i nomi sono appiccicosi, anche dopo aver definito modi completamente deterministici multilpe per modellarlo.
Yakk,

1

Da Wikipedia , il modo migliore per pensarci è iniziare con le macchine a stati finiti deterministici (DFA). Per un DFA, ogni transizione è determinata in modo univoco dallo stato corrente e dal simbolo di input da elaborare. Le macchine a stati finiti non deterministici (NFA) sono semplicemente ciò che ottieni quando rilassi questa regola di determinismo per consentire alle transizioni di non essere definite in modo univoco. È quello che ottieni quando rimuovi la regola determinisim dai DFA.


È un po 'più complicato, poiché il non determinismo è anche una condizione di accettazione specifica.
Yuval Filmus

1

NFA e DFA sono entrambi utilizzati per (tra le altre cose) riconoscere determinate stringhe.

L'automa finito non deterministico funziona come se avesse un'influenza sulle sue decisioni: può "scegliere" di seguire un percorso o no.

Esempio NFA

Nell'immagine sopra, quando abbiamo a che fare con la stringa "00111", notate che quando incontriamo il primo "1", ci sono due modi possibili da seguire. Si può rimanere in "p" o andare in "q". Se gli automi dovessero spostarsi su "q", non accetterebbero la stringa (poiché non ci sono bordi che escono da "q"). Ma la stringa può essere accettata da questi automi andando su "q" con solo l'ultimo 1, rimanendo su "p" per tutto il resto (ed è quello che sta succedendo).

NFA fa sembrare che gli automi "sapessero" cosa ci aspetta e sceglie di conseguenza.

Certo che no. DFA e NFA sono equivalenti in termini di potenza (puoi ridurre NFA a DFA e rendere DFA (probabilmente) più semplice con l'uso di NFA), ma NFA è utile, perché ha permesso di definire le stesse lingue di DFA mantenendo i grafici molto più breve e più leggibile.

Non c'è nulla di casuale lì dentro. La parte non deterministica pone l'accento sul fatto che c'è qualche "scelta" da prendere, ma la verità è che gli automi non prendono alcuna decisione.


0

Bene, ecco il mix di alcuni contenuti del libro [Introduzione ai linguaggi formali e agli automi di Peter Linz 4E] e la mia comprensione.

Prendi in considerazione un programma di gioco in cui la macchina deve prendere la decisione per la mossa successiva [dire per tic-tac-toe]. Poiché sono possibili più mosse, scegliamo in modo deterministico ciascuna mossa e valutiamo la mossa e optiamo per la migliore. Anche se il processo di selezione era deterministico e c'erano molte mosse possibili, la mossa finale fatta era una sola ed è stata scelta come mossa migliore nascondendo tutti i calcoli delle mosse provate dall'avversario. [Qui assumiamo che il processo di valutazione di ogni possibile mossa fosse nascosto all'avversario].

Quindi una sola scelta è stata fatta e all'avversario viene data un'illusione tale che la mossa fosse non deterministica.

Bene, se non sei ancora convinto chiedendo che la mossa migliore sia stata il prodotto di alcuni calcoli deterministici, allora devi considerare la macchina che fa mosse perfettamente casuali (può essere una macchina che perde ma è un NFA).


1
Un altro modo di dirlo: per l'avversario , la tua scelta è stata non deterministica. Nel modellare il sistema dalla vista dell'avversario, la tua mossa è una scelta non deterministica, a meno che l'avversario non abbia capito il processo deterministico dietro di esso.
reinierpost,

@reinierpost esattamente quello che volevo dire
Madhusoodan P

Un esempio più interessante potrebbe essere un gioco a pezzi mobili con informazioni limitate (ad es. Stile "poliziotti e ladri"). Un giocatore muove un ladro attorno a un labirinto mentre l'altro giocatore muove poliziotti. In qualsiasi momento in cui un poliziotto può vedere un ladro, lo stato del ladro sarà la sua posizione, ma in ogni turno in cui nessuno dei poliziotti vede il ladro, il ladro può passare a tutti i quadrati adiacenti alla sua posizione e che i poliziotti possono in quel momento.
Supercat,

@supercat Bello, ma la transizione fatta è sempre un singolo stato, e se nascondi il calcolo della mossa migliore sembra non deterministico
Madhusoodan P
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.