कोलमोगोरोव जटिलता के बारे में


22

मैंने कोलमोगोरोव कॉम्प्लेक्सिटी के बारे में कुछ अध्ययन किया है , विट्नी और ली के कुछ लेखों और पुस्तकों को पढ़ा और लेखकों की स्टिलोमेट्री को सत्यापित करने के लिए सामान्यीकृत संपीड़न दूरी की अवधारणा का उपयोग किया (पहचानें कि प्रत्येक लेखक अपनी समानता से कुछ पाठ और समूह दस्तावेज़ कैसे लिखता है)।

उस स्थिति में, डेटा कंप्रेशर्स का उपयोग कोलमोगोरोव जटिलता को अनुमानित करने के लिए किया गया था, क्योंकि डेटा कंप्रेसर को ट्यूरिंग मशीन के रूप में इस्तेमाल किया जा सकता है।

डेटा संपीड़न और प्रोग्रामिंग भाषाओं के अलावा (जिसमें आप कुछ प्रकार के कंप्रेसर लिखेंगे), कोलमोगोरोव जटिलता का अनुमान लगाने के लिए और क्या इस्तेमाल किया जा सकता है? क्या कोई अन्य दृष्टिकोण है जिसका उपयोग किया जा सकता है?


मुझे यकीन नहीं है कि मैं आपके प्रश्न को समझता हूं: केसी की परिभाषा में ट्यूरिंग मशीन शामिल हैं, जिनमें से प्रोग्राम उदाहरण बनाते हैं (कुछ अनुवाद के संबंध में)। "प्रोग्रामिंग भाषाओं के बिना" कोलमोगोरव जटिलता को अनुमानित करने का क्या मतलब है?
कोड़ी

1
GZip जैसे किसी भी संपीड़न सॉफ्टवेयर का उपयोग करके एक स्ट्रिंग को संपीड़ित करें। आउटपुट का आकार स्ट्रिंग के KC के लिए एक ऊपरी सीमा है।
एम। अलागन

@ कोडी: वास्तव में, मैंने अपने शोध में डेटा कंप्रेशर्स (ज़िप, bzip, ppmd) का उपयोग किया है, लगभग KC। डेटा कंप्रेशर, वास्तव में, प्रोग्राम नहीं हैं .. इसलिए, मैं केसी में भाषाओं के अलावा क्या इस्तेमाल किया जा सकता है (= C / prolog / जो भी कोई प्रोग्राम लिखता हूं) पर सुझाव खोज रहा हूं और डेटा कंप्रेशर्स (= zip, gzip का उपयोग करता हूं) ppmc, ppmd ...) :)
woliveirajr

1
मुझे लगता है कि यह सिर्फ मुझे लगता है कि एक डेटा संपीड़न कार्यक्रम की परिभाषा बिल्कुल है: एक प्रोग्राम जो एक स्ट्रिंग के केसी को एक प्रोग्राम ("अनसप्रेसेर") और एक अन्य स्ट्रिंग (संपीड़ित स्ट्रिंग) से अनुमानित करता है।
कोड़ी

जवाबों:


9

मुझे लगता है कि आपके प्रश्न का एक संभावित उत्तर यह है: एक छद्म आयामी संख्या जनरेटर । एक जनरेटर को चुनने की कोशिश करें जिसमें इसके खिलाफ कुछ शक्तिशाली हमले हैं: लिए एक यादृच्छिक संख्या जनरेटर हमला है (हमारे उद्देश्यों के लिए), एक एल्गोरिथ्म , जो कि जब एक स्ट्रिंग स्ट्रिंग दिया जाता है , एक बीज निर्धारित करता है , जैसे कि । तब अनुमानित की केसी :जी एक रों एक ( रों ) जी ( ( रों ) ) = रों रोंGGAs A(s)G(A(s))=ss

input: s
Compute A(s);
if |A(s)| + |G| > |s| output: |s|
otherwise output: |A(s)| + |G|

कहाँप्रोग्राम की लंबाई है जो गणना करता है (अक्सर रैखिक जनरेटर के लिए काफी कम है)।जी ( s )|G|G(s)

ध्यान दें कि व्यवहार में, यादृच्छिक संख्या जनरेटर हमलों का वर्णन नहीं किया गया है: वे असफल हो सकते हैं या अपूर्ण परिणाम उत्पन्न कर सकते हैं । उस स्थिति में, आप एल्गोरिथ्म को अनुकूलित कर सकते हैं ताकि यह वापस आ जाएजब हमले का परिणाम असंतोषजनक होता है। एक ही टिप्पणी संपीड़न एल्गोरिदम के लिए जाती है।|s|

इस दृष्टिकोण के रूप में संपीड़न एल्गोरिदम का विरोध करने के लिए चेतावनी है कि संपीड़न एल्गोरिदम सामान्य रूप में और अधिक कंप्यूटिंग केसी के रूप में वे पर काम के अनुरूप हैं के लिए उपयुक्त हैं है किसी भी , स्ट्रिंग जबकि एक हमले ही काम करता है, तो कर सकते हैं की छवि में होने वाला ( बहुत कम )।जीsG


7

किसी भी संभावना वितरण। यदि आपके पास एक संगणनीय संभाव्यता वितरण है जो आपके डेटा को संभाव्यता , तो क्राफ्ट असमानता द्वारा, एक संगणनीय कंप्रेसर है जो इसे बिट्स में राउंड करता है (यदि आप आंशिक बिटों पर आपत्ति करते हैं)। इसका मतलब यह है कि किसी भी जेनेरिक मशीन लर्निंग एल्गोरिदम का उपयोग किया जा सकता है।- लॉग पी ( एक्स )p(x)logp(x)

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

इस सवाल को cstheory StackExchange पर भी देखें ।


5

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

एक अन्य विकल्प एक स्ट्रिंग का प्रतिनिधित्व करने वाले सबसे छोटे / न्यूनतम सर्किट को ढूंढना है, लेकिन यह गणना के बहुत उच्च जटिलता के लिए जाना जाता है और केवल छोटे तारों पर सफल हो सकता है।

K(x)

K(x)

वहाँ भी अन्य संपीड़न एल्गोरिथ्म तरीके हैं इसके अलावा Lempel-Ziv "रन लंबाई एन्कोडिंग" प्रकार दृष्टिकोण, उदाहरण के लिए वेक्टर बीजगणित और SVD को एक संपीड़न एल्गोरिथ्म के रूप में इस्तेमाल किया जा सकता है। यह भी फूरियर रूपांतरण अक्सर JPG मानक में छवियों को संपीड़ित करने के लिए उपयोग किया जाता है।


1
K(x)

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

1
@ कोडी और vzn: उत्तर के लिए धन्यवाद, आपने मुझे दोषरहित एक्स हानिपूर्ण संपीड़न के बारे में मेरी पीएचडी के लिए कुछ अच्छे विचार दिए :)
woliveirajr

JPEG DCT का उपयोग करता है, DFT का नहीं।
ईविल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.