Algoritmo per ridurre un DFA introducendo il non determinismo?


8

Ciò è in qualche modo correlato a un'altra domanda che ho posto , ma ritengo che sia abbastanza diverso da giustificare la propria domanda.

Sto facendo delle ricerche in cui sto cercando di trovare la struttura dei complementi di una certa classe di lingue finite. È facile per me ottenere i DFA minimi che accettano questi linguaggi, ma vorrei esaminare quale tipo di struttura hanno i NFA che accettano questi linguaggi, in particolare in che modo il non determinismo aiuta con le dimensioni dello stato degli automi (i DFA sono esponenzialmente grandi).

Il problema è che la principale tecnica di riduzione di NFA utilizza equivalenze, che non produrranno alcuna riduzione se inizio con un DFA minimo (dal momento che utilizza sostanzialmente la stessa tecnica). Se inizio con un DFA non minimo, sputa semplicemente il DFA minimo.

Quello che mi chiedo è, ci sono algoritmi che possono iniziare con un DFA e ridurlo in un NFA più piccolo introducendo il non determinismo? Esistono "tecniche standard" per farlo?

Ho trovato riduzioni dei preordini , che sembrano promettenti ma difficili da attuare. Sono aperto a molti suggerimenti.


è possibile ma Pspace completa per trovare un NFA minimo per un DFA
vzn

Sì, ma ci sono tecniche di riduzione che sono utili ma non trovano il minimo in tutti i casi. Sono più interessato a come il non determinismo riduce la dimensione dello stato piuttosto che a trovare il caso minimo.
jmite,

Risposte:


4

Per l'euristica efficiente suggerirei di esaminare la letteratura CAD sul problema della codifica dello stato (assegnando identificatori binari agli stati di un DFA per minimizzare la quantità di logica per la funzione di transizione dello stato.) Devadas e Newton, "Decomposizione e fattorizzazione di sequenze finite macchine a stati ", IEEE TCAD , 8 (11): 1206-1217, 1989 sottolinea che esiste una stretta relazione tra codifica dello stato e decomposizione della macchina a stati.

Se per un DFA con N afferma di assegnare un unico M identificatore di stato bit per ogni stato (lg2N<MN), quindi hai sostanzialmente decomposto il DFA in una rete di Mmacchine a due stati interagenti. Equivalentemente: hai definito un setS con M elementi e assegnato un sottoinsieme univoco di Sa ogni stato nel tuo DFA originale. Questo è anche ciò che fa l' algoritmo di costruzione del powerset Rabin-Scott . Quindi, facendo una codifica di stato sul DFA, stiamo cercando di decodificare il set da cui è partito l'algoritmo di costruzione del powerset.

Nel tradizionale problema di codifica dello stato tutte le codifiche sono legali e esiste una funzione oggettiva (correlata alla quantità di logica nella funzione di transizione di stato) che si sta tentando di ridurre al minimo. Per generare un NFA è necessario risolvere una versione vincolata del problema di codifica in cui:

una codifica di Mgli identificatori di bit agli stati DFA rappresentano un iff NFA per ogni simbolo dell'alfabeto la funzione di transizione per ciascun bit è una semplice disgiunzione di bit. (Non è consentita alcuna congiunzione o negazione.)

Quindi potresti elencare tutto M codifiche bit per tutti lg2N<MNe controlla se ognuno soddisfa il vincolo. (Nota che perM=N la banale codifica "one-hot" soddisfa sempre i vincoli e ti dà il DFA.) L'enumerazione è però ridicolmente grande, (il libro di testo di Di Micheli lo dà come qualcosa di simile 2M!(2M-N)!M!.) Il motivo per cui sto suggerendo la letteratura CAD è che ci sono tecniche per fare questa ricerca implicitamente piuttosto che enumerare (ad esempio, usando BDD, vedi Lin, Touati e Newton, "Non preoccuparti della minimizzazione di sequenze multilivello reti logiche, " Int'l Conf Comp-Aided Dsgn ICCAD-90: 414-417, 1990 .

Esempio

Prendi il seguente DFA, (con una codifica di stato che ho derivato da barare (ho generato il DFA da un NFA usando Rabin-Scott, e la codifica rappresenta i sottoinsiemi scelti da Rabin-Scott.))

DFA di Rabin-Scott

Se chiamiamo i bit nell'assegnazione di stato ABCD, quando il simbolo di input è 1, la funzione di transizione è A = A, B = A, C = B, D = C. Quando il simbolo di input è 0, la funzione di transizione è A = A, C = B, D = C. Questa è una funzione di transizione puramente disgiuntiva senza congiunzione o negazione, quindi questa codifica di stato ci dà un NFA. Gli stati nell'NFA corrispondono uno a uno con i bit nella codifica e la funzione di transizione è come data:

NFA per Rabin-Scott

Formulazione come problema booleano di soddisfacibilità

La descrizione informale di cui sopra porta direttamente a una codifica come problema booleano di soddisfacibilità. Esiste un insieme di variabili che descrivono le transizioni nell'NFA e un insieme di variabili per la codifica dello stato DFA che verrebbero derivate da Rabin-Scott per l'NFA scelto. Le transizioni del DFA specifico che si sta tentando di decomporre vengono utilizzate per posizionare vincoli sulle transizioni NFA.

Supponiamo di ricevere un DFA con N afferma per una lingua con S simboli e vorremmo derivarne un M stato NFA, con lg2N<MN. Useremo le variabiliySft per rappresentare le possibili transizioni nell'NFA. ySftsarà vero se c'è una transizione nell'NFA dallo stato NFAf allo stato NFAtsul simbolo S. Nell'esempio precedente NFA, l'alfabeto è di dimensione 2 e ci sono 4 stati NFA, quindi ci sonoSM2=32 y variabili e y0UNUN,y1UNUN, e y1UNB sono tutti veri mentre y1DUN è falso.

Useremo le variabili Xdn per indicare se l'algoritmo Rabin-Scott dovrebbe includere o meno lo stato NFA n nel set di stati che etichettano lo stato DFA d. Nell'esempio sopra abbiamoN=8 Stati DFA e M=4 NFA afferma quindi ci sono 32 Xvariabili. Nell'esempio sopra supponiamo che lo stato più in basso (quello etichettato "1011") sia statoK, poi XKUN, XKC, e XKD sono veri mentre XKB è falso.

Ora i vincoli. Prima di tutto, Rabin-Scott deve trovare una codifica diversa per ogni stato DFA, quindi per gli stati DFAio<j e tutti gli stati NFA {UN,B,,D}:

(XioUNXjUN)+(XioBXjB)++(XioDXjD).

Quindi deve accadere che se Rabin-Scott trovasse una transizione dallo stato DFA io allo stato DFA j sul simbolo S quindi per ogni stato NFA K incluso nella codifica di j deve esserci uno stato NFA l dalla codifica dello stato DFA j tale che la NFA originale ebbe una transizione da l per K. Nell'esempio sopra, sul simbolo "1" c'è una transizione DFA dallo stato DFA "1000" allo stato DFA "1100", quindi deve esserci una transizione NFA dallo stato NFA A agli stati A e B NFA e nessuna transizione NFA da NFA stato A a NFA stato C o D. Quindi per ciascuno deio(SN2) bordi nel DFA abbiamo i vincoli:

XjUN=ySUNUNXioUN+ySBUNXioB++ySDUNXioDXjB=ySUNBXioUN+ySBBXioB++ySDBXioDXjD=ySUNDXioUN+ySBDXioB++ySDDXioD.

Infine, dobbiamo affrontare l'inizio e accettare gli stati. Lo stato iniziale di DFA è codificato con l'unione degli stati iniziali di NFA, quindi è meglio non codificare lo stato iniziale di DFA con il set vuoto, quindiX0UN+X0B++X0D. E infine abbiamo bisogno di un insieme di variabilifnper indicare se ogni stato NFA è uno stato di accettazione NFA. È necessario che la codifica per ogni stato di accettazione di DFA contenga almeno uno stato di accettazione di NFA e che la codifica per ogni stato di non accettazione di DFA non contenga stati di accettazione di NFA:XioUNfUN+XioBfB++XioDfD per DFA accetta gli stati io e ¬(XjUNfUN+XjBfB++XjDfD) per gli stati non accettati di DFA j.


Questa idea di ingegneria inversa della costruzione del sottoinsieme è esattamente quello che sto cercando. Sembra complicato, quindi mi prenderò del tempo per analizzarlo. Grazie!
jmite,

1
Ho cercato di capire come riformularlo come un problema SAT, ma non ci ho ancora dedicato abbastanza tempo.
Wandering Logic,

3

Ridurre al minimo gli NFA è difficile, tanto difficile che persino l'approssimazione è difficile; vedi Ridurre al minimo NFA e le espressioni regolari di Gramlich e Schnitger (2005). Questo articolo sembra avere anche alcuni riferimenti utili, ad esempio NFA Reduction Algorithms by Means of Regular Inequonies di Champarnaud and Coulon (2002) che contiene tecniche di minimizzazione.


Sì, sto bene se si tratta solo di una riduzione e non di una minimizzazione completa. Dò un'occhiata, quei riferimenti sembrano davvero buoni però.
jmite,

2

Esistono alcune nozioni di FSA canoniche che non sono necessariamente deterministiche, quindi possono essere più piccole del DFA minimo. Un esempio sono gli FSA "residui", per i quali si possono calcolare gli FSA residui canonici in modo abbastanza diretto, vedere F. Denis, A. Lemay e A. Terlutte. "Automi a stati finiti residui", Fundamenta Informaticae 51 (4): 339-368, 2002 . Esistono diverse alternative.


Potresti spiegare l'informatica abbastanza direttamente? In questo modo il calcolo dell'FSA residuo canonico è un problema completo di PSPACE. Potrebbe ancora funzionare per me (le mie macchine sono abbastanza piccole) ma sono diffidente.
jmite,

In particolare, sono confuso su come determinerei se uno stato in una macchina è "copribile", come definito nella pagina 17 del documento, proprio prima della Sezione 5 Lemma 4.
jmite
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.