एनएफए को ओवरलैपिंग चक्रों के साथ एक नियमित अभिव्यक्ति में कैसे परिवर्तित किया जाए?


11

अगर मैं सही तरीके से समझूं, तो एनएफए में नियमित अभिव्यक्तियों के रूप में एक ही अभिव्यंजक शक्ति है। अक्सर, एनएफए से समकक्ष नियमित अभिव्यक्तियों को पढ़ना आसान होता है: आप साइकिल को सितारों, जंक्शनों को विकल्प के रूप में और इतने पर अनुवाद करते हैं। लेकिन इस मामले में क्या करना है:

यहाँ छवि विवरण दर्ज करें
[ स्रोत ]

ओवरलैपिंग चक्रों को यह देखना मुश्किल हो जाता है कि यह ऑटोमेटन क्या स्वीकार करता है (नियमित अभिव्यक्तियों के संदर्भ में)। क्या कोई तरकीब है?


2
यह अच्छा होगा यदि आप आरेख में इंगित कर सकते हैं कि प्रारंभिक और अंतिम राज्य क्या हैं: प्रारंभिक राज्य के लिए एक छोटा तीर और अंतिम राज्य के रूप में एक डबल सर्कल। इसके अलावा, यह जानना कठिन है कि आप कहाँ गलत हो रहे हैं यदि आपने जो भी प्रयास किया है उसका कोई संकेत नहीं देता है।
डेव क्लार्क

शायद यह दस्तावेज़ आपकी मदद कर सकता है: यह स्पष्ट रूप से बताता है कि एनएफए को आरई में कैसे बदलना है।
Vor

1
यह कठिन क्यों है? क्या आपने विहित एल्गोरिदम की कोशिश की है? आप कर सकते हैं सबसे अच्छा ansatz क्या है?
राफेल

3
मैंने इस साइट के लिए प्रश्न (imho) को रोचक और अच्छा बनाने के लिए संपादन किया। एक राय बनाने के लिए संशोधन इतिहास देखें ।
राफेल

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

जवाबों:


5

"पढ़ना बंद" करने के बजाय आपको ऐसा करने के लिए कई विहित तरीकों में से एक को नियोजित करना चाहिए। अब तक मैंने जो सबसे अच्छा देखा है, वह ऑटोमैटॉन को (नियमित) भाषाओं की समीकरण प्रणाली के रूप में व्यक्त करता है, जिसे हल किया जा सकता है। यह विशेष रूप से अच्छा है क्योंकि यह अन्य तरीकों की तुलना में अधिक संक्षिप्त अभिव्यक्ति देता है।

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

क्षमैं

क्यूमैं=क्षमैंक्षजेक्यूजे{{ε}, क्षमैंएफ, अन्य

एफक्षमैंक्षजे इसका मतलब है कि वहाँ से एक संक्रमण है क्षमैं सेवा क्षजे के साथ लेबल किया गया । अगर आप पढ़ते हैं जैसा + या | (आपकी नियमित अभिव्यक्ति परिभाषा के आधार पर), आप देखते हैं कि यह नियमित अभिव्यक्ति का एक समीकरण है।

इसे हल करना ( आर्डेन लेम्मा का उपयोग करके ) एक नियमित अभिव्यक्ति देता हैक्यूमैं हर राज्य के लिए जो वास्तव में उन शब्दों का वर्णन करता है जिन्हें शुरू करने के लिए स्वीकार किया जा सकता है क्षमैं; इसलियेक्यू0 (अगर क्ष0 प्रारंभिक अवस्था है) वांछित अभिव्यक्ति है।

दिए गए ऑटोमेटन के लिए आवेदन एक अभ्यास के रूप में छोड़ दिया गया है; एक पूर्ण उदाहरण उपरोक्त लिंक किए गए दस्तावेज़ में शामिल है ।

यहाँ भी देखें जहाँ मैंने एक समान उत्तर पोस्ट किया था।


1
अन्य सामान्य विधियों के लिए यह संदर्भ प्रश्न देखें ।
राफेल

3

यदि बिना लूप वाले राज्यों की एक श्रृंखला होती, तो क्या आप जानते हैं कि क्या करना है?

यदि इस अतिव्यापी शाखाओं के बिना एक सरल लूप होता, तो क्या आप जानते हैं कि क्या करना है?

(यदि जवाब "नहीं" है, तो पहले इन मामलों के बारे में सोचें।)

Now, the idea is to transform the automaton progressively to put it in a form where you can spot those patterns: chains, loops, and diverging paths that reconverge in the end (leading to alternation). At every step of the transformation, take care that the transformed automaton still recognizes the same language.

Keep in mind that this is a non-deterministic automaton. The one you posted happens to be deterministic, but it doesn't have to stay that way when you transform it.

Since the sticky point is that q2 can be reached from two different points, split it in two. Keep q1fq2gq3, remove the transition from q4 to q2 and add instead a new state q5 with transitions q4jq5gq3. Now you should be able to spot a pattern.

If you still have trouble at this point, notice that the loop involving q3,q4,q5एक साधारण नियमित अभिव्यक्ति से मेल खाती है। जब आप के पासक्ष3, आप इस लूप के चारों ओर जितने चाहें उतने रन बना सकते हैं। कुछ अर्थों में (जिसे तकनीकी बनाया जा सकता है), आप राज्य को बदल सकते हैंक्ष3 नियमित अभिव्यक्ति द्वारा (जेजी)*

ध्यान रखें कि कौन से राज्य अंतिम हैं, इसकी जाँच करें। यह पहली बार में इस बारे में चिंता न करने और एक बड़ा लूप बनाने में मदद कर सकता है, फिर डुप्लिकेट भागों को डुप्लिकेट के माध्यम से समाप्त करता है।

यह जरूरी नहीं कि सबसे कुशल तकनीक है या वह जो सबसे सरल नियमित अभिव्यक्ति उत्पन्न करता है, लेकिन यह सरल है।


3

स्प्लिट q_1


और यह सवाल का जवाब देता है कि कैसे?
राफेल

1
यदि आप इस तरह से राज्य मशीन को फिर से लिखते हैं, तो यह बराबर नियमित अभिव्यक्ति पढ़ने के लिए तुच्छ है।
जुका सुकोमेला

1
शायद आपको इसे उत्तर पाठ में शामिल करना चाहिए। क्या यह हमेशा काम करता है?
राफेल

@ राफेल: यह इस मामले में काम करता है। :) इस चाल के पीछे सामान्य विचार निम्नलिखित है: हमने चक्रों को "ठीक से नेस्टेड" बनाया। यही है, हमारे पास चक्र संरचना नहीं है [(])लेकिन [()]
जुका सूमेला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.