La forma normal de Chomsky permite que un algoritmo de tiempo polinómico decida si una cadena puede ser generada por una gramática. El algoritmo es bastante hábil si conoce la programación dinámica ...
yonorteUNnortenorte
A [ i , j ]GI(i,j)
A[1,n]SS
def decide (string s,grammar G):
//base case
for i=1 to n:
N[i,i]=I[i] //as the substring of length one can be generated by only a
terminal.
//end base case
//induction
for s=1 to n: //length of substring
for i=1 to n-s-1: //start index of substring
for j=i to i+s-1: //something else
if there exists a rule A->BC such that B belongs to N[i,j] and C
belongs to N[j+1,i+s-1] then add A to N[i,i+s-1]
//endInduction
if S belongs to N[1,n] then accept else reject.
Sé que los índices parecen bastante locos. Pero básicamente aquí está lo que está sucediendo.
El caso base es bastante claro, creo.
ss
5sub
1A−>BCBCAN[1,6]
N[1,n]