Sì, hai ragione i computer sono automatici deterministici. I modelli non deterministici sono più utili ai fini teorici, a volte la soluzione deterministica non è così ovvia alla definizione (o si dice affermazione del problema) e quindi poco difficile da trovare una soluzione. Quindi un approccio è quello di progettare prima un modello non deterministico che può essere relativamente facile da progettare e quindi provare a convertirlo in uno deterministico. Di seguito, ho provato a dimostrare cosa intendo con un esempio. Considera l'espressione regolare:
(01)*01(0 + 1)*
Supponiamo ora che ti venga chiesto di disegnare DFA per la lingua generata da RE.
Con la mia conoscenza della progettazione FAs, so che (1) quando un *
presente in un'espressione regolare indicato ho bisogno di ciclo corrispondente FA (2) operazioni concatenate come a.b
significa qualcosa come: .(q0)─a→(q1)─b→(q2)
Quindi, al mio primo tentativo, disegnerei un NFA come:
Pensato che questa non sia una soluzione deterministica ma sembra molto semplice FA che può essere facilmente progettata usando l'espressione regolare data. Il mio tipo di analogia per mostrare la somiglianza tra l'espressione regolare sopra e il mio NFA è il seguente:
- Il loop allo stato q 0 dovrebbe essere per
(01)*
01
(dopo (01)*
) dà(q0)─0→(q1)─1→(q2)
(0 + 1)*
fornisce un loop automatico allo stato q 2 per l'etichetta 0, 1
Secondo la mia analogia, penso che la FA che ho disegnato sopra sia relativamente semplice da trarre da una data RE. E fortunatamente in classe di automi finiti ogni modello non deterministico può essere convertito in un equivalente deterministico. Abbiamo un metodo algoritmico per convertire un NFA in DFA . Quindi posso facilmente convertire sopra NFA in un DFA:
L'altra parte è sfortunatamente ciò non è sempre possibile convertire un modello non deterministico in un modello deterministico, ad esempio la classe per il push down deterministico automatizza è un sottoinsieme della classe del push-down deterministico automatizza il "check venn diagram " e non puoi sempre convertire un NPDA in un PDA.
Di solito quando non è possibile convertire una soluzione non deterministica in una soluzione deterministica, allora con l'aiuto di una soluzione non deterministica definiamo una soluzione deterministica in un sottodominio (o diciamo dominio parziale) anziché in un dominio completo. Oppure definiamo la soluzione in altri modi (ad es. Approccio avido) che ovviamente potrebbe non fornirti una soluzione ottimale .
A volte il non determinismo è un meccanismo efficace per descrivere in modo preciso ed efficace alcuni complicati problemi / soluzioni, ad esempio le macchine non deterministiche possono servire da modello di algoritmo di ricerca e backtrack (leggi: Come il processo di stringa nel modello non deterministico usando backtrack ). I modelli decisamente deterministici rappresentano meglio soluzioni efficienti, minimizzate e meno ridondanti.
Qui vorrei anche citare da Wikipedia l' uso dell'algoritmo non deterministico :
Nella progettazione dell'algoritmo, gli algoritmi non deterministici vengono spesso utilizzati quando il problema risolto dall'algoritmo consente intrinsecamente più risultati (o quando esiste un unico risultato con percorsi multipli attraverso i quali può essere scoperto il risultato, ciascuno preferibilmente ugualmente). Fondamentalmente, ogni risultato che l'algoritmo non deterministico produce è valido, indipendentemente dalle scelte che l'algoritmo fa durante l'esecuzione.
Un gran numero di problemi può essere concettualizzato attraverso algoritmi non deterministici, inclusa la più famosa domanda irrisolta nella teoria dell'informatica, P vs NP.
Come @keshlam ha anche menzionato nel suo commento : "Il non determinismo" è in pratica usato per riferirsi a qualsiasi imprevedibilità nell'esito di qualche processo. Ad esempio, i programmi concorrenti mostrano un comportamento non deterministico: due esecuzioni dello stesso programma con lo stesso input possono produrre risultati diversi (se non si applica il meccanismo di controllo della concorrenza ). Maggiori informazioni al riguardo in "Utilità del non determinismo" .
Vorrei anche suggerire di leggere i seguenti link:
1. Qual è la differenza tra non determinismo e casualità?
2. 9.2.2 Modelli non deterministici vs. probabilistici: (a). Non deterministico : non ho idea di cosa farà la natura. (b). Probabilistico: ho osservato la natura e raccolto statistiche.
3. Programmazione non deterministica