मैं NFAs को DFA में बदलना सीख रहा हूं और मैं यह सुनिश्चित करना चाहता हूं कि मैं इसे सही कर रहा हूं। जाहिर है, दूसरी दिशा में वापस जाना कोई बात नहीं है। क्या किसी को एल्गोरिथ्म की जांच करने के लिए पता है कि डीएफए एनएफए के बराबर है?
मैं NFAs को DFA में बदलना सीख रहा हूं और मैं यह सुनिश्चित करना चाहता हूं कि मैं इसे सही कर रहा हूं। जाहिर है, दूसरी दिशा में वापस जाना कोई बात नहीं है। क्या किसी को एल्गोरिथ्म की जांच करने के लिए पता है कि डीएफए एनएफए के बराबर है?
जवाबों:
यह एक समस्याग्रस्त प्रश्न है। ऑटोमेटा की समतुल्यता की जांच करने का एक तरीका है, जिसे अब मैं समझाऊंगा, लेकिन मुझे डर है कि यह आपकी मदद नहीं करेगा, जैसा कि आप अंत में देखेंगे।
उस दो सेट याद करें और बी iff बराबर हैं एक ⊆ बी और बी ⊆ एक (इस सेट समानता की परिभाषा है)। इस प्रकार, यह काफी आपको लगता है कि सत्यापित करने के लिए है एल ( डी ) ⊆ एल ( एन ) और एल ( एन ) ⊆ एल ( डी ) , जहां डी और एन , आपके DFA और NFA हैं क्रमशः।
लेकिन आप भाषाओं के नियंत्रण की जाँच कैसे करते हैं, आप पूछ सकते हैं। खैर, अब देख सकते हैं कि iff एक ∩ ¯ बी = ∅ (जहां ¯ बी के पूरक है बी )।
चलो पहले की जाँच करें कि क्या विचार करना । ऐसा करने के लिए, आपको डी को पूरक करने की आवश्यकता है (बहुत आसान - अस्वीकार करने वाले राज्यों को स्वैप करें), फिर एन के साथ चौराहे ऑटोमेटन (जैसे उत्पाद निर्माण) के साथ निर्माण करें, और स्वीकार करने के लिए एक रास्ता ढूंढकर, खालीपन की जांच करें।
हालांकि, दिशा निर्देश दिखाएगा कि यह आपकी मदद क्यों नहीं करता है। आदेश की जांच करने के लिए कि क्या में , आप पूरक की जरूरत है एन । लेकिन एनएफए को पूरक करने के लिए, आपको पहले इसे डीएफए में बदलने की जरूरत है, जिससे पूरे विचार को बेकार कर दिया जाएगा।
अनिवार्य रूप से, आपके प्रश्न के साथ समस्या बहुत गहरी है: आप यह सत्यापित करना चाहते हैं कि आपने (अपरिभाषित कम्प्यूटेशनल मॉडल) एक अच्छी तरह से परिभाषित एल्गोरिथ्म को ठीक से निष्पादित किया है। तो यह वास्तव में कंप्यूटर-विज्ञान की समस्या नहीं है।
मैं यह कहना होगा: निर्माण मैं सुझाव के बाद, यह है कि समाप्त करने के लिए कठिन नहीं है ज्यादा से ज्यादा वहाँ लंबाई का एक शब्द है iff 2 2 n ( n के राज्यों की संख्या जा रहा है एन ) कि एक के द्वारा स्वीकार किया जाता है और दूसरे द्वारा नहीं। तो आप इस लंबाई तक सभी शब्दों को आजमा सकते हैं।
आगे बढ़ने का एक तरीका एनएफए को डीएफए में बदलना है और फिर दो डीएफए की समतुल्यता की जांच करना है, जिसके लिए एक रैखिक एल्गोरिथ्म है [1]।
निम्नलिखित पेपर दो एनएफए (जो निश्चित रूप से आपके मामले पर भी लागू होता है) की तुल्यता के सामान्य मामले को अधिक व्यवहार करता है।
फिलिप्पो बोन्ची, डेमियन पॉश, एनआईएफए समतुल्यता की जाँच करते हुए द्विभाषियों के साथ प्रोग्रामिंग भाषा के सिद्धांत (पीओपीएल), जनवरी 2013, रोमा, इटली। एसीएम, पीपी .457-468, 2013।
सार । हम गैर-नियतात्मक परिमित ऑटोमेटा की भाषा तुल्यता साबित करने के लिए एक तकनीक के रूप में बधाई देने के लिए बिसिमुलेशन पेश करते हैं। इस तकनीक का अनुसरण करते हुए, हम हॉपक्रॉफ्ट और कार्प [1] द्वारा शास्त्रीय एल्गोरिथ्म के एक अनुकूलन को विकसित करते हैं। हम हाल ही में शुरू किए गए एंटीचिन एल्गोरिदम के बारे में अपने दृष्टिकोण की तुलना करते हैं, दो अंतर्निहित सहसंयोजक प्रमाण विधियों का विश्लेषण और संबंधित करते हैं। हम ठोस उदाहरण देते हैं जहां हम तेजी से एंटीचिन पर सुधार करते हैं; प्रयोगात्मक परिणाम इसके अलावा नगण्य सुधार दिखाते हैं।
[१] जेई हॉपक्रॉफ्ट और आरएम कार्प। परिमित ऑटोमेटा के समतुल्य परीक्षण के लिए एक रैखिक एल्गोरिथ्म। टीआर 114, कॉर्नेल यूनिव।, दिसंबर 1971।
इस पत्र के लिए वेब परिशिष्ट भी देखें , जिसमें परिणामों के कोक प्रूफ स्क्रिप्ट, एक कार्यान्वयन के लिए एक लिंक और एक इंटरैक्टिव एप्लेट है।
यह प्रश्न एक सैद्धांतिक प्रश्न के बजाय लागू सॉफ्टवेयर परीक्षण और व्यवहार में शुद्धता की पुष्टि करने के बारे में अधिक है।
आप अपने परिणामों को मान्य करने के लिए परीक्षण किए गए पूर्व परीक्षण किए गए सॉफ़्टवेयर पर भरोसा कर सकते हैं। उदा AT & T FSM लाइब्रेरी
एक और विचार: यादृच्छिक परीक्षण। अपनी भाषा के भीतर यादृच्छिक तार उठाओ। यह निर्धारित करें कि स्ट्रिंग्स को डीएफए / एनएफए द्वारा स्वीकार या अस्वीकार किया गया है या नहीं। यदि दोनों समान नहीं हैं, तो उच्च संभावना के साथ आप उस बेमेल को तार पाएंगे।
एक और विचार: आप DFA और NFA की सभी शाखाओं को किसी विशेष गहराई तक ले जाने के लिए कोड लिख सकते हैं और बेमेल खोज सकते हैं। यह दी गई लंबाई के सभी संभावित स्वीकृत तारों को मानने के बराबर है।