चूंकि आप "रेगेक्स को डीएफए में 30 मिनट से कम समय में बदलना चाहते हैं", मुझे लगता है कि आप अपेक्षाकृत छोटे उदाहरणों पर काम कर रहे हैं।
इस मामले में आप ब्रोज़ोज़ोस्की के एल्गोरिथ्म का उपयोग कर सकते हैं , जो सीधे एक भाषा के नेरोड ऑटोमैटन की गणना करता है (जो कि इसके न्यूनतम नियतात्मक ऑटोमेटन के बराबर जाना जाता है)। यह व्युत्पन्न के प्रत्यक्ष अभिकलन पर आधारित है और यह प्रतिच्छेदन और पूरकता की अनुमति देने वाले विस्तारित नियमित अभिव्यक्तियों के लिए भी काम करता है। इस एल्गोरिथ्म का दोष यह है कि इसे रास्ते में गणना की गई अभिव्यक्तियों की समतुल्यता, एक महंगी प्रक्रिया की जांच करने की आवश्यकता है। लेकिन व्यवहार में, और छोटे उदाहरणों के लिए, यह बहुत कुशल है।[ १ ]
बायां कोटेदार । चलो की एक भाषा होना एक * दो और यू एक शब्द हो। फिर
यू - 1 एल = { v ∈ एक * | यू वी ∈ एल }
भाषा यू - 1 एल एक कहा जाता है बाईं भागफल (या व्युत्पन्न छोड़ दिया ) के एल ।एलए*यू
यू- 1एल = { वी ∈ ए*| यू वी ∈ एल }
यू- 1एलएल
Nerode automaton । Nerode आटोमैटिक मशीन के नियतात्मक आटोमैटिक मशीन है एक ( एल ) = ( क्यू , ए , ⋅ , एल , एफ ) जहां क्यू = { यू - 1 एल | यू ∈ एक * } , एफ = { यू - 1 एल | यू ∈ एल } और संक्रमण समारोह प्रत्येक के लिए परिभाषित किया गया है, एक ∈एलए( एल ) = ( क्यू , ए , ⋅ , एल , एफ)क्यू = { यू- 1एल | यू ∈ ए*}एफ= { यू- 1एल | यू ∈ एल } , सूत्र द्वारा
( यू - 1 एल ) ⋅ एक = एक - 1 ( यू - 1 एल ) = ( यू एक ) - 1 एल
इस बल्कि सार परिभाषा से सावधान रहें। के प्रत्येक राज्य में एक के एक छोड़ दिया भागफल है एल एक शब्द से, और इसलिए की एक भाषा है एक * । प्रारंभिक अवस्था भाषा है एल , और अंतिम राज्यों के सेट के सभी छोड़ दिया quotients का सेट है एल का एक शब्द से एल ।एक ∈ ए
( यू- 1एल ) ⋅ एक = एक- 1( यू- 1एल ) = ( यू ए )- 1एल
एएलए*एलएलएल
ए , बी
ए- 11ए- 1( एल1∪ ल2)ए- 1( एल1∩ ल2)= 0= ए- 1एल1∪ यू- 1एल2,= ए- 1एल1∩ यू- 1एल2,ए- 1खए- 1( एल1∖ ल2)ए- 1एल*= { १0अगर ए = बीयदि एक ≠ बी= ए- 1एल1∖ यू- 1एल2,= ( ए- 1ल ) ल*
ए- 1( एल1एल2)= { ( ए- 1एल1) एल2( a)- 1एल1) एल2∪ ए- 1एल2सी 1 ∉ एल1,सी 1 ∈ एल1
एल = ( एक ( एक ख )*)*∪ ( ख एक )*
1- 1एलए- 1एल1ख- 1एल1ए- 1एल2ख- 1एल2ए- 1एल3ख- 1एल3ए- 1एल4ख- 1एल4ए- 1एल5ख- 1एल5= एल = एल1= ( एक ख )*( एक ( एक ख )*)*= एल2= एक ( ख एक )*= एल3= ख ( एक ख )*( एक ( एक ख )*)*∪ ( एक ख )*( एक ( एक ख )*)*= बी एल2∪ ल2= एल4= ∅= ( ख एक )*= एल5= ∅= ए- 1( बी एल2∪ ल2) = ए- 1एल2= एल4= बी- 1( बी एल2∪ ल2) = ल2∪ बी- 1एल2= एल2= ∅= एक ( ख एक )*= एल3
[ १ ]
संपादित करें । (५ अप्रैल २०१५) मुझे अभी पता चला है कि एक समान प्रश्न: डीएएफए के निर्माण के लिए क्या एल्गोरिदम मौजूद हैं जो किसी दिए गए रेक्स द्वारा वर्णित भाषा को पहचानता है? cstheory पर पूछा गया था। जवाब आंशिक रूप से जटिलता के मुद्दों को संबोधित करता है।
a(a|ab|ac)*a+
। आप या तो सीधे उस एनडीएफए का अनुवाद कर सकते हैं जिसे आप डीएफए में कम कर देते हैं, या आप इसे उस चीज के लिए सामान्य कर सकते हैं जो नक्शे को डीएफए में तुरंत बदल देता है।