📘 CodingMarble Learn

परिमित अवस्था मशीन और औपचारिक भाषाएँ

परिमित अवस्था मशीन (FSM) में अवस्थाओं का एक सीमित समूह, इनपुट चिह्नों की वर्णमाला, एक आरंभ अवस्था, हर चिह्न पर अगली अवस्था बताने वाला संक्रमण नियम, और (स्वीकारक के लिए) स्वीकार अवस्थाएँ होती हैं। यह इनपुट स्ट्रिंग को एक-एक चिह्न पढ़ती है; अंत में स्वीकार अवस्था में हो तो स्ट्रिंग स्वीकार। मीली मशीन हर संक्रमण पर आउटपुट भी देती है। FSM जिन स्ट्रिंग्स को स्वीकार करती है वे रेगुलर भाषा बनाती हैं, जिसे रेगुलर एक्सप्रेशन से भी लिखा जा सकता है। कोष्ठकों जैसी नेस्टिंग वाली भाषाएँ कॉन्टेक्स्ट-फ़्री हैं और BNF नियमों या सिंटैक्स आरेख से लिखी जाती हैं।

🎬 कदम-दर-कदम कहानी

  1. यह मेट्रो गेट का टर्नस्टाइल है, मशीन की तरह बना। इसकी सिर्फ़ दो अवस्थाएँ हैं: बंद (लाल) और खुला (हरा)। "शुरू" वाला तीर बताता है कि मशीन कहाँ से शुरू होती है।
  2. अब तीर आते हैं। हर तीर एक संक्रमण है: "इस अवस्था में यह इनपुट आए तो वहाँ जाओ।" सिक्का बंद → खुला करता है। धक्का खुला → बंद करता है। लूप का मतलब "यहीं रहो"।
  3. इनपुट "सिक्का, धक्का" दीजिए। पीली गोली बंद से शुरू होकर सिक्के वाले तीर से खुला पर जाती है, फिर धक्के वाले तीर से वापस बंद पर।
  4. अब "धक्का, धक्का, सिक्का"। बंद गेट को धक्का देने से कुछ नहीं होता: गोली लूप पर घूमकर बंद पर ही रहती है। केवल सिक्का उसे खुला पर ले जाता है।
  5. खुला को स्वीकार अवस्था बनाइए (दोहरा छल्ला)। "सिक्का, धक्का, सिक्का" दीजिए: मशीन खुला पर रुकती है, इसलिए स्ट्रिंग स्वीकार। बंद पर रुकती तो अस्वीकार।
  6. खुला खेल: सिक्का और धक्का किसी भी क्रम में दबाइए। हर बार पहले अगली अवस्था का अंदाज़ा लगाइए, फिर गोली और परिणाम देखकर जाँचिए।

टिप: 3D दृश्य को घुमाने के लिए खींचें। ज़ूम के लिए दो उंगलियाँ इस्तेमाल करें।

🤔 आम शंकाएँ और उनके जवाब

"अवस्था" असल में क्या है?

मशीन को अतीत के बारे में जो कुछ याद है, वही अवस्था है। टर्नस्टाइल को बस "बंद या खुला" याद रखना है।

हर अवस्था में हर इनपुट का तीर क्यों चाहिए?

ताकि मशीन को हमेशा पता हो कहाँ जाना है। बंद पर धक्के का भी तीर है: वापस बंद पर लूप।

क्या इनपुट का क्रम मायने रखता है?

हाँ। "सिक्का, धक्का" बंद पर रुकता है, पर "धक्का, सिक्का" खुला पर। गोली क्रम से तीरों पर चलती है।

लूप वाले तीर का क्या मतलब है?

इनपुट अवस्था नहीं बदलता। बंद गेट को धक्का देने पर वह बंद ही रहता है।

मशीन स्वीकार या अस्वीकार कैसे तय करती है?

केवल आख़िरी अवस्था मायने रखती है: अगर वह दोहरे छल्ले वाली स्वीकार अवस्था है, तो पूरी स्ट्रिंग स्वीकार।

क्या एक से ज़्यादा स्वीकार अवस्थाएँ हो सकती हैं?

हाँ, कितनी भी, आरंभ अवस्था भी। यहाँ केवल खुला स्वीकार अवस्था है — खुले खेल में आज़माइए।

परिमित अवस्था मशीन क्या है?

परिमित अवस्था मशीन (FSM), जिसे परिमित ऑटोमेटन भी कहते हैं, कंप्यूटर का एक सरल मॉडल है जिसकी कोई मेमोरी नहीं — बस यह याद रहता है कि वह किस अवस्था में है। इसमें होते हैं:

मशीन इनपुट स्ट्रिंग बाएँ से दाएँ एक-एक चिह्न पढ़ती है। आख़िरी चिह्न के बाद अगर वह स्वीकार अवस्था में है, तो स्ट्रिंग स्वीकार; वरना अस्वीकार। ऐसी FSM हाँ/ना के अलावा कोई आउटपुट नहीं देती।

अगर हर अवस्था से हर चिह्न के लिए ठीक एक तीर हो, तो यह नियतात्मक FSM (DFA) है। अगर एक चिह्न के लिए कई तीर (या कोई नहीं) हो सकें, तो अनियतात्मक (NFA)। हर NFA को बराबर DFA में बदला जा सकता है।

अवस्था संक्रमण आरेख और तालिका

एक ही मशीन को आरेख में बना सकते हैं या तालिका में लिख सकते हैं।

वर्तमान अवस्थाइनपुटअगली अवस्था
बंदसिक्काखुला
बंदधक्काबंद
खुलासिक्काखुला
खुलाधक्काबंद

स्वीकारक का उदाहरण: अवस्थाएँ S0 (आरंभ, स्वीकार) और S1। वर्णमाला {0, 1}। 1 पढ़ने पर अवस्था बदलती है; 0 पर वही रहती है। यह मशीन ठीक वही बाइनरी स्ट्रिंग स्वीकार करती है जिनमें 1 की संख्या सम हो: 1001 → S0 (स्वीकार), 111 → S1 (अस्वीकार)।

आउटपुट वाली FSM: मीली मशीन

मीली मशीन हर संक्रमण पर आउटपुट देती है। हर तीर पर इनपुट / आउटपुट लिखा होता है। इसमें स्वीकार अवस्थाएँ नहीं होतीं; इसका काम इनपुट को आउटपुट में बदलना है।

उदाहरण: टर्नस्टाइल "खुलो" या "बीप" दे सकता है: बंद —सिक्का/खुलो→ खुला, बंद —धक्का/बीप→ बंद। एक और जाना-माना उदाहरण: जब इनपुट बिट पिछले बिट से अलग हो तो 1 देने वाली मशीन (एज डिटेक्टर)। मीली मशीनें ट्रैफ़िक लाइट नियंत्रक, वेंडिंग मशीन और सरल सिफ़र में काम आती हैं।

(मूर मशीन में आउटपुट केवल अवस्था पर निर्भर करता है, संक्रमण पर नहीं।)

समुच्चय, वर्णमाला और शब्द

वर्णमाला Σ चिह्नों का सीमित समुच्चय है, जैसे Σ = {a, b}। शब्द (स्ट्रिंग) चिह्नों का सीमित क्रम है; ख़ाली शब्द ε है। भाषा शब्दों का समुच्चय है, जैसे L = {ab, aab, aaab, …}।

समुच्चय संकेतन: A = {1, 2, 3}; समुच्चय-निर्माण {x | x ∈ ℕ ∧ x < 4}; ∅ रिक्त समुच्चय। संक्रियाएँ: सम्मिलन A ∪ B, सर्वनिष्ठ A ∩ B, अंतर A \ B, कार्तीय गुणनफल A × B (सभी क्रमित युग्म)। समुच्चय परिमित, गणनीय अनंत (जैसे ℕ) या अगणनीय (जैसे ℝ) हो सकते हैं।

सिंटैक्स शब्द का रूप है (क्या वह नियमों से बना है?); सीमैंटिक्स उसका अर्थ।

रेगुलर एक्सप्रेशन और रेगुलर भाषाएँ

रेगुलर एक्सप्रेशन एक छोटा पैटर्न है जो स्ट्रिंग्स के समुच्चय को बताता है:

कोई भाषा रेगुलर है अगर उसे रेगुलर एक्सप्रेशन से लिखा जा सके — और ठीक तभी कोई FSM उसे स्वीकार कर सकती है। उदाहरण: (0|1)*1 = 1 पर ख़त्म होने वाली बाइनरी स्ट्रिंग; 1*01* = ठीक एक 0 वाली स्ट्रिंग।

रोज़मर्रा में: KA05MN1234 जैसी भारतीय नंबर प्लेट का सरल पैटर्न [A-Z]{2}[0-9]{2}[A-Z]{1,2}[0-9]{4} है। पिनकोड, फ़ोन नंबर या तारीख़ भी ऐसे ही जाँचे जाते हैं।

सीमा: FSM बिना सीमा के गिन नहीं सकती। भाषा {aⁿbⁿ} (जितने a उतने b) रेगुलर नहीं है, इसलिए कोई FSM उसे स्वीकार नहीं करती।

कॉन्टेक्स्ट-फ़्री भाषाएँ: BNF और सिंटैक्स आरेख

मिलते कोष्ठक या व्यंजक के अंदर व्यंजक जैसी नेस्टेड संरचनाओं के लिए व्याकरण चाहिए। व्याकरण में टर्मिनल (असली चिह्न), नॉन-टर्मिनल (कोण-कोष्ठक में नाम) और उत्पादन नियम होते हैं। बैकस–नौर फ़ॉर्म (BNF) में:

<digit>   ::= 0|1|2|3|4|5|6|7|8|9
<integer> ::= <digit> | <digit><integer>

दूसरा नियम पुनरावर्ती (recursive) है, इसलिए किसी भी लंबाई का पूर्णांक बना सकता है। यही पुनरावृत्ति BNF को रेगुलर एक्सप्रेशन से ज़्यादा ताक़तवर बनाती है: जैसे <S> ::= ab | a<S>b से {aⁿbⁿ} बनता है।

EBNF में शॉर्टकट हैं: {x} दोहराव, [x] वैकल्पिक। सिंटैक्स आरेख यही नियम रेल की पटरियों की तरह दिखाता है: बाएँ से दाएँ कोई भी रास्ता चलिए; अंडाकार टर्मिनल हैं, आयत नॉन-टर्मिनल।

व्युत्पत्ति (पार्स) वृक्ष दिखाता है कि आरंभ चिह्न से शब्द कैसे बना: जैसे 42 → <integer> → <digit><integer> → 4 <digit> → 4 2। कंपाइलर प्रोग्राम जाँचने में ऐसे वृक्ष बनाते हैं।

करके देखें: पहले अंदाज़ा, फिर जाँच

3D के खुले खेल में ऐसा छोटा इनपुट खोजिए जिसमें दो सिक्के हों फिर भी मशीन बंद पर रुके। (संकेत: आख़िरी चिह्न क्या होना चाहिए?)

काग़ज़ पर: वर्णमाला {0, 1} वाली ऐसी FSM बनाइए जो 1 पर ख़त्म होने वाली स्ट्रिंग स्वीकार करे। बस दो अवस्थाएँ चाहिए। 1011 (स्वीकार) और 110 (अस्वीकार) पर जाँचिए।

मुख्य सूत्र और परिभाषाएँ

हल किए गए उदाहरण

1. टर्नस्टाइल को "सिक्का, सिक्का, धक्का, सिक्का" पर चलाइए। वह किस अवस्था में रुकेगा?

बंद → सिक्का → खुला → सिक्का → खुला → धक्का → बंद → सिक्का → खुला। खुला पर रुकता है (स्वीकार)।

2. सम-1 वाली मशीन (S0 स्वीकार, 1 पर अवस्था बदले) में क्या 10110 स्वीकार है?

इसमें तीन 1 हैं। S0 →1→ S1 →0→ S1 →1→ S0 →1→ S1 →0→ S1। S1 पर रुकी: अस्वीकार।

3. 1 से शुरू और 0 पर ख़त्म होने वाली बाइनरी स्ट्रिंग का रेगुलर एक्सप्रेशन लिखिए।

1(0|1)*0। बीच में कुछ भी हो सकता है।

4. इनमें कौन a(b|c)*d से मेल खाते हैं: ad, abcd, abd, acbx?

ad (शून्य दोहराव), abcd और abd मेल खाते हैं। acbx d पर ख़त्म नहीं होता।

5. <integer> ::= <digit> | <digit><integer> से दिखाइए कि 305 मान्य है।

<integer> → <digit><integer> → 3<integer> → 3<digit><integer> → 30<integer> → 30<digit> → 305। मान्य।

6. ऐसी मीली मशीन बनाइए जो वर्तमान बिट पिछले से अलग होने पर 1 दे (शुरुआत में पिछला = 0 मानें)।

अवस्थाएँ P0 (पिछला 0, आरंभ) और P1 (पिछला 1)। P0 —0/0→ P0, P0 —1/1→ P1, P1 —1/0→ P1, P1 —0/1→ P0। इनपुट 0110 पर आउटपुट 0101।

आम गलतियाँ

अभ्यास क्विज़

1. FSM स्ट्रिंग को तब स्वीकार करती है जब:
2. मीली मशीन में आउटपुट लिखे जाते हैं:
3. कौन-सी स्ट्रिंग regex 10*1 से मेल खाती है?
4. किसे कोई FSM नहीं पहचान सकती?
5. BNF में ::= का अर्थ है:

अभ्यास: खुद जवाब दो

अपना जवाब लिखो या चुनो, फिर जाँचें दबाओ। अटको तो संकेत देखो; जवाब देने के बाद पूरा हल दिखेगा।

अक्सर पूछे जाने वाले प्रश्न

सरल शब्दों में परिमित अवस्था मशीन क्या है?

कुछ अवस्थाओं वाला मॉडल जो हर पढ़े गए इनपुट के हिसाब से एक अवस्था से दूसरी में जाता है, जैसे टर्नस्टाइल बंद और खुला के बीच बदलता है।

मीली मशीन और FSM स्वीकारक में क्या अंतर है?

स्वीकारक अंत में स्वीकार अवस्थाओं से बस हाँ/ना कहता है। मीली मशीन में स्वीकार अवस्थाएँ नहीं होतीं, पर हर संक्रमण पर आउटपुट मिलता है।

रेगुलर एक्सप्रेशन और FSM का क्या संबंध है?

दोनों एक ही तरह की भाषाएँ (रेगुलर भाषाएँ) बताते हैं: हर रेगुलर एक्सप्रेशन को FSM में और FSM को रेगुलर एक्सप्रेशन में बदला जा सकता है।

यह कहाँ पढ़ाया जाता है

नीदरलैंडHAVO 4 (bovenbouw, 2e fase)Foundations
नीदरलैंडVWO 4 (bovenbouw, 2e fase)Foundations
इंग्लैंडYear 124.4 Theory of computation (part 1)
इंग्लैंडYear 134.4 Theory of computation (A-level)
जर्मनीJahrgangsstufe 13Formal languages and automata

इससे जुड़े पाठ

सभी कंप्यूटर विज्ञान पाठ