Contando il numero di parole accettate da un NFA aciclico


8

Sia un aciclico NFA.M

Poiché è aciclico, è finito.ML(M)

Possiamo calcolarein tempo polinomiale?|L(M)|

In caso contrario, possiamo approssimarlo?


Si noti che il numero di parole non è uguale al numero di percorsi accettabili in , che è facilmente calcolabile.M


Vorrei menzionare un approccio ovvio che non funziona: convertire l'NFA in un DFA (che sarà anche aciclico), quindi contare il numero di percorsi di accettazione nel DFA. Ciò non si traduce in un algoritmo a tempo polinomiale, poiché la conversione può causare un aumento esponenziale delle dimensioni del DFA.


Le tecniche per gli automi arbitrari si ripercuotono, vedi ad esempio su cstheory.SE .
Raffaello

1
@Raphael - Temo di non capire la tua risposta lì. In particolare, non sembra funzionare per NFA ambiguo. Contare il numero di parole in UFA equivale a contare il numero di percorsi di accettazione, che, come menzionato nella domanda, è semplice.
RB,

Risposte:


2

Ecco un approccio che mi aspetto dovrebbe darti un'approssimazione del fattore moltiplicativo, con il tempo di esecuzione polinomiale.

Sia una lingua normale che è un sottoinsieme di , ad esempio . Cercheremo di calcolare la dimensione approssimativa di .L{0,1}nL=L(M){0,1}nL

Ad alto livello, il nostro approccio approssimativosarà simile a questo:|L|

  1. Scegli una frazione , dove .p0<p<1

  2. Scegli una lingua regolare tale che, approssimativamente, sia un sottoinsieme casuale di di dimensioni approssimativamente di (cioè, ).RR{0,1}np2n|R|p2n

  3. Controlla se non è vuoto. Si noti che questo controllo può essere eseguito in tempo polinomiale.LR

Eseguire ripetutamente i passaggi 1-3 per vari valori di . Questo ti dà alcune informazioni che ti permetteranno di approssimare.p|L|

In particolare, se , ci aspetteremmo|L|=m

Pr[LR=]=(1p)mepm.

Quindi, se ti capita di scegliere e ripetere i passaggi 1-3 un sacco di volte, dovresti aspettarti di vedere un incrocio vuoto circa il 37% delle volte. Se vedi un'intersezione vuota significativamente più spesso, allora aumenta e riprova. Se vedi un'intersezione vuota in modo significativamente meno frequente, puoi ridurre e riprovare.p=1/mpp

In questo modo, usando qualcosa come la ricerca binaria, dovresti essere in grado di approssimareentro un fattore di approssimazione moltiplicativo.|L|

Dovrai comunque scegliere un modo per scegliere modo che sia regolare ma si comporti anche come un sottoinsieme casuale. Ci sono molte possibilità, ma un buon modo potrebbe essere quello di scegliere un hash a 2 universali casuale , prendi casualmente e lascia . La scelta di ti dà un insieme casuale approssimativamente della giusta dimensione, e poiché è 2-universale, tutta la matematica sopra dovrebbe funzionare correttamente.Rh:{0,1}m{0,1,2,,k1}y{0,1,,k1}R={x{0,1}n:h(x)=y}k=1/pRh

Questo dovrebbe risolvere il tuo problema nel caso in cui tutte le stringhe nell'NFA abbiano la stessa lunghezza, ad esempio . Se hanno lunghezze variabili, puoi gestire ogni possibile lunghezza separatamente. Poiché è aciclico, la lunghezza massima di qualsiasi stringa in è al massimo il numero di stati in , quindi questo non aumenta troppo il tempo di esecuzione.nML(M)M

(Questa costruzione potrebbe ricordare il teorema Vazirani-Vazirani sul SAT inequivocabile.)


0

Supponiamo di poter contare in un tempo polinomiale il numero di parole di una lingua fornite da un NFA aciclico. In questo caso, considerando due NFA aciclici e , è possibile calcolare in tempo polinomiale il cardinale (resp. ) della lingua di (resp. ). Tramite un prodotto diretto (preservando l'aciclicità) è anche possibile calcolare in tempo polinomiale il cardinale dell'intersezione di queste due lingue. I due automi accettano la stessa lingua iff . Pertanto è possibile verificare l'uguaglianza di due lingue finite fornite da automi aciclici nel polinomio, che è noto per essere un problema NP-completo. Quindi, a meno cheA1A2n1n2A1A2n3n1=n2=n3P=NP, non puoi risolvere il tuo problema in tempo polinomiale.


citazione necessaria per il risultato di durezza
A. Schulz,
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.