একটি ননডেটেরেমনিস্টিক সসীম অটোমেটন একটি সীমাবদ্ধ রাষ্ট্র মেশিন যেখানে একটি টিপল একাধিক রাজ্যে ম্যাপ করা হয়। অর্থাৎ। আমরা স্বাভাবিক প্রতিস্থাপন একটি পরিবর্তন ফাংশন DFA তে অন্য ফাংশন ।
এনএফএ কী তা আপনি যদি জানেন তবে আপনি পরবর্তী বিভাগটি এড়াতে চাইতে পারেন।
আনুষ্ঠানিক সংজ্ঞা
একটি এনএফএ দ্বারা অনন্যরূপে বর্ণনা করা হয়
- রাজ্যের একটি সীমাবদ্ধ সেট
- প্রতীক একটি সীমাবদ্ধ সেট
- রূপান্তর ফাংশন
- প্রারম্ভিক অবস্থায়
- চূড়ান্ত রাজ্যের একটি সেট
মেশিনটি শুরু হবে এবং প্রতীকগুলির একটি সীমাবদ্ধ স্ট্রিং পড়বে, প্রতিটি প্রতীকের জন্য এটি একই সাথে একটি বর্তমান রাষ্ট্রের সাথে রূপান্তর ফাংশন ফাংশন প্রয়োগ করবে এবং প্রতিটি নতুন সেটকে বর্তমান রাজ্যের সংস্থায় যুক্ত করবে।
চ্যালেঞ্জ
এই চ্যালেঞ্জের জন্য আমরা এটিকে সহজ করার জন্য ignore উপেক্ষা করব , তদুপরি বর্ণমালা সর্বদা (ছোট-ছোট) অক্ষর letters থেকে এবং রাষ্ট্রগুলির সেটটি পূর্ণসংখ্যা কিছু অ-নেগেটিভ জন্য । প্রাথমিক অবস্থা সর্বদা ।
একটি শব্দ এবং একটি বর্ণনায় আপনার কাজটি সমস্ত চূড়ান্ত অবস্থা নির্ধারণ করে।
উদাহরণ
স্ট্রিং এবং নিম্নলিখিত বিবরণটি বিবেচনা করুন:
state, symbol, new-states
0, 'a', [1]
1, 'a', [0]
1, 'b', [1,2]
মেশিনটি শুরু হবে :
- একটি read পড়ুন : নতুন স্টেটস states
- একটি read পড়ুন : নতুন রাজ্যগুলি states
- একটি read পড়ুন : নতুন স্টেটস { 0 }
- একটি পড়া নতুন পদ বলে: { 1 }
- একটি : নতুন রাজ্যগুলি { 1 , 2 }
সুতরাং চূড়ান্ত রাজ্যগুলি এবং এইভাবে আউটপুট হবে ।
দ্রষ্টব্য: ধাপে (২) রাষ্ট্রের মানচিত্রের রূপান্তর ∅ হিসাবে বর্ণনায় কেবল খালি খালি সেটগুলিতে স্থানান্তর অন্তর্ভুক্ত রয়েছে।
বিধি
ইনপুট একটি স্ট্রিং এবং (ছাড়া NFA বিবরণ কিছু নিয়ে গঠিত হবে -transitions):
- ইনপুট স্ট্রিং সর্বদা { a … z } ∗ এর উপাদান হবে ∗
- বৈধ ইনপুট (সীমাবদ্ধ নয়):
- টিপলস / তালিকার তালিকা / অ্যারে
- নতুন লাইন পৃথক ইনপুট
- এনএফএ-এর বর্ণনায় ফলাফল হিসাবে খালি খালি সেটগুলির সাথে কেবল স্থানান্তর থাকবে
- যদি ফলাফল একই হয় (উদাহরণস্বরূপ নিয়ম
0,'a',[1,2]
এবং0,'b',[1,2]
সংক্ষেপে সংক্ষিপ্ত হতে পারে) আপনি একই অক্ষরগুলির সাথে বিধিগুলি সংক্ষিপ্ত করতে পারেন0,"ab",[1,2]
- আপনি প্রতিটি নিয়ম পৃথকভাবে নিতে পারেন (উদাহরণস্বরূপ নিয়ম
0,'a',[1,2]
হতে পারে0,'a',[1]
এবং0,'a',[2]
)
- যদি ফলাফল একই হয় (উদাহরণস্বরূপ নিয়ম
- আপনি চাইলে আপনি বড় হাতের অক্ষর চয়ন করতে পারেন
- আপনি ইনপুট হিসাবে রাজ্যের সংখ্যা নিতে পারেন
- আপনি ইনপুটগুলির কোনও ধরণের ক্রম অনুমান করতে পারেন (উদাহরণস্বরূপ রাষ্ট্র বা প্রতীক অনুসারে অর্ডার)
আউটপুটটি চূড়ান্ত রাজ্যের তালিকা / সেট / নতুন-লাইন পৃথক আউটপুট ইত্যাদি হবে
- অর্ডার কিছু যায় আসে না
- কোনও নকল নেই (এটি একটি সেট হিসাবে)
পরীক্ষার মামলা
এই উদাহরণগুলি সেই বিন্যাসে থাকবে description word -> states
যেখানে description
টিপলগুলির একটি তালিকা রয়েছে (state,symbol,new-states)
:
[] "x" -> []
[] "" -> [0]
[(0,'a',[1]),(1,'a',[0]),(1,'b',[1,2])] "abaab" -> [1,2]
[(0,'a',[1]),(1,'a',[0]),(1,'b',[1,2])] "abc" -> []
[(0,'p',[0,1]),(0,'g',[2]),(1,'c',[1]),(1,'g',[4]),(1,'p',[2]),(2,'c',[0])] "ppcg" -> [2,4]
[(0,'f',[1]),(1,'o',[1,2]),(2,'b',[3]),(3,'a',[4]),(4,'r',[0,4])] "foobar" -> [0,4]
[(0,'f',[1]),(1,'o',[1,2]),(2,'b',[3]),(3,'a',[4]),(4,'r',[0,4])] "fooooooobar" -> [0,4]
[(0,'f',[1]),(1,'o',[1,2]),(2,'b',[3]),(3,'a',[4]),(4,'r',[0,4])] "fobarfo" -> [1,2]
[(0,'f',[1]),(1,'o',[1,2]),(2,'b',[3]),(3,'a',[4]),(4,'r',[0,4])] "foobarrf" -> [1]
[(0,'d',[1,2]),(1,'u',[2]),(2,'u',[2,3]),(2,'p',[3]),(3,'p',[3])] "dup" -> [3]
[(0,'a',[0,2]),(0,'b',[3]),(1,'a',[1]),(1,'b',[1]),(2,'b',[1,4]),(4,'b',[2])] "aab" -> [3,1,4]
[(0,'a',[0,2]),(0,'b',[3]),(1,'a',[1]),(1,'b',[1]),(2,'b',[1,4]),(4,'b',[2])] "abb" -> [1,2]