कोलमोगोरोव-जटिलता परिभाषाओं की समानता


20

कोलमोगोरोव-कॉम्प्लेक्सिटी को परिभाषित करने के कई तरीके हैं , और आमतौर पर, इन सभी परिभाषाओं को वे एक additive निरंतर के बराबर हैं। यदि और kolmogorov जटिलता कार्य (विभिन्न भाषाओं या मॉडलों के माध्यम से परिभाषित) हैं, तो एक निरंतर मौजूद है जो प्रत्येक स्ट्रिंग के लिए है । मेरा मानना ​​है कि यह इसलिए है क्योंकि प्रत्येक कोलमोगोरोव जटिलता समारोह और प्रत्येक यह रखता है , कुछ निरंतर ।के 2 सी एक्स | K 1 ( x ) - K 2 ( x ) | < कश्मीर x कश्मीर ( एक्स ) | x | + c cK1K2cx|K1(x)K2(x)|<cKxK(x)|x|+cc

मैं ट्यूरिंग-मशीनों के आधार पर लिए निम्नलिखित परिभाषाओं में रुचि रखता हूंK

  1. राज्यों की संख्या : परिभाषित करें न्यूनतम संख्या होने के लिए ऐसी है कि के साथ एक टीएम राज्यों outputs रिक्त स्ट्रिंग पर।q q xK1(x)qqx
  2. कार्यक्रम की लंबाई : परिभाषित करें " " जो आउटपुट करने वाला सबसे छोटा "प्रोग्राम" हो । अर्थात्, टीएम को बाइनरी स्ट्रिंग्स में एन्कोड करने का एक तरीका तय करें; एक मशीन लिए इसके (बाइनरी) एन्कोडिंग को रूप में दर्शाते हैं । जहाँ न्यूनतम सभी M के उस आउटपुट x पर है जो खाली इनपुट पर है।x एम एम कश्मीर 2 ( एक्स ) = मिनट | एम | एम एक्सK2(x)xMMK2(x)=min|M|Mx

क्या K1 और K2 समतुल्य हैं? उनके बीच क्या संबंध है, और जो कोलमोगोरोव जटिलता की अवधारणा को बेहतर तरीके से समझते हैं, अगर वे समकक्ष नहीं हैं।

मुझे विशेष रूप से बग्स की दर x के साथ K2 वृद्धि है , जो सुपर-लीनियर नहीं लगती है (या निरंतर C> 1 के साथ कम से कम रैखिक है जैसे कि K_2 <C | x | बजाय | x | + c + )। सबसे सरल TM पर विचार करें जो x को आउटपुट करता है - वह जो अपने राज्यों और संक्रमण फ़ंक्शन के भाग के रूप में x को एन्कोड करता है। यह देखना तत्काल है कि K_1 (x) \ le | x | +1 | हालाँकि एक ही मशीन का एन्कोडिंग बहुत बड़ा है, और मुझे मिलने वाला तुच्छ K2 है (x) \ _ x | \ log | x | xC>1K2<C|x||x|+cxxK1(x)|x|+1K2(x)|x|log|x|


वहाँ से भी अधिक कर रहे हैं के साथ मशीनों राज्यों, और उनके औसत आकार कम से कम है , इसलिए यह संभावना नहीं है कि ये केवल एक additive निरंतर द्वारा भिन्न होते हैं। एन एन 22n2nn2
केव

1
एक अच्छी तरह से जाना जाता है किकुछ निश्चित नहीं पर निर्भर करता है । इसका कारण यह है कि हम कर सकते एनकोड बस से प्रत्येक बिट में दोगुना होकर एक उपसर्ग मुक्त भाषा में और उसके बाद के साथ समाप्त । यह बिट्स का प्रतिनिधित्व करने के लिए । इस प्रकार, क्योंकि को एक सार्वभौमिक उपसर्ग-मुक्त मशीन के रूप में परिभाषित किया गया है, कुछ निश्चित । यह एक उपसर्ग मुक्त भाषा में सांकेतिक शब्दों में बदलना करने के लिए एक और अधिक बुद्धिमान तरीके का उपयोग करके कुछ सुधार किया जा सकता है । c x x x 01 2 | x | + 2 एक्स कश्मीर 2 कश्मीर 2 ( एक्स ) 2 | x | + 2 + 'xK2(x)c+2|x|cxxx012|x|+2xK2K2(x)2|x|+2+ccx
कार्ल मम्मर्ट

मैं देख नहीं सकता कि कैसे। ऐसा लगता है कि या तो को एन्कोडिंग (कच्चे डेटा के रूप में) के हिस्से के रूप में दिया गया है, या आपको अपने राज्य-मशीन द्वारा निर्माण करना होगा । पहला विकल्प धोखा देने वाला लगता है और मैं नहीं देखता कि यह दूसरे विकल्प (जो अर्थ है ) से तुलनीय हो सकता हैएक्स कश्मीर 1xxK1
Ran G.

@ रान जी .: मुख्य बिंदु इंविरियन प्रमेय है जिसे en.wikipedia.org/wiki/Invariance_theorem पर वर्णित किया गया है । अगर मैं किसी भी प्रभावी प्रणाली का वर्णन कर सकता हूं जिसमें की वृद्धि दर हैफिर एक सार्वभौमिक ट्यूरिंग मशीन (जैसा कि आप लिए वर्णन करते हैं ) एक योजक स्थिरांक के भीतर इसे पूरा करेगी। यूनिवर्सल मशीन वह है जो को इनपुट करती है और का उत्पादन यदि हाल्ट करता है। कश्मीर 2एम एम एम2|x|K2MMM
कार्ल मम्मर्ट

जवाबों:


6

मैं पहले से माफी चाहता हूं कि मैं बहुत सारे विवरण देता हूं, लेकिन मैं लोगों के विरोधाभासी हूं।

के बारे मेंK(x)K(x)+c

तथ्य यह है कि आमतौर पर वर्णन भाषा # 2 की व्याख्या भाषा # 1 के एक दुभाषिया से आता है कि # 2 के कार्यक्रमों से # 1 के कार्यक्रमों में अनुवाद से।K1(x)K2(x)+c

उदाहरण के लिए और आप इस असमानता को बस इस रूप में प्राप्त करते हैं:KC(x)KPython(x)+cpy2c

void py_run(char * s) {
    // code of your Python interpreter
}

int main(void) {
    py_run("Put here your Python program of size Kpython(x)");
}

फिर आपका निरंतर जैसा कुछ होगा जहां इस कोड के लिए बिट्स की संख्या है और बिट्स आकार है, आधिकारिक Python दुभाषिया सी में लिखा गया है बेशक आपको केवल यह व्याख्या करना होगा कि क्या संभव है। अजगर के लिए अपनी विवरण भाषा में ताकि आप 69 एमबी से बेहतर कर सकें :-) 528 + 490240688 528 490240688cpy2c528+490240688528490240688

यह महत्वपूर्ण है कि आप अपने सी कोड में अपने पायथन प्रोग्राम को रैखिक रूप से लिख सकें । उदाहरण के लिए, एक ऐसी भाषा जहाँ आपको हर पात्र के बीच "बाना" लगाने की आवश्यकता होती है, बहुत अच्छा वर्णन कार्यक्रम नहीं है और संपत्ति तब झूठी है। (लेकिन यदि वर्णन भाषा आपको एक अलग फ़ाइल या किसी ब्लॉक में डेटा लिखने के लिए अधिकृत करती है, तो यह समस्या गायब हो जाती है)

क्यों आपका त्रुटिपूर्ण हैK1(x)=q

की आपकी परिभाषा के साथ समस्या यह है कि आपको q स्टेट्स के साथ ट्यूरिंग मशीन का वर्णन करने के लिए q बिट्स से अधिक की आवश्यकता हो सकती है क्योंकि आपको संक्रमणों को एनकोड करने की आवश्यकता होती है।K1qq

तो कोई और K 2 संभवतः समतुल्य नहीं है, लेकिन यह मुख्य रूप से K 1 का दोष है। मुझे लगता है कि हम सभी के लिए साबित कर सकते हैं कि कि एक > 0 वहाँ एक है एक ऐसी है कि कश्मीर 1 ( एक्स ) एक | x | + c a । बेशक किसी भी एक < 1 तथ्य का खंडन करने के लिए है कि पर्याप्त है कश्मीर 1 , क्योंकि यह मतलब होगा कि हम और अधिक सभी सांकेतिक शब्दों में बदलना कर सकते हैं एक वैध कार्य नहीं है 2 n लंबाई के संभावित तारK1K2K1a>0caK1(x)a|x|+caa<1K12n में एक एन + एक बिट।nan+ca

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

तो, हाँ ... आकार के ब्लॉक के साथ तो आप शायद साबित हो सकता है कश्मीर 1 ( एक्स ) एक | x | + c a । लेकिन मैंने पहले से ही इस बारे में बहुत अधिक लिखा है कि राज्यों की संख्या एक वैध कोलमोगोरोव जटिलता समारोह क्यों नहीं है। यदि आप मुझे विस्तृत करना चाहते हैं, तो मैं करूंगा।21/aK1(x)a|x|+ca

अब के 2 के बारे मेंK2

भोली वर्णनात्मक भाषा लगभग से मेल खाती है (यानी प्रत्येक अगले राज्य के लिए लॉग 2 q और लिखने और समाप्ति के बारे में विवरण)।K2(x)=q2(log2q+2)log2q

जैसा कि आप समझते हैं, मुझे विश्वास है कि एक बेहतर / चीटर तरीका ट्यूरिंग मशीन में "डेटा" को एन्कोड करने के लिए अधिकृत होगा, हो सकता है कि विवरण भाषा में एक बाइनरी टैग जोड़कर कहा जाए कि क्या एक राज्य एक डेटा राज्य है ( वह बस थोड़ा लिखता है और अगले राज्य में जाता है) या अगर वह कुछ और करता है। इस तरह से आप अपने के एक बिट को अपनी वर्णनात्मक भाषा के एक बिट में स्टोर कर सकते हैं।x

लेकिन अगर आप एक ही रखने आप उसी तकनीक का मैं पिछले भाग में कुछ बिट्स को बचाने के लिए में प्रयोग किया जाता इस्तेमाल कर सकते हैं, लेकिन मैं पर अटक कर रहे कश्मीर 2 ( एक्स ) एक | x | लॉग | x | + c (किसी a > 0 के लिए ) .. शायद लॉग से कम | x | , भी, लेकिन O ( | x | ) प्राप्त करना कठिन लगता है। (और मुझे उम्मीद है कि यह होना चाहिए | x | , O भी नहीं ( |)K2K2(x)a|x|log|x|+ca>0log|x|O(|x|)|x| )O(|x|)


K1K1

K1(x)12|x|+c2nn12n+c2n=O(212n)

क्या होगा अगर अजगर कार्यक्रम में सी द्वारा वर्ण आरक्षित हैं?
PyRulez
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.