मुझे डीएफए बनाने की एक सरल समस्या है जो दोहरे अक्षरों (ए, बी बी) से शुरू होने वाले सभी इनपुटों को स्वीकार करती है या दोहरे अक्षरों (एए, बी बी) के साथ समाप्त होती है, दिए गए दिए गए भाषा का वर्णमाला सेट है।
मैंने इसे एक गोल चक्कर तरीके से हल करने की कोशिश की:
- एक नियमित अभिव्यक्ति उत्पन्न करना
- इसके अनुरूप एनएफए बनाना
- DFA को घटाने के लिए पॉवरसेट निर्माण का उपयोग करना
- डीएफए में राज्यों की संख्या को न्यूनतम करना
चरण 1: दी गई समस्या के लिए नियमित अभिव्यक्ति है (अनगिनत अन्य लोगों के बीच):
((aa|bb)(a|b)*)|((a|b)(a|b)*(aa|bb))
चरण 2: दी गई अभिव्यक्ति के लिए NFA है:
(स्रोत: livefilestore.com )
सारणीबद्ध रूप में, NFA है:
State Input:a Input:b
->1 2,5 3,5
2 4 -
3 - 4
(4) 4 4
5 5,7 5,6
6 - 8
7 8 -
(8) - -
चरण 3: अधिकार निर्माण का उपयोग करते हुए DFA में परिवर्तित करें:
Symbol, State + Symbol, State (Input:a) + Symbol, State (Input:b)
->A, {1} | B, {2,5} | C, {3,5}
B, {2,5} | D, {4,5,7} | E, {5,6}
C, {3,5} | F, {5,7} | G, {4,5,6}
(D), {4,5,7} | H, {4,5,7,8} | G, {4,5,6}
E, {5,6} | F, {5,7} | I, {5,6,8}
F, {5,7} | J, {5,7,8} | E, {5,6}
(G), {4,5,6} | D, {4,5,7} | K, {4,5,6,8}
(H), {4,5,7,8} | H, {4,5,7,8} | G, {4,5,6}
(I), {5,6,8} | F, {5,7} | I, {5,6,8}
(J), {5,7,8} | J, {5,7,8} | E, {5,6}
(K), {4,5,6,8} + D, {4,5,7} + K, {4,5,6,8}
चरण 4: DFA को कम से कम करें:
मैंने K-> G, J-> F, I-> E को पहले बदल दिया है। अगले पुनरावृत्ति में, एच-> डी और ई-> एफ। इस प्रकार, अंतिम तालिका है:
State + Input:a + Input:b
->A | B | C
B | D | E
C | E | D
(D) | D | D
(E) | E | E
और आरेखीय रूप से ऐसा दिखता है:
(स्रोत: livefilestore.com )
... जो आवश्यक DFA नहीं है! मैंने अपना परिणाम ट्रिपल चेक कर लिया है। तो, मैं कहाँ गलत था?
ध्यान दें:
- -> = प्रारंभिक अवस्था
- () = अंतिम स्थिति