Applicazione pratica delle macchine a stati finiti


8

Sto cercando applicazioni pratiche di macchine a stati finiti come macchine DFA, NFA, Moore, Mealy ...

Sarebbe utile se qualcuno punta ad esempi dal kernel Linux. So che DFA viene utilizzato nella corrispondenza delle stringhe come l'algoritmo KMP.

Qual è il significato delle macchine NFA, Moore e Mealy?


potresti voler controllare anche l' ingegneria elettrica per le macchine Moore / Mealy
Ran G.

1
Odio essere pedante (va bene, adoro essere pedante) ma tutti i computer reali sono esattamente macchine a stati finiti. Automi pushdown, automi lineari limitati e macchine di Turing sono impossibilità fisiche (praticamente parlando; ovviamente non posso dimostrare che non ci sia una vera macchina di Turing che fluttua nello spazio da qualche parte). Non possiamo nemmeno, praticamente parlando, creare computer in grado di riconoscere lingue regolari arbitrarie.
Patrick87

Risposte:


8

Ogni volta che esegui una ricerca (in particolare una "ricerca di modelli") nel tuo editor / strumento preferito, il modello viene tradotto in una qualche forma di macchina a stati finiti, che fa la corrispondenza.

La parte di analisi lessicale del tuo compilatore / interprete (sì, anche la tua shell) è di nuovo un automa finito che abbina parole chiave e altri token riconosciuti dalla lingua.

Qualsiasi distributore automatico è un automa finito che accetta monete di diverse denominazioni e riconosce quando è stato inserito l'importo corretto (OK, i distributori automatici di oggi probabilmente hanno una piccola CPU all'interno che fa l'aggiunta, ma il risultato finale è lo stesso).


7

(i concetti di) DFA / NFA hanno alcune applicazioni nel campo dei compilatori e nella costruzione di parser. Vengono anche utilizzati per identificare le stringhe in base alle espressioni regolari (ovvero cercare "modelli" sul Web o sui database)

Le macchine Moore / Mealy sono DFA che hanno anche prodotto in qualsiasi momento. Quelli hanno MOLTE applicazioni. In effetti, qualsiasi CPU, computer, telefono cellulare, orologio digitale e persino la tua lavatrice hanno una sorta di macchina a stati finiti, che lo controlla.

Forse dovrei chiarire: qualsiasi "computer" è fondamentalmente una macchina a stati finiti.


4

Una delle principali applicazioni è la modellazione di sistemi. In sostanza, semplici sistemi software possono essere modellati come macchine a stati finiti. (Per semplice software intendo le lingue che possono essere rappresentate usando espressioni regolari). Esistono molti di questi "semplici" sistemi, i distributori automatici sono esempi (come indicato da vzn).

Trovando l'intersezione di due macchine a stati finiti, è possibile progettare in modo molto semplice sistemi concorrenti che scambiano messaggi per esempio. Ad esempio, il semaforo è un sistema costituito da sottosistemi multipli (i diversi semafori) che funzionano contemporaneamente.

Dai un'occhiata a questi esempi: http://www.site.uottawa.ca/~bochmann/SEG-2106-2506/Notes/LTSA-examples/examples/

È necessario disporre dell'analizzatore LTSA per eseguire questi esempi. http://www.doc.ic.ac.uk/ltsa/


3

ecco un ottimo riferimento online su FSM e teoria correlata, 75p, con molti diagrammi. ha molte applicazioni dopo la sezione della teoria di mezzo e anche in molti esercizi con applicazioni di esempio, ad esempio p485:

CH12. Macchine a stati finiti di Keller, college Harvey Mudd, libro di testo CS60 / CS, introduzione all'astrazione

le applicazioni sono estremamente diverse. ad es. dal libro:

  • classificazione numerica
  • guarda con il timer
  • distributore automatico
  • semaforo
  • scanner di codici a barre
  • stazione di servizio

sec 12.4 Costruzioni EE es

  • elementi logici
  • quantizzazione dell'orologio
  • Lucchetto a combinazione
  • infradito
  • vipere
  • registri
  • autobus / multiplexing

Gli FSM vengono anche utilizzati nel rilevamento vocale per trovare i fonemi , uno dei principali punti di applicazione di questa eccellente biblioteca online che ha alcuni dettagli in più nelle pagine man e nella documentazione: la biblioteca FSM online AT&T . vedere la sezione "Applicazioni di elaborazione vocale e libreria FSM" (che elenca anche alcune "applicazioni" astratte / teoriche)

eccetera!


1

Uso le macchine a stati quando scrivo i driver di dispositivo. Attenzione che le grandi macchine a stati possono diventare ingombranti. Prendi in considerazione l'utilizzo di questo set di macro ( https://www.codeproject.com/Articles/37037/Macros-to-simulate-multi-tasking-blocking-code-at ) ... in questo modo le transizioni diventano così semplici da non farlo anche bisogno di un diagramma di stato. Questo perché le macro consentono di scrivere il codice della macchina a stati come se fosse un codice strutturato. Ho scritto la Transceiver Library di Cisco per il Nexus 7000 usando queste macro.


0

In pratica, lo vedrai esplicitamente come una variabile di stato intera (di solito chiamata 'stato') che rappresenta una macchina a stati molto grossolana che rappresenta quali azioni sono richiamabili dall'utente di un oggetto. Di solito è un elenco con valori come: {non inizializzato, inizializzato, ..., fermato}. Le macchine a stati sono spesso esplicite durante l'analisi dei dati e saranno indicate da un'istruzione switch in un ciclo while in cui nella parte superiore del ciclo viene ottenuto il carattere successivo. In particolare, se l'analisi ha una grammatica regolare, viene spesso utilizzato un FSM esatto senza altre funzionalità. Se sei in una lingua che supporta le chiamate di coda, gli FSM sono generalmente esibiti mediante ricorsione reciproca (che può far leggere il codice come una specifica pseudocodice molto chiara). Una caratteristica davvero utile di un FSM è la capacità di operare contemporaneamente perché è necessario solo ricordare lo stato corrente, piuttosto che un intero stack di esecuzione. (ovvero: cambio di contesto tra milioni di istanze di macchine a stati).

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.