চমস্কি স্বাভাবিক ফর্মটি একটি ব্যাকরণ দ্বারা স্ট্রিং উত্পন্ন করা যায় কিনা তা নির্ধারণ করতে বহু বহু সময়ের আলগোরিদমকে সক্ষম করে। আপনি যদি ডায়নামিক প্রোগ্রামিং জানেন তবে অ্যালগরিদমটি বেশ চালাক ...
যদি আপনার ইনপুট ( ) এর দৈর্ঘ্য n হয় তবে আপনি ম্লান n x n এর 2d অ্যারে ( A ) নিন ।আমিএনএকজনএনএন
ব্যাকরণ সমস্ত চিহ্ন উল্লেখ করে জি উপ-স্ট্রিং লাভ করতে পারি আমি ( আমি , ঞ ) ।এ [ আমি , জে ]জিআমি( আমি , জে )
সুতরাং পরিশেষে যদি এর মধ্যে সূচনা চিহ্ন ( এস ) থাকে তবে এর অর্থ হ'ল আমি যে স্ট্রিংটি এস দ্বারা উত্পন্ন করতে পারি যা আমরা যাচাই করতে চেয়েছিলাম।এ [ ১ , এন ]এসএস
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এ - > বি সিবিসিএকজনএন[ 1 , 6 ]
এন[ ১ , এন ]