कोष्ठक मिलान के लिए दो-स्टेट ट्यूरिंग मशीन


9

कॉलेज में हम सामान्य रूप से कम्प्यूटिंग और ट्यूरिंग मशीनों के सिद्धांत के बारे में सीख रहे हैं। महान सैद्धांतिक परिणामों में से एक यह है कि संभावित रूप से बड़े वर्णमाला (प्रतीकों) की कीमत पर, आप राज्यों की संख्या केवल 2 तक कम कर सकते हैं।

मैं अलग-अलग ट्यूरिंग मशीनों के उदाहरणों की तलाश में था और प्रस्तुत एक सामान्य उदाहरण पेरेंटेसिस माचिस / चेकर है। अनिवार्य रूप से यह जांचता है कि क्या कोष्ठक की एक स्ट्रिंग, उदाहरण के (()()()))()()()लिए संतुलित है (पिछले उदाहरण असंतुलित होने के लिए 0 लौटा देगा)।

कोशिश करें कि मैं केवल तीन राज्य मशीन होने के लिए यह प्राप्त कर सकता हूं। मुझे यह जानकर अच्छा लगेगा कि कोई भी इसे कम से कम 2 के सैद्धांतिक रूप से कम कर सकता है और उनका दृष्टिकोण / राज्य / प्रतीक क्या था!

बस स्पष्ट करने के लिए, कोष्ठक को खाली टेप के बीच "सैंडविच" किया जाता है, इसलिए उपरोक्त उदाहरण - - - - - - - (()()()))()()() - - - - - - -में टेप पर इनपुट होगा। वर्णमाला को शामिल किया जाएगा (, ), 1, 0, -, और *halt*राज्य एक राज्य के रूप में नहीं गिना जाता।

संदर्भ के लिए मेरे पास तीन राज्य दृष्टिकोण इस प्रकार हैं: राज्यों का विवरण:

 State s1: Looks for Closing parenthesis

 State s2: Looks for Open parenthesis

 State s3: Checks the tape to ensure everything is matched

 Symbols: ),(,X

के रूप में सूचीबद्ध संक्रमण:

Action: State Symbol NewState WriteSymbol Motion
// Termination behavior
Action: s2 - *halt* 0  -
Action: s1 -  s3    -  r

//Transitions of TM
Action: s1 (  s1  (   l
Action: s1 )  s2  X  r
Action: s1 X  s1  X  l
Action: s2 ( s1 X  l
Action: s2 X  s2 X r
Action: s3 (  *halt* 0 -
Action: s3 X  s3     X r
Action: s3 -  *halt* 1 -

यह सब लिखने का अनौपचारिक तरीका क्षमा करें। मैं अभी भी इसके पीछे सैद्धांतिक निर्माण सीख रहा हूं।


क्या हमें एक बड़ी वर्णमाला का उपयोग करने की अनुमति है?
राफेल

@ राफेल सैद्धांतिक परिणाम के अनुसार, राज्यों को वर्णमाला के लिए और इसके विपरीत विनिमय कर सकता है। इसलिए राज्यों को दो तरीकों से कम करने के लिए आपको सबसे बड़ी वर्णमाला का उपयोग करना होगा। तो हाँ, संक्षिप्त उत्तर है वर्णमाला वांछित के रूप में बड़ी हो सकती है
Four_FUN

मुझे लगता है, एक दो टेप टीएम में, यह बिना किसी अतिरिक्त प्रतीकों के साथ किया जा सकता है और।
कारोलिस जुओदेलो

@Four_FUN आप MIT से हैं?

जवाबों:


8

राफेल के जवाब का सिर्फ एक "स्रोत कोड": यह एक कार्यशील संस्करण है जो उसी चाल का उपयोग करता है (राज्य q1 पर) और इसमें टेप वर्णमाला है:
_ ( ) [ { / \ (जहां_ प्रारंभिक प्रारंभिक प्रतीक है)

q0:  _ -> accept  // accept on empty string and on balanced parenthesis
     ( -> {,R,q1  // mark the first open "(" with "{" and goto q1
     ) -> reject  // reject if found unbalanced ")"
     \ -> /,L,q0  // go left
     / -> \,R,q0  // go right

q1:  ( -> [,R,q1  // replace "(" with "[" and continue ...
     ) -> /,L,q1  // ... until first ")", replace it with "/" and goto left
     [ -> \,R,q1  // found matching "(" bracket, goto right and search for another ")"
     _ -> reject  // no ")" found for the first "{", reject
     { -> \,R,q0  // this must be the last match, goto q0 and check if it is true
     \ -> /,L,q1  // go left
     / -> \,R,q1  // go right

आप इसे ट्यूरिंग मशीन ऑनलाइन सिम्युलेटर का उपयोग करके काम पर देख सकते हैं ; स्रोत कोड है:

0 _ Y r halt
0 ( { r 1
0 ) N r halt
0 \ / l 0
0 / \ r 0
1 ( [ r 1
1 ) / l 1
1 [ \ r 1
1 _ N r halt
1 { \ r 0
1 \ / l 1
1 / \ r 1

एक अंतिम नोट: यदि आप यह देखना चाहते हैं कि इस तकनीक को सीमा तक कैसे पहुंचाया जा सकता है, तो पढ़ें (और समझने की कोशिश करें :-) 2 राज्यों के साथ यूनिवर्सल ट्यूरिंग मशीन का निर्माण और Y. Rogozhin द्वारा "स्मॉल यूनिवर्सल ट्यूरिंग" मशीनों "


क्या हमने तय नहीं किया कि केवल स्रोत कोड प्रस्तुत करने वाले उत्तर कंप्यूटर विज्ञान के लिए अच्छे नहीं हैं ? ;)
राफेल

1
@ राफेल: मैं आपसे सहमत हूं, लेकिन मेरा सिर्फ आपके लिए एक परिशिष्ट की तरह देखा जा सकता है (यह ठीक लगता है, भले ही मैंने विवरण की जांच न की हो)। मैं इस बारे में एक नोट जोड़ूंगा।
वोर

1
@ राफेल: मैंने इसे केवल टेप चिह्नों को छोटा करने की कोशिश के लिए कोडित किया, और यह "लगता है" :-) काम करने के लिए इसलिए मैंने इसे पोस्ट करने का फैसला किया।
Vor

@Vor। इस समस्या में आपके अतिरिक्त इनपुट के लिए बहुत-बहुत धन्यवाद। यह सब मुझे बताता है कि मुझे इस सामान में अधिक अभ्यास की आवश्यकता है। अपने स्रोत कोड को अनैतिक रूप से पोस्ट करने के लिए धन्यवाद, भले ही सिद्धांत वही था जो मैं था।
चार_फुन

1
@Four_FUN: Rogozhin Universal TM (2,18) एक मानक ट्यूरिंग मशीन है (यानी इनपुट के अलावा इसके शुरुआती टेप में केवल खाली प्रतीक हैं) जो एक मनमाने 2-टैग सिस्टम (जो एक सार्वभौमिक मॉडल है) का अनुकरण करता है। 2 राज्य 3 प्रतीक एक कमजोर ट्यूरिंग मशीन है (एक प्रारंभिक टेप को एक पैटर्न के अनंत अनुक्रम से भरा जाना चाहिए), और सार्वभौमिकता "पहुंच" सेलुलर ऑटोमेटा नियम 110 का अनुकरण कर रही है (जो कि पूर्ण सिद्ध हुई है। )। वहाँ एक (दावा किया गया है?) सबूत है कि एक मानक टीएम (2,3) ट्यूरिंग पूरा नहीं किया जा सकता है।
Vor

7

गूंगा उत्तर: आपका परिणाम वादा करता है कि दो राज्यों के साथ एक सार्वभौमिक ट्यूरिंग मशीन है। डाइक भाषा के लिए किसी भी टीएम का निर्माण करें , इसके सूचकांक की गणना करें और इसे सार्वभौमिक मशीन में हार्डकोड करें।

लेकिन यह बहुत संतोषजनक नहीं है। आपका दृष्टिकोण वास्तव में काम करता है यदि आप कोष्ठक के एक विस्तार में कोष्ठक के जोड़े का मिलान करते समय बाएं और दाएं चलने के बीच का अंतर "ट्रिक" करते हैं। ज़रुरत है{#,(,),एक्स} और चिह्नित संस्करण ^ सभी प्रतीकों के

  • प्रारंभिक अवस्था क्ष0 निम्नानुसार काम करता है।

    जब चिन्हित चिह्न मिलते हैं, तो पहले तक दाईं ओर जाएँ )पाया जाता है। ऐसा करते समय, सभी प्रतीकों को अधिलेखित करें साथ में ^। पाया को अधिलेखित करें) साथ में एक्स^
    अगर वहाँ कोई नहीं है), यानी हमने गैप सिंबल को हिट किया #, इसके साथ लिखना एक्स^ और पर स्विच करें क्ष1

    चिह्नित प्रतीकों को खोजने पर, पहले तक बाईं ओर जाएं (^पाया जाता है, सभी चिन्हित (चिन्हित) चिन्हों को अपने चिन्हित प्रकारों के साथ अधिलेखित कर दिया जाता है। पाया को अधिलेखित करें(^ साथ में एक्स
    अगर हम एक)^ या # पहला, लूप / अस्वीकार।

  • में क्ष1, हम जांचते हैं कि सब कुछ मेल खा गया है; प्रपत्र के उपसर्ग अभी भी हो सकते हैं(^+टेप पर। यही है, जब तक हम पाते हैं बाईं ओर चले जाते हैंएक्स^। अगर हम इस प्रकार पाते हैं#, स्वीकार करना; अगर हमें कोई और प्रतीक मिलता है लेकिन एक्स^ पहला, लूप / अस्वीकार।


  1. यह सही है क्योंकि मशीन अंदर-बाहर मेल खाती है; एक कानूनी इनपुट में, केवल हैंएक्स कोष्ठक की जोड़ी के बीच वर्तमान में मिलान किया जा रहा है।

यदि आप मुझसे यह पूछने में कोई गुरेज नहीं करते हैं, तो मेरा समाधान दो राज्यों के साथ एक सार्वभौमिक टीएम का वादा कैसे करता है? (बहुत ही स्मार्ट समाधान btw। आप अपने इनपुट के लिए।)
चार_फुन

1
@Four_FUN: क्योंकि आप अपने प्रश्न में कहते हैं: "... महान सैद्धांतिक परिणामों में से एक यह है कि संभावित रूप से बड़े वर्णमाला (प्रतीकों) की कीमत पर, आप नीचे राज्यों की संख्या केवल 2 तक कम कर सकते हैं ..." । .. तो आप एक यूनिवर्सल यूनिवर्सल ट्यूरिंग मशीन भी चुन सकते हैं और राज्यों की संख्या केवल 2 तक कम कर सकते हैं। और अगर आप कुछ प्रयोग करते हैं, तो आप यह भी महसूस करेंगे कि एक स्वचालित प्रक्रिया को बनाना मुश्किल नहीं है, जो एक मनमानी टीएम को एक समकक्ष में बदल देती है। 2 राज्य टीएम (यदि आप वर्णमाला प्रतीकों की संख्या को कम करने के बारे में परवाह नहीं करते हैं)।
वोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.