Voici une approche qui, je pense, devrait vous donner une approximation à facteur multiplicatif, avec un temps d'exécution polynomial.
Laisser L être une langue régulière qui est un sous-ensemble de {0,1}n, par exemple, L=L(M)∩{0,1}n. Nous allons essayer de calculer la taille approximative deL.
À un niveau élevé, notre approche pour |L| ressemblera à ceci:
Choisissez une fraction p, où 0<p<1.
Choisissez une langue régulière R de telle sorte qu'en gros, R est un sous-ensemble aléatoire de {0,1}n de taille environ p2n (c'est à dire, |R|≈p2n).
Vérifier si L∩Rn'est pas vide. Notez que cette vérification peut être effectuée en temps polynomial.
Effectuez à plusieurs reprises les étapes 1 à 3 pour différentes valeurs de p. Cela vous donne quelques informations qui vous permettront d'approcher|L|.
En particulier, si |L|=m, alors nous nous attendrions
Pr[L∩R=∅]=(1−p)m≈e−pm.
Donc, si vous choisissez et répétez les étapes 1 à 3 plusieurs fois, vous devez vous attendre à voir une intersection vide environ 37% du temps. Si vous voyez une intersection vide beaucoup plus souvent que cela, augmentez et réessayez. Si vous voyez une intersection vide beaucoup moins souvent que cela, vous pouvez diminuer et réessayer.p=1/mpp
De cette façon, en utilisant quelque chose comme la recherche binaire, vous devriez pouvoir approximerà l'intérieur d'un facteur d'approximation multiplicatif.|L|
Vous devrez toujours choisir un moyen de choisir pour qu'il soit régulier mais se comporte également comme un sous-ensemble aléatoire. Il existe de nombreuses possibilités, mais une bonne façon pourrait être de choisir un hachage aléatoire universel 2 , choisissez au hasard et laissez . Choisir vous donne un ensemble aléatoire d'environ la bonne taille, et parce que est 2-universel, toutes les mathématiques ci-dessus devraient fonctionner correctement.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
Cela devrait résoudre votre problème dans le cas où toutes les chaînes de la NFA ont la même longueur, disons . S'ils ont des longueurs variables, vous pouvez gérer chaque longueur possible séparément. Puisque est acyclique, les longueurs maximales de toute chaîne dans sont au plus le nombre d'états dans , donc cela n'augmente pas trop le temps d'exécution.nML(M)M
(Cette construction pourrait vous rappeler le théorème de Vazirani-Vazirani sur la SAT sans ambiguïté.)