Compter le nombre de mots acceptés par un NFA acyclique


8

Laisser M être un NFA acyclique.

Depuis M est acyclique, L(M) est fini.

Pouvons-nous calculer |L(M)| en temps polynomial?

Sinon, pouvons-nous l'approcher?


Notez que le nombre de mots n'est pas le même que le nombre de chemins d'acceptation dans M, qui est facilement calculable.


Permettez-moi de mentionner une approche évidente qui ne fonctionne pas: convertir le NFA en DFA (qui sera également acyclique), puis compter le nombre de chemins d'acceptation dans le DFA. Cela ne donne pas lieu à un algorithme polynomial, car la conversion peut provoquer une explosion exponentielle de la taille du DFA.


Les techniques pour les automates arbitraires sont reportées , voir par exemple sur cstheory.SE .
Raphael

1
@Raphael - J'ai bien peur de ne pas comprendre votre réponse. Plus précisément, cela ne semble pas fonctionner pour NFA ambigu. Compter le nombre de mots dans UFA équivaut à compter le nombre de chemins d'acceptation, ce qui, comme mentionné dans la question, est simple.
RB

Réponses:


2

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:

  1. Choisissez une fraction p, où 0<p<1.

  2. 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).

  3. Vérifier si LRn'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[LR=]=(1p)mepm.

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,,k1}y{0,1,,k1}R={x{0,1}n:h(x)=y}k=1/pRh

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é.)


0

Supposons que vous pouvez compter en temps polynomial le nombre de mots d'une langue donnée par un NFA acyclique. Dans ce cas, en considérant deux NFA acycliques et , vous pouvez calculer en temps polynomial le cardinal (resp. ) de la langue de (resp. ). Par un produit direct (préservant l'acyclicité) vous pouvez également calculer en temps polynomial le cardinal de l'intersection de ces deux langages. Les deux automates acceptent le même langage si . Par conséquent, vous pouvez tester l'égalité de deux langages finis donnés par les automates acycliques en polynôme, qui est connu pour être un problème NP-complet. Donc, à moins queA1A2n1n2A1A2n3n1=n2=n3P=NP, vous ne pouvez pas résoudre votre problème en temps polynomial.


citation nécessaire pour le résultat de la dureté
A.Schulz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.