चॉम्स्की सामान्य रूप एक बहुपद समय एल्गोरिथ्म को यह तय करने में सक्षम बनाता है कि क्या एक व्याकरण द्वारा एक स्ट्रिंग उत्पन्न किया जा सकता है। यदि आप गतिशील प्रोग्रामिंग जानते हैं तो एल्गोरिथ्म बहुत चालाक है ...
यदि आपके इनपुट की लंबाई ( ) n है तो आप मंद n x n का 2d सरणी ( A ) लेते हैं ।मैंnएnn
व्याकरण G के सभी प्रतीकों को दर्शाता हैजो उप-स्ट्रिंग I ( i , j ) को प्राप्त कर सकते हैं।A [ i , j ]जीमैं( i , j )
तो आखिरकार अगर में स्टार्ट सिंबल ( S ) होता है तो इसका मतलब है कि स्ट्रिंग I को S से लिया जा सकता है जो कि हम जांचना चाहते थे।ए [ १ , एन ]एसएस
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.
मुझे पता है कि अनुक्रमणिका बहुत पागल लगती है। लेकिन मूल रूप से यहाँ क्या हो रहा है।
आधार मामला बहुत स्पष्ट है मुझे लगता है।
रोंरों
5sub
1ए - > बी सीबीसीएएन[ १ , ६ ]
एन[ १ , एन ]