मैं कैसे सत्यापित करूं कि एक DFA NFA के बराबर है?


10

मैं NFAs को DFA में बदलना सीख रहा हूं और मैं यह सुनिश्चित करना चाहता हूं कि मैं इसे सही कर रहा हूं। जाहिर है, दूसरी दिशा में वापस जाना कोई बात नहीं है। क्या किसी को एल्गोरिथ्म की जांच करने के लिए पता है कि डीएफए एनएफए के बराबर है?


एक उम्मीदवार व्याख्या: क्या एनएफए को डीएफए में परिवर्तित करने की समस्या के लिए एक "परिणाम चेकर" ( वासरमैन और ब्लम के अर्थ में ) है? दूसरे शब्दों में, क्या एक एल्गोरिथ्म है जो स्वयं रूपांतरण करने की तुलना में समान रूप से तेज़ है, जिसने रूपांतरण-एल्गोरिथ्म के लिए एक कथित (इनपुट, आउटपुट) जोड़ी दी है, यह जांचता है कि क्या आउटपुट सही है?
DW

जवाबों:


7

यह एक समस्याग्रस्त प्रश्न है। ऑटोमेटा की समतुल्यता की जांच करने का एक तरीका है, जिसे अब मैं समझाऊंगा, लेकिन मुझे डर है कि यह आपकी मदद नहीं करेगा, जैसा कि आप अंत में देखेंगे।

उस दो सेट याद करें और बी iff बराबर हैं एक बी और बी एक (इस सेट समानता की परिभाषा है)। इस प्रकार, यह काफी आपको लगता है कि सत्यापित करने के लिए है एल ( डी ) एल ( एन ) और एल ( एन ) एल ( डी ) , जहां डी और एन , आपके DFA और NFA हैं क्रमशः।ABABBAL(D)L(N)L(N)L(D)DN

लेकिन आप भाषाओं के नियंत्रण की जाँच कैसे करते हैं, आप पूछ सकते हैं। खैर, अब देख सकते हैं कि iff एक ¯ बी = (जहां ¯ बी के पूरक है बी )।ABAB¯=B¯B

चलो पहले की जाँच करें कि क्या विचार करना । ऐसा करने के लिए, आपको डी को पूरक करने की आवश्यकता है (बहुत आसान - अस्वीकार करने वाले राज्यों को स्वैप करें), फिर एन के साथ चौराहे ऑटोमेटन (जैसे उत्पाद निर्माण) के साथ निर्माण करें, और स्वीकार करने के लिए एक रास्ता ढूंढकर, खालीपन की जांच करें।L(N)L(D)DN

हालांकि, दिशा निर्देश दिखाएगा कि यह आपकी मदद क्यों नहीं करता है। आदेश की जांच करने के लिए कि क्या में , आप पूरक की जरूरत है एन । लेकिन एनएफए को पूरक करने के लिए, आपको पहले इसे डीएफए में बदलने की जरूरत है, जिससे पूरे विचार को बेकार कर दिया जाएगा।L(D)L(N)N

अनिवार्य रूप से, आपके प्रश्न के साथ समस्या बहुत गहरी है: आप यह सत्यापित करना चाहते हैं कि आपने (अपरिभाषित कम्प्यूटेशनल मॉडल) एक अच्छी तरह से परिभाषित एल्गोरिथ्म को ठीक से निष्पादित किया है। तो यह वास्तव में कंप्यूटर-विज्ञान की समस्या नहीं है।

मैं यह कहना होगा: निर्माण मैं सुझाव के बाद, यह है कि समाप्त करने के लिए कठिन नहीं है ज्यादा से ज्यादा वहाँ लंबाई का एक शब्द है iff 2 2 n ( n के राज्यों की संख्या जा रहा है एन ) कि एक के द्वारा स्वीकार किया जाता है और दूसरे द्वारा नहीं। तो आप इस लंबाई तक सभी शब्दों को आजमा सकते हैं।L(D)L(N)22nnN


सुविचारित उत्तर के लिए धन्यवाद। मैंने आज कुछ नया सीखा। ऐसा लगता है कि मेरा सबसे अच्छा शर्त सिर्फ JFLAP के खिलाफ मेरे काम की तुलना करना है।
IAmOnStackExchange

2
जब तक आपका एनएफए बड़ा नहीं होता (जैसे 7-8 से अधिक राज्यों के साथ), आपका सबसे अच्छा विकल्प शायद सिर्फ खुद को ध्यान से जांचना है। आमतौर पर, गैर-पहुंच योग्य राज्यों को हटाने के बाद, आपको एक छोटा डीएफए मिलता है, और मैन्युअल रूप से जांचना बहुत मुश्किल नहीं है।
शाऊल

1
क्या आप दोनों मशीनों को निर्धारित और कम नहीं कर सकते हैं और जांच सकते हैं कि क्या दो मशीनें आइसोमॉर्फिक हैं?
साढ़ेसाती

5

आगे बढ़ने का एक तरीका एनएफए को डीएफए में बदलना है और फिर दो डीएफए की समतुल्यता की जांच करना है, जिसके लिए एक रैखिक एल्गोरिथ्म है [1]।

निम्नलिखित पेपर दो एनएफए (जो निश्चित रूप से आपके मामले पर भी लागू होता है) की तुल्यता के सामान्य मामले को अधिक व्यवहार करता है।

फिलिप्पो बोन्ची, डेमियन पॉश, एनआईएफए समतुल्यता की जाँच करते हुए द्विभाषियों के साथ प्रोग्रामिंग भाषा के सिद्धांत (पीओपीएल), जनवरी 2013, रोमा, इटली। एसीएम, पीपी .457-468, 2013।

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

[१] जेई हॉपक्रॉफ्ट और आरएम कार्प। परिमित ऑटोमेटा के समतुल्य परीक्षण के लिए एक रैखिक एल्गोरिथ्म। टीआर 114, कॉर्नेल यूनिव।, दिसंबर 1971।

इस पत्र के लिए वेब परिशिष्ट भी देखें , जिसमें परिणामों के कोक प्रूफ स्क्रिप्ट, एक कार्यान्वयन के लिए एक लिंक और एक इंटरैक्टिव एप्लेट है।


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

2
@aprogrammer मेरे उत्तर का मुख्य भाग एक एल्गोरिथम का संदर्भ है जिसके लिए एक Coq प्रूफ स्क्रिप्ट उपलब्ध है, जो निश्चित रूप से सबसे सुरक्षित जाँच विधि है जिसके बारे में मैं सोच सकता हूँ।
जे- ई।

1
मुझे यकीन नहीं है कि एनएफए से डीएफए एक जैसे सरल एल्गोरिदम की उनकी समझ के बारे में कोई क्या अनिश्चित है, एक कोक प्रूफ स्क्रिप्ट के साथ क्या करेगा। यह एक तीसरे ग्रेडर की गणित समस्या को हल करने के लिए बीजगणित का उपयोग करने जैसा दिखता है।
एपीग्रामग्राम

0

यह प्रश्न एक सैद्धांतिक प्रश्न के बजाय लागू सॉफ्टवेयर परीक्षण और व्यवहार में शुद्धता की पुष्टि करने के बारे में अधिक है।

  • डी1डी2¯डी2डी1¯डी¯

  • आप अपने परिणामों को मान्य करने के लिए परीक्षण किए गए पूर्व परीक्षण किए गए सॉफ़्टवेयर पर भरोसा कर सकते हैं। उदा AT & T FSM लाइब्रेरी

  • एक और विचार: यादृच्छिक परीक्षण। अपनी भाषा के भीतर यादृच्छिक तार उठाओ। यह निर्धारित करें कि स्ट्रिंग्स को डीएफए / एनएफए द्वारा स्वीकार या अस्वीकार किया गया है या नहीं। यदि दोनों समान नहीं हैं, तो उच्च संभावना के साथ आप उस बेमेल को तार पाएंगे।

  • एक और विचार: आप DFA और NFA की सभी शाखाओं को किसी विशेष गहराई तक ले जाने के लिए कोड लिख सकते हैं और बेमेल खोज सकते हैं। यह दी गई लंबाई के सभी संभावित स्वीकृत तारों को मानने के बराबर है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.