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:
e ∈ R e : = x ∈ Σ ∣e0 e1∣e0+e1∣e∗
Considérez la traduction suivante [[⋅]]:Re→C(z) qui prend une expression régulière et la traduit en une fonction rationnelle à valeurs complexes:
[[x∈Σ]][[e0 e1]][[e0+e1]][[e∗]]=z=[[e0]]×[[e1]]=[[e0]]+[[e1]]=11−[[e]]
Nous pouvons montrer que cette traduction renvoie une expression rationnelle en faisant une induction structurelle sur e, et notant que toutes les opérations utilisées à droite préservent la rationalité.
Supposons que l'expression régulière e 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:
[[(a∗b)∗]]=11−[[a∗b]]=11−([[a∗]]×[[b]])=11−(11−[[a]]×z)=11−z1−z=12+12−4z
Il s'avère que, compte tenu de la fonction génératrice ci-dessus, son coefficient d'extraction sera
[zn][[(a∗b)∗]]=2n−1+δ(n)2
où
δ(n)={10if n=0otherwise
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
r(z)+p(z)q(z)
où
r,p,q sont des polynômes, alors vous pouvez les décomposer en
r(z)+C0z−q∗0+⋯+Cnz−q∗n
où
q∗k sont les racines de
q(z). Il y a un peu de cas d'angle techniques (comme la multiplicité des racines, etc.), mais il est relativement facile de faire une extraction de coefficient sur l'expression ci-dessus:
[zn]Cz−q∗=C×q∗−n
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 a
le sable m b
s? "
Malheureusement, la mesure dans laquelle cette méthode sera utile se termine lorsque vous avez une expression ambiguë.