Chomsky normal formu, bir dizenin bir dilbilgisi tarafından üretilip üretilemeyeceğine karar vermek için polinom zaman algoritması sağlar. Dinamik programlama biliyorsanız algoritma oldukça kaygan ...
InAnn
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.
Endekslerin oldukça çılgınca göründüğünü biliyorum. Ama temelde burada neler oluyor.
Baz dava oldukça net.
ss
5sub
1A−>BCBCAN[1,6]
N[1,n]