Étant donné un DFA, A, soit L (A) le nombre de mots que A accepte. Je pense qu'il est facile de calculer L (A): Traduisez l'encodage de A en une expression régulière. Si l'étoile Kleene apparaît n'importe où dans l'expression - le langage est infini. Sinon: Parcourez et comptez toutes les combinaisons de mots qu'il est possible de faire en utilisant l'expression (en gros, s'il y a un opérateur + sur l'expression, multipliez la quantité de mots légaux par la quantité de chaînes connectées par le + ..)
Est-ce mal? Merci d'avance
Réponses:
Oui, c'est faux, à cause de l'ambiguïté.
Considérez le langage suivant: .( a + a a ) + a ( a + ϵ )
Avec votre méthode, nous voyons 4 mots, . Mais nous avons des doublons! Il existe plusieurs façons de créer le même mot dans l'expression régulière donnée.a , a a , a a , a
Une meilleure méthode consiste à utiliser la programmation dynamique sur un DFA minimal pour votre langue, sans état "mort". Si le DFA minimal est cyclique, le langage est infini, nous pouvons donc supposer qu'il n'y a pas de cycle. L'utilisation d'un DFA est essentielle, car le déterminisme signifie qu'il y a exactement un chemin à travers le DFA pour chaque mot.
Ce que vous faites est de créer une récurrence pour le nombre de mots qui se terminent à un état donné:
Le nombre total de mots est alors la somme du nombre de mots se terminant à chaque état final.
la source
En complément de la réponse de jmite, il n'est pas trop difficile de calculer le nombre de mots dans une langue régulière, en utilisant la méthode de la «matrice de transfert». C'est la même chose que la programmation dynamique de jmite, mais la technique a d'autres applications telles que l'énumération asymptotique.
Étant donné un DFA, construisez une matrice (où est l'ensemble des états) dans laquelle est le nombre de lettres qui font que le DFA passe de l'état à l'état . Soit et les indicateurs de l'état initial et des états accepteurs, respectivement. Enfin, soit.Q × Q M Q M( i , j ) j je 1q0 1F n = | Q |
Le nombre de mots de longueur est . Calculez pour . Si alors la langue acceptée par le DFA est infinie. Sinon, le nombre de mots dans la langue est .m cm: =1FMm1q0 cm 0 ≤ m < 2 n cn+ ⋯ +c2 n - 1> 0 c0+ ⋯ +cn - 1
(Lors du calcul des puissances de , il faut faire attention à la magnitude des entrées, qui est exponentielle en . Comme leur taille n'est que polynomiale, l'algorithme résultant s'exécute en temps polynomial.)M m
la source
En fait, vous pouvez toujours dériver des formules de comptage pour des expressions régulières non ambiguës avec des étoiles Kleene à l'intérieur.
Étant donné la définition inductive d'une expression régulière comme:
Considérez la traduction suivante[[⋅]]:Re→C(z) qui prend une expression régulière et la traduit en une fonction rationnelle à valeurs complexes:
Nous pouvons montrer que cette traduction renvoie une expression rationnelle en faisant une induction structurelle sure , et notant que toutes les opérations utilisées à droite préservent la rationalité.
Supposons que l'expression régulièree que nous mettons est sans ambiguïté, alors nous trouverions que la fonction rationnelle dénotée par [[e]]∈C(z) est en fait la fonction génératrice de la famille de mots qui est acceptée par la langue sous-jacente e , classés selon leur longueur.
Par exemple, considérez la langue(a∗b)∗ , qui définit la langue des exécutions de a délimité par b . Maintenant, cette expression régulière est sans ambiguïté, nous pouvons donc exécuter notre astuce de traduction:
Il s'avère que, compte tenu de la fonction génératrice ci-dessus, son coefficient d'extraction sera
En fait, depuis notre traduction[[⋅]] génère des fonctions rationnelles, nous pouvons utiliser une décomposition de fraction partielle pour créer une formule d'énumération pour toute expression régulière non ambiguë.
Supposons que vous ayez une fonction rationnelle irréductible
En fait, la décomposition partielle de fraction se généralise en fonctions rationnelles multivariées, vous pouvez donc réellement construire des formules de comptage pour des requêtes telles que "Combien de mots y a-t-il là où il y en a?"n m
a
le sableb
s? "Malheureusement, la mesure dans laquelle cette méthode sera utile se termine lorsque vous avez une expression ambiguë.
la source