एनएफए को गैर-नियतात्मक क्यों कहा जाता है?


14

मेरे मन में इस तरह का [मज़ाकिया] सवाल है। गैर-नियतात्मक परिमित ऑटोमोटन को गैर-नियतात्मक क्यों कहा जाता है जबकि हम आदानों के लिए संक्रमण को परिभाषित करते हैं। ठीक है, भले ही कई और एप्सिलॉन संक्रमण हैं, उन्हें परिभाषित किया गया है जिसका अर्थ है कि मशीन उन संक्रमणों के लिए निर्धारक है। इसका अर्थ है कि यह नियतात्मक है।


12
सैद्धांतिक कंप्यूटर विज्ञान में इस्तेमाल किया जाने वाला नोंडेटर्मिनिस्टिक यादृच्छिक से अलग है।
adrianN

10
यह उन बदलावों के बीच का चुनाव है जो नोंडेटेर्मिनिस्टिक हैं।
रीयरियरपोस्ट

NFA क्या है? (हमारे बीच के
निर्जन

@DarcyThomas, पहला परिचय जो मेरे पास था swtch.com/~rsc/regexp/regexp1.html । यह एक अच्छा पढ़ा गया है - यह लेख का उद्देश्य एनएफए को पेश करना नहीं है, लेकिन यह नियमित अभिव्यक्ति की चर्चा में ऐसा करने का अच्छा काम करता है।
वाइल्डकार्ड

जवाबों:


23

"नियतात्मक" का अर्थ है "यदि आप सिस्टम को एक ही स्थिति में दो बार डालते हैं, तो दोनों बार एक ही विकल्प बनाने की गारंटी है"।

"गैर-नियतात्मक" का अर्थ है "निर्धारक नहीं", या दूसरे शब्दों में, "यदि आप सिस्टम को एक ही स्थिति में दो बार डालते हैं, तो यह दोनों बार एक ही विकल्प बना सकता है या नहीं"।

एक गैर-नियतात्मक परिमित ऑटोमोटन (एनएफए) में एक राज्य के बाहर कई संक्रमण हो सकते हैं। इसका मतलब यह है कि उस स्थिति में यह क्या कर सकता है इसके लिए कई विकल्प हैं। इसे हमेशा एक ही चुनने के लिए मजबूर नहीं किया जाता है; एक इनपुट पर, यह पहला संक्रमण चुन सकता है, और दूसरे इनपुट पर यह एक ही संक्रमण चुन सकता है।

यहां आप "स्थिति" के रूप में सोच सकते हैं कि "एनएफए किस राज्य में है, साथ में इनपुट से आगे क्या प्रतीक पढ़ा जा रहा है"। यहां तक ​​कि जब वे दोनों समान होते हैं, तब भी एक एनएफए में कई मिलान संक्रमण हो सकते हैं जो उस राज्य से बाहर ले जा सकते हैं, और यह मनमाने ढंग से चुन सकता है कि कौन सा लेना है। इसके विपरीत, एक डीएफए में केवल एक मिलान संक्रमण होता है जिसे उस स्थिति में लिया जा सकता है, इसलिए इसका कोई विकल्प नहीं है - यह हमेशा उसी संक्रमण का पालन करेगा जब भी यह उस स्थिति में हो।


"यह मनमाने ढंग से जो एक लेने के लिए चुन सकते हैं।" तो यह मूल रूप से एक संभाव्य प्रकृति है?
ट्रिलियन

@ श्रवण, नहीं, यह इस बात पर निर्भर करता है कि वह राज्य को स्वीकार करता है या नहीं। वास्तव में संभाव्य एफए एनएफए के लिए एक सामान्यीकरण है।
rus9384

"गैर-नियतात्मक" का अर्थ है "निर्धारक नहीं", या दूसरे शब्दों में, "यदि आप सिस्टम को एक ही स्थिति में दो बार डालते हैं, तो यह दोनों बार एक ही विकल्प बना सकता है या नहीं"। इसका मतलब यह है कि मशीन दो अलग-अलग मामलों में एक ही स्ट्रिंग को स्वीकार और अस्वीकार कर सकती है।
मधुसूदन पी।

3
@MadhusoodanP यहाँ जो लिखा गया था उससे आपका अंतर्ज्ञान सही है, और जो हमें इस उत्तर से गायब है, की ओर ले जाता है: जब एनएफए का विश्लेषण करते हैं तो हम हमेशा सभी संभावित निष्पादन मार्गों पर विचार करते हैं। जब तक उस मशीन का कोई भी रास्ता स्वीकार करने की स्थिति में नहीं जाता, हम इनपुट को स्वीकृत मानते हैं। तो यह संभावना के बारे में बिल्कुल नहीं है, यह बस के बारे में है कि क्या एक स्वीकार राज्य तक पहुंचा जा सकता है या नहीं। एनएफए को डीएफए में कैसे कम किया जाता है, इस बारे में सोचते समय यह अंतर्ज्ञान स्पष्ट हो जाता है: हमें एनएफए के सभी संभावित निष्पादन को अनुकरण करना होगा, जो निर्माण में घातीय कोलाहल की ओर ले जाता है।
कॉमिकसंस

3
यह कल्पना करने का एक तरीका यह है कि, जहां कई बदलावों को चुना जा सकता है, एनएफए सभी बदलावों को लेता है । आप एक इनपुट स्ट्रिंग द्वारा पहुँचे सभी राज्यों की ट्री-जैसी संरचना बनाते हैं, और यदि कोई भी शाखाएँ स्वीकृति स्थिति पर समाप्त होती हैं, तो स्ट्रिंग को स्वीकार कर लिया जाता है। दूसरे शब्दों में, एक डीएफए के साथ, आप पूछ रहे हैं "क्या राज्य मेरे इनपुट द्वारा स्वीकार किए गए राज्य तक पहुंच गया है?", जबकि एनएफए के साथ, आप पूछ रहे हैं "क्या कोई राज्य है जो मेरे इनपुट द्वारा स्वीकार राज्य तक पहुंचा जा सकता है?"।
हैरिसन

9

उदाहरण के लिए, इस ऑटोमेटन को लें, यह एक NFA है और यह स्ट्रिंग स्वीकार करता है । अधिक पांडित्यपूर्ण होने के लिए, यह 10 में समाप्त होने वाले तार को स्वीकार करता है ।011010

उदाहरण ऑटोमेटन, स्रोत: /cs/61159/what-is-the-difference-between-following-two-finite-automata/61208

यह देखने के लिए कि हमें यह जाँचने की आवश्यकता है कि क्या यह एक स्वीकृत स्थिति तक पहुँचता है या नहीं।

q01q00q11q20

अब लाल रेखा में एक और संभावना थी, वह यह है कि दूसरा पढ़ते समय मैं q 0 में रह सकता हूं और फिर अंतिम 0 पढ़ते समय q 0 में रह सकता हूं । आटोमेटा में कोई मेमोरी नहीं है, इसलिए राज्य को 'सेव' करने और बाद में जांचने का कोई तरीका नहीं है कि अगर मेरा स्ट्रिंग 10 के साथ समाप्त होता है , तो यह इस तरह से एनएफए है ​​कि यह अनुमान लगा रहा है कि क्या स्ट्रिंग एक स्वीकार्य राज्य में शाखा करने से पहले 10 के साथ समाप्त होता है । यहाँ पर nondeterminism बहुत सारे विकल्प बना रहा है और हमेशा सही बना रहा है।1q0q001010

एनएफए का निर्माण करना आसान है क्योंकि यह डीएफए का निर्माण करना है, अच्छी बात यह है कि दोनों समान हैं


हां मुझे एनएफए का सिद्धांत भाग पता है। लेकिन मैं जो पूछ रहा था वह तब भी था जब एक एकल इनपुट वर्णों के लिए कई संक्रमण हैं, मशीन यह निर्धारित करती है कि सभी राज्यों तक यह कैसे पहुंच सकता है (सूत्र बनाकर कह सकते हैं)। इसलिए यह सचमुच डीएफए है। [या आपको लगता है कि मैं नियतिवाद के अर्थ का गलत अर्थ लगा रहा हूं ]
मधुसूदन पी।

1
उदाहरण में थोड़ा और अधिक जटिल एनएफए को बेहतर बनाया जा सकता है, क्योंकि इसी उद्देश्य के लिए डीएफए आपके एनएफए के समान राज्यों का उपयोग करेगा और विशेष रूप से जटिल नहीं होगा। इसके विपरीत, एक अधिक जटिल नियमित अभिव्यक्ति के मिलान के लिए एक जटिल और गड़बड़ डीएफए की आवश्यकता हो सकती है लेकिन एक एनएफए में तुच्छ हो।
सुपरकैट

ε

1
@Aristu यदि आप अपनी पसंदीदा प्रोग्रामिंग भाषा में NFA लागू कर रहे हैं, तो थ्रेड्स एक भयानक विकल्प हैं। बल्कि, आपको बस राज्यों के सेट का ध्यान रखना चाहिए कि इनपुट के प्रत्येक चरित्र को पढ़ने के बाद ऑटोमेटन "हो सकता है"। परिणामस्वरूप कोड डीएफए के कार्यान्वयन के रूप में लगभग तेज हो जाएगा।
डेविड रिचीर्बी


5

एनएफए का संक्रमण कार्य किसी भी समय अनुमत बदलाव को निर्दिष्ट करता है। एक से अधिक विकल्प हो सकते हैं, और NFA एक संक्रमण nondeterministically चुनता है अंततः एक स्वीकार्य स्थिति में पहुंचने के लक्ष्य के साथ ।

शायद आपको तब तक इंतजार करना चाहिए जब तक आप nondeterministic Turing Machines के बारे में नहीं जान लेते। दोनों मामलों में Nondeterminism का मतलब एक ही है।


क्या आप इस बात पर प्रकाश डाल सकते हैं कि "एक संक्रमण nondeterministically"। और कृपया मेरे उत्तर की भी समीक्षा करें
मधुसूदन पी।

मुझे लगता है कि हमारे दोनों उत्तर सुपर अच्छे नहीं हैं, हालांकि आपका अंतर्ज्ञान ध्वनि है।
युवल फिल्मस

3

एक Finite Automaton के साथ शुरू करें। इसमें राज्य और स्वीकृति वाले राज्य और संक्रमण हैं।

अब, यह हर राज्य की की एक से अधिक trasition नियम देते हैं, और कहते हैं कि यह स्वीकार करता है वहां मौजूद संक्रमण नियमों का एक सेट इस तथ्य के बाद उठाया कि स्वीकृति राज्य को इनपुट स्ट्रिंग दी गई है।

एक बार जब आपके पास अपना इनपुट स्ट्रिंग होता है, तो उस स्ट्रिंग को स्वीकार करने के लिए ठोस संक्रमणों का एक निश्चित सेट होता है और कहता है कि यह (एक समय में) गुजरता है। लेकिन यह जो बदलाव करता है वह केवल स्ट्रिंग के अंत में चुना जाता है । जबकि स्ट्रिंग को पढ़ा जा रहा है, कौन सा रास्ता तय करना है।

यह गैर-नियतात्मक है। यह ग्राफ के माध्यम से अपना रास्ता चुन लेता है जब आप इसे पूरी समस्या देते हैं, न कि यह इनपुट को पढ़ता है।


अब, हम इस विचार प्रयोग की तुलना में इसे अलग तरह से औपचारिक रूप देते हैं, लेकिन इससे आपको प्रेरणा मिलती है कि इसे यह नाम क्यों मिला।

यह बताता है कि इसे पहली जगह में नाम कैसे मिला। हां, आप NDFA को पूरी तरह से नियतात्मक तरीके से मॉडल कर सकते हैं, लेकिन नाम चिपचिपे हैं । एक बार जब आप कुछ बॉब को बुलाते हैं, तो इसका नाम बदलकर कुछ और करने के लिए एक संचार लागत होती है, क्योंकि कोई नहीं जानता कि आप किस बारे में बात कर रहे हैं जब आप इसे एलिस कहते हैं।


हाँ! मैं एनएफए के बारे में आपके स्पष्टीकरण से सहमत हूं। लेकिन मेरा सवाल यह है कि यह गैर-नियतात्मक क्यों है, भले ही राज्यों के सेट को एक इनपुट के लिए परिभाषित किया गया हो
मधुसूदन पी

@MadhusoodanP इसे गैर-नियतात्मक कहा जाता है क्योंकि यह कैसे आविष्कार / कल्पना की गई थी। और नाम चिपचिपे होते हैं, भले ही हम इसे मॉडल करने के लिए बहुविकल्पी पूरी तरह से नियतात्मक तरीके परिभाषित करते हैं।
याकूब

1

से विकिपीडिया , सबसे अच्छा तरीका यह के बारे में सोचना नियतात्मक परिमित स्थिति मशीनों (DFA) के साथ शुरू करने के लिए है। डीएफए के लिए, प्रत्येक संक्रमण को वर्तमान स्थिति और इनपुट प्रतीक द्वारा संसाधित किए जाने के लिए विशिष्ट रूप से निर्धारित किया जाता है। Nondeterministic परिमित राज्य मशीनें (NFA) बस वही होती हैं जो आपको तब मिलती हैं जब आप इस नियतत्व नियम को शिथिल कर देते हैं ताकि संक्रमणों को विशिष्ट रूप से परिभाषित न किया जा सके। जब आप डीएफए से निर्धारक नियम हटाते हैं तो यह आपको मिलता है।


यह थोड़ा और अधिक जटिल है, क्योंकि नॉनडेटर्मिनिज़्म भी एक विशिष्ट स्वीकृति स्थिति है।
युवल फिल्मस

1

एनएफए और डीएफए दोनों का उपयोग (अन्य चीजों के बीच) कुछ तारों को पहचानने के लिए किया जाता है।

गैर-नियतात्मक परिमित ऑटोमोटन काम करता है जैसे कि उसके निर्णयों पर इसका प्रभाव था - यह एक पथ का पालन करने के लिए "चुन सकता है", या नहीं।

NFA example

ऊपर की छवि पर, जब हम स्ट्रिंग "00111" के साथ काम कर रहे हैं, तो ध्यान दें कि पहले "1" का सामना करते समय, पालन करने के दो संभावित तरीके हैं। कोई "p" पर रह सकता है या "q" पर जा सकता है। यदि ऑटोमेटा को "q" पर जाना था, तो वह स्ट्रिंग को स्वीकार नहीं करेगा (क्योंकि "q" से कोई किनारा नहीं निकल रहा है)। लेकिन स्ट्रिंग को इस ऑटोमेटा द्वारा "क्यू" पर जाकर केवल अंतिम 1 के साथ स्वीकार किया जा सकता है, जबकि बाकी सब के लिए "पी" पर रहना (और यही हो रहा है)।

NFA इसे ऑटोमेटा जैसा "जानता" है जो आगे है, और उसी के अनुसार चुनता है।

बेशक यह नहीं है। DFA और NFA शक्ति के संदर्भ में समान हैं (आप NFA को DFA में कम कर सकते हैं और DFA (शायद) NFA के उपयोग के साथ सरल बना सकते हैं), लेकिन NFA उपयोगी है, क्योंकि इसने ग्राफ़ को बनाए रखते हुए DFA के समान भाषाओं को परिभाषित करने की अनुमति दी है छोटे और अधिक पठनीय।

वहाँ कुछ भी यादृच्छिक नहीं है। गैर-नियतात्मक भाग इस तथ्य पर जोर देता है कि लेने के लिए कुछ "विकल्प" है, लेकिन सच्चाई यह है कि ऑटोमेटा कोई भी निर्णय नहीं लेता है।


0

वैसे यहाँ पुस्तक से कुछ सामग्री का मिश्रण है [पीटर लिन्ज़ 4 ई द्वारा औपचारिक भाषाओं और ऑटोमेटा का परिचय] और मेरी समझ।

एक गेम खेलने वाले कार्यक्रम पर विचार करें जहां मशीन को अगले कदम के लिए निर्णय लेने की जरूरत है [टिक-टैक-टू के लिए कहें]। चूंकि कई कदम संभव हैं, हम निर्दिष्‍ट रूप से प्रत्येक चाल का चयन करते हैं और चाल का मूल्यांकन करते हैं और सर्वश्रेष्ठ के लिए चुनते हैं। भले ही चयन प्रक्रिया निर्धारक थी और कई संभावित चालें थीं, अंतिम चरण में किया गया एक एकल था और प्रतिद्वंद्वी से सभी कोशिश की गई चाल-गणना को छिपाते हुए सर्वश्रेष्ठ चाल के रूप में चुना गया था। [यहां हम मानते हैं कि प्रत्येक संभावित कदम की मूल्यांकन प्रक्रिया प्रतिद्वंद्वी से छिपाई गई थी]।

इसलिए केवल एक ही विकल्प बनाया गया और प्रतिद्वंद्वी को एक भ्रम दिया गया कि यह कदम गैर-नियतात्मक था।

वैसे यदि आप यह पूछकर अभी तक आश्वस्त नहीं हैं कि सबसे अच्छा कदम कुछ निर्धारक गणनाओं का उत्पाद था, तो आपको उस मशीन पर विचार करना चाहिए जो पूरी तरह से यादृच्छिक चालें बनाती है (मशीन लूज़ हो सकती है लेकिन यह एनएफए है)।


1
इसे लगाने का एक और तरीका: प्रतिद्वंद्वी के लिए , आपकी पसंद nondeterministic थी। प्रतिद्वंद्वी के दृष्टिकोण से सिस्टम को मॉडलिंग करते समय, आपकी चाल एक nondeterministic पसंद है, जब तक कि प्रतिद्वंद्वी ने इसके पीछे निर्धारण प्रक्रिया का पता नहीं लगाया है।
रिस्टोरियरपोस्ट

@reinierpost बिल्कुल वही जो मैं बताना चाहता था
मधुसूदन पी।

एक अधिक दिलचस्प उदाहरण एक सीमित-सूचना चलती-फिरती खेल हो सकता है (उदाहरण के लिए "पुलिस और लुटेरे" शैली)। एक खिलाड़ी भूलभुलैया के चारों ओर एक डाकू को स्थानांतरित करता है जबकि दूसरा खिलाड़ी पुलिस को हिलाता है। किसी भी समय जब एक पुलिस लुटेरा देख सकता है, तो लुटेरे का राज्य उसका स्थान होगा, लेकिन किसी भी मोड़ पर जब कोई भी पुलिस लुटेरे को न देख ले, तो लुटेरा किसी भी ऐसे वर्ग में संक्रमण कर सकता है, जो अपनी स्थिति से सटे हों और वह पुलिस कर सकता हो उस पल में नहीं देख सकता।
16

@supercat एक अच्छा है, लेकिन बनाया संक्रमण हमेशा एक ही राज्य है, और यदि आप सबसे अच्छा कदम की गणना छिपाते हैं तो यह गैर-नियतात्मक लगता है
मधुसूदन पी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.