Hier ist ein Ansatz, von dem ich erwarte, dass er Ihnen eine Multiplikator-Faktor-Näherung mit polynomieller Laufzeit liefert.
Sei eine reguläre Sprache, die eine Teilmenge von , z. B. . Wir werden versuchen, die ungefähre Größe von zu berechnen .{ 0 , 1 } n L = L ( M ) ∩ { 0 , 1 } n L.L{0,1}nL=L(M)∩{0,1}nL
Auf hohem Niveau ist unser Ansatz zur Annäherung anwird ungefähr so aussehen:|L|
Wählen Sie einen Bruch , wobei .0 < p < 1p0<p<1
Wählen Sie eine reguläre Sprache , so dass, grob gesprochen, ist eine zufällige Teilmenge von der Größe etwa (dh ).R { 0 , 1 } n p 2 n | R | ≈ p 2 nRR{0,1}np2n|R|≈p2n
Überprüfen Sie, ob nicht leer ist. Beachten Sie, dass diese Prüfung in Polynomzeit durchgeführt werden kann.L∩R
Führen Sie die Schritte 1 bis 3 wiederholt für verschiedene Werte von . Dies gibt Ihnen einige Informationen, mit denen Sie approximieren können .| L |p|L|
Insbesondere wenn , dann würden wir erwarten|L|=m
Pr[L∩R=∅]=(1−p)m≈e−pm.
Wenn Sie also zufällig wählen und die Schritte 1 bis 3 einige Male wiederholen, sollten Sie in etwa 37% der Fälle mit einer leeren Kreuzung rechnen. Wenn Sie eine leere Kreuzung deutlich häufiger sehen, erhöhen Sie und versuchen Sie es erneut. Wenn Sie eine leere Kreuzung deutlich seltener sehen, können Sie verringern und es erneut versuchen.p=1/mpp
Auf diese Weise sollten Sie mit einer binären Suche in der Lage sein, zu approximieren innerhalb eines multiplikativen Approximationsfaktors.|L|
Sie müssen noch einen Weg wählen, um zu wählen, damit es regelmäßig ist, sich aber auch wie eine zufällige Teilmenge verhält. Es gibt viele Möglichkeiten, aber ein guter Weg könnte darin bestehen, einen zufälligen 2-universellen Hash zu wählen , wähle zufällig und lasse . Wenn Sie Sie eine zufällige Menge von ungefähr der richtigen Größe. Da 2-universell ist, sollte die gesamte oben genannte Mathematik ordnungsgemäß funktionieren.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
Dies sollte Ihr Problem für den Fall lösen, dass alle Zeichenfolgen in der NFA dieselbe Länge haben, z . B. . Wenn sie unterschiedliche Längen haben, können Sie jede mögliche Länge separat behandeln. Da azyklisch ist, entspricht die maximale Länge eines Strings in höchstens der Anzahl der Zustände in , wodurch die Laufzeit nicht zu stark erhöht wird.nML(M)M
(Diese Konstruktion könnte Sie an den Satz von Vazirani-Vazirani über eindeutigen SAT erinnern.)