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|
Scegli una frazione , dove .p0<p<1
Scegli una lingua regolare tale che, approssimativamente, sia un sottoinsieme casuale di di dimensioni approssimativamente di (cioè, ).RR{0,1}np2n|R|≈p2n
Controlla se non è vuoto. Si noti che questo controllo può essere eseguito in tempo polinomiale.L∩R
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[L∩R=∅]=(1−p)m≈e−pm.
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,…,k−1}y∈{0,1,…,k−1}R={x∈{0,1}n:h(x)=y}k=⌈1/p⌉Rh
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.)