Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

L ={0(n+m)1m2n | . के लिए पुशडाउन ऑटोमेटा का निर्माण करें एम, एन =0} सी++ में


हमें "L" भाषा दी गई है और कार्य दी गई भाषा के लिए एक पुशडाउन ऑटोमेटा का निर्माण करना है जो बताता है कि 0 की घटनाएं 1 और 2 की घटनाओं का जोड़ होंगी और साथ ही, 1 और 2 की घटना न्यूनतम होगी जो स्ट्रिंग को NULL भी बना सकती है और इसे ऑटोमेटा द्वारा स्वीकार किया जाना चाहिए।

पुशडाउन ऑटोमेटा क्या है?

एक पुशडाउन ऑटोमेटा या पुशडाउन ऑटोमेटन या पीडीए एक संदर्भ-मुक्त व्याकरण को लागू करने की एक तकनीक है जिस तरह से हम एक नियमित व्याकरण के लिए नियतात्मक परिमित ऑटोमेटन या डीएफए डिजाइन करते हैं। एक डीएफए परिमित डेटा पर काम कर सकता है, लेकिन एक पीडीए अनंत डेटा पर काम कर सकता है। हम पुशडाउन ऑटोमेटा को "परिमित स्टेटमशीन" और "स्टैक" के संयोजन के रूप में समझ सकते हैं।

एक पुशडाउन ऑटोमेटन में तीन घटक होते हैं -

  • एक इनपुट टेप,

  • एक नियंत्रण इकाई, और

  • अनंत आकार वाला ढेर।

एक PDA को औपचारिक रूप से 7−tuple (Q, Ʃ, S, , q0, I, F) -

के रूप में वर्णित किया जा सकता है।
  • Q राज्यों की परिमित संख्या है

  • Ʃ इनपुट वर्णमाला है

  • S स्टैक सिंबल है

  • δ संक्रमण फलन है:Q × (Ʃ {ε}) × S × Q × S*

  • q0 प्रारंभिक अवस्था है (q0 Q)

  • I प्रारंभिक स्टैक शीर्ष प्रतीक है (I ε S)

  • F, स्वीकार करने वाली अवस्थाओं का एक समूह है (F ε Q)

आइए दी गई भाषा के लिए एक पुशडाउन ऑटोमेटा बनाएं -

L ={0(n+m)1m2n | . के लिए पुशडाउन ऑटोमेटा का निर्माण करें एम, एन =0} सी++ में

इस पीडीए द्वारा स्वीकार्य स्ट्रिंग्स फॉर्म के हैं -

  • 1. 0 n 2 n :02, 0022, 000222 आदि। 0 की संख्या संख्या के बराबर है। 2s का। जब m 0 होता है तो हमारे पास 1s नहीं होता है। 0s को पुश करते रहें और जैसे ही पहला 2 सामने आए तो 0s पॉप करें। यदि हम स्ट्रिंग के अंत तक पहुँचते हैं और 0s के साथ छोड़ दिया जाता है तो स्ट्रिंग स्वीकार कर ली जाती है।

  • 0 m 1 m :01, 0011, 000111 आदि। 0 की संख्या संख्या के बराबर है। 1s का। जब n 0 है तो हमारे पास कोई 2s नहीं होगा। 0s को पुश करते रहें और जैसे ही पहला 1 सामने आए तो 0s पॉप करें। यदि हम स्ट्रिंग के अंत तक पहुँचते हैं और 0s के साथ छोड़ दिया जाता है तो स्ट्रिंग स्वीकार कर ली जाती है।

  • 0 n+m 1 m 2 n :0012, 000112, 000122 आदि। 0 की संख्या संख्या के योग के बराबर है। 1s और 2s का। 0s को पुश करते रहें और जैसा कि पहले 1 का सामना करना पड़ता है, फिर उन 0s को तब तक पॉप करें जब तक कोई 1s न बचे। फिर 0s को फिर से पुश करते रहें और जैसा कि पहले 2 का सामना करना पड़ता है, तो उन 0s को तब तक पॉप करें जब तक कि कोई 2s न बचे। स्ट्रिंग स्वीकार की जाएगी।

  • NULL स्ट्रिंग भी स्वीकार की जाती है। 0 0 1 0 2 0

आइए मशीन को समझते हैं

  • राज्य q0 के लिए संक्रमण:

    • 0, I/0I ) - यदि स्टैक का शीर्ष I है और वर्तमान इनपुट प्रतीक 0 है तो 0 को स्टैक के शीर्ष पर धकेलें और q0 पर बने रहें। स्टैक 0I बन जाता है...

    • ( 0, 0/00 ) - यदि स्टैक का शीर्ष 0 है और वर्तमान इनपुट प्रतीक भी 0 है तो 0 को स्टैक के शीर्ष पर धकेलें और q0 पर बने रहें। स्टैक 00 हो जाता है.... अगले 1 या 2 तक 0s को पुश करते रहें।

    • ( 1, 0/$ ) - यदि स्टैक का शीर्ष 0 है और वर्तमान इनपुट प्रतीक 1 है तो 0 पॉप करें और q1 पर जाएं।

    • ( 2, 0/$ ) - यदि स्टैक का शीर्ष 0 है और वर्तमान इनपुट प्रतीक 2 है तो 0 पॉप करें और q2 पर जाएं।

    • ( $, I/I ) - यदि स्टैक का शीर्ष I है और कोई इनपुट नहीं है तो कुछ भी न करें और qf पर जाएं। NULL स्ट्रिंग के लिए।

  • राज्य q1 के लिए संक्रमण -

    • ( 1, 0/$ ) - यदि स्टैक का शीर्ष 0 है और वर्तमान इनपुट प्रतीक 1 है तो 0 पर पॉप करें और q1 पर बने रहें।

    • ( $, I/I ) - यदि स्टैक का शीर्ष I है और कोई इनपुट नहीं है तो कुछ भी न करें और qf पर जाएं।

    • ( 2, 0/$ ) - यदि स्टैक का शीर्ष 0 है और वर्तमान इनपुट प्रतीक 2 है तो 0 पॉप करें और q2 पर जाएं।

  • राज्य q2 के लिए संक्रमण -

    • ( 2, 0/$ ) - यदि स्टैक का शीर्ष 0 है और वर्तमान इनपुट प्रतीक 2 है तो 0 पॉप करें और q2 पर बने रहें।

    • ($, I/I ) - यदि स्टैक का शीर्ष I है और कोई इनपुट नहीं है तो कुछ भी न करें और qf पर जाएं।


  1. सी ++ एसटीएल में ढेर (3.5)

    C++ STL में, स्टैक का उपयोग कंटेनर के रूप में किया जाता है जिसे LIFO संरचना के रूप में कार्यान्वित किया जाता है। LIFO का मतलब लास्ट इन फर्स्ट आउट। स्टैक पुस्तकों के ढेर के रूप में देख सकता है जिसमें पुस्तकों को एक के ऊपर एक व्यवस्थित किया जाता है और अंतिम डाली गई पुस्तक सबसे पहले हटाई जाएगी, इसलिए इ

  1. L ={aibjck | . के लिए एक ट्यूरिंग मशीन की रचना कीजिए मैं * जे =के; मैं, जम्मू, कश्मीर 1}

    यहाँ हम देखेंगे कि L भाषा के लिए ट्यूरिंग मशीन कैसे बनाई जाती है ={AiBjCk | मैं * जे =के; मैं, जे, के 1}। तो यह एक प्रकार की भाषा का प्रतिनिधित्व करता है जहाँ हम केवल तीन वर्णों A, B और C का उपयोग करेंगे। w एक स्ट्रिंग है। तो अगर w =AABBBBCCCCCCCC, ट्यूरिंग मशीन इसे स्वीकार करेगी। इसे हल करने के लि

  1. C++ प्रोग्राम एक DAG के लिए एक रैंडम लीनियर एक्सटेंशन बनाने के लिए

    यहां हम देखेंगे कि डायरेक्टेड एसाइक्लिक ग्राफ (DAG) का रैंडम लीनियर एक्सटेंशन कैसे बनाया जाता है। रैखिक विस्तार मूल रूप से डीएजी की टोपोलॉजिकल सॉर्टिंग है। आइए मान लें कि ग्राफ नीचे जैसा है - एक निर्देशित चक्रीय ग्राफ के लिए स्थलीय छँटाई शिखरों का रैखिक क्रम है। निर्देशित ग्राफ़ के प्रत्येक किनार