In realtà, puoi ancora derivare formule di conteggio per espressioni regolari non ambigue con stelle di Kleene all'interno.
Data la definizione induttiva di un'espressione regolare come:
e∈Re:=x∈Σ∣e0 e1∣e0+e1∣e∗
Considera la seguente traduzione [[⋅]]:Re→C(z) che prende un'espressione regolare e la traduce in una funzione razionale dal valore complesso:
[[x∈Σ]][[e0 e1]][[e0+e1]][[e∗]]=z=[[e0]]×[[e1]]=[[e0]]+[[e1]]=11−[[e]]
Possiamo dimostrare che questa traduzione restituisce un'espressione razionale facendo induzione strutturale ee notando che tutte le operazioni utilizzate sul lato destro preservano la razionalità.
Supponiamo che l'espressione regolare e che abbiamo inserito non è ambiguo, quindi troveremmo che la funzione razionale è indicata da [[e]]∈C(z) è in realtà la funzione generatrice della famiglia di parole accettate dalla lingua sottostante e, classificati in base alla loro lunghezza.
Ad esempio, considera la lingua (a∗b)∗, che definisce il linguaggio delle corse di a delimitato da b. Ora, questa espressione regolare è inequivocabile, quindi possiamo eseguire il nostro trucco di traduzione:
[[(a∗b)∗]]=11−[[a∗b]]=11−([[a∗]]×[[b]])=11−(11−[[a]]×z)=11−z1−z=12+12−4z
A quanto pare, data la precedente funzione generatrice, sarà l'estrazione del suo coefficiente
[zn][[(a∗b)∗]]=2n−1+δ(n)2
dove
δ(n)={10if n=0otherwise
In effetti, dalla nostra traduzione [[⋅]] genera funzioni razionali, possiamo usare una decomposizione parziale della frazione per creare una formula di enumerazione per qualsiasi espressione regolare non ambigua.
Supponiamo di avere una funzione razionale irriducibile
r(z)+p(z)q(z)
dove
r,p,q sono polinomi, quindi puoi scomporlo in
r(z)+C0z−q∗0+⋯+Cnz−q∗n
dove
q∗k sono le radici di
q(z). Esistono alcuni casi angolari tecnici (come la molteplicità delle radici, ecc.), Ma è relativamente facile eseguire l'estrazione dei coefficienti sull'espressione sopra:
[zn]Cz−q∗=C×q∗−n
In effetti, la decomposizione della frazione parziale si generalizza in funzioni razionali multivariate, quindi puoi effettivamente costruire formule di conteggio per query come "Quante parole ci sono dove ci sono n a
s e m b
S?"
Sfortunatamente, la misura in cui questo metodo sarà utile termina quando hai un'espressione ambigua.