क्या "एक समस्या को हल करने के लिए सबसे सरल कार्यक्रम" का जवाब देने के लिए एक सिद्धांत है?


10

"कंप्यूटिंग द्वारा क्या समस्याएं हल की जा सकती हैं" का जवाब देने के लिए, हमने कम्प्यूटेबिलिटी के सिद्धांत को विकसित किया। समस्याओं के लिए जो कम्प्यूटेशनल हैं, क्या सवाल का जवाब देने के लिए एक सिद्धांत है "क्या मैं सबसे सरल प्रोग्राम प्राप्त करता हूं"?

मुझे नहीं लगता कि कम्प्यूटेशनल जटिलता प्रश्न का उत्तर देती है। मुझे लगता है कि यह समझता है कि हमें कितने समय तक (हालांकि सारपूर्वक मापा जाता है)।

मुझे यकीन नहीं है कि एल्गोरिथम सूचना सिद्धांत प्रश्न का उत्तर देता है या नहीं। ऐसा लगता है कि सिद्धांत आकार के बारे में बात करता है, जहां न्यूनतम आकार और सरलतम की समानता मेरे लिए स्पष्ट नहीं है (ठीक है, कम से कम वे मेरे लिए अलग महसूस करते हैं)।

मुझे लगता है कि सिद्धांत को "संबंध" की तुलना में कम से कम "सरल" या "सरल" परिभाषित करना चाहिए।


मैं अब आश्वस्त हूं कि मुझे कोलमोगोरोव कॉम्प्लेक्सिटी में देखना चाहिए। हालांकि, मैं यह बताना चाहूंगा कि जब मैं सवाल पूछ रहा था तो मेरे दिमाग में क्या था।

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

यहाँ जटिलता की मेरी धारणा का बेहतर वर्णन है।

ओलाफ स्पोर्न्स (2007) जटिलतास्कॉलरपीडिया , 2 (10): 1623



4
लॉजिकल डेप्थ के बेनेट की अवधारणा में आपकी रुचि हो सकती है। ली और विटैनी ने कोलमोगोरोव कॉम्प्लेक्सिटी पर अपनी पुस्तक में अध्याय 7.7 को समर्पित किया है।
मार्टिन श्वार्ज

2
@YuNing: "सरलतम" से आपका क्या मतलब है, अगर आकार नहीं है?
रॉब

1
@ यू निंग: उत्पादन के उत्पादन के लिए सबसे सरल कार्यक्रम होने के बजाय सबसे कम न्यूनतम विवरण लंबाई के साथ ट्यूरिंग मशीन के बारे में यह कैसा है - ताकि 'लघुता' और 'संरचना' के बीच संतुलन हो?
रोस स्नाइडर

3
मुझे लगता है कि यह सवाल थोड़ा बुरा है। यह भी ध्यान दें कि ऐसे एल्गोरिदम हैं जो बहुत सरल हैं, लेकिन यह साबित करना मुश्किल है कि वे सही हैं। और ऐसे एल्गोरिदम हैं जो सरल और स्पष्ट रूप से सही हैं, लेकिन यह साबित करना मुश्किल है कि वे तेज हैं।
जुका सुओमेला

जवाबों:


16

इस समस्या का अध्ययन एल्गोरिथम सूचना सिद्धांत में किया गया है। आप जो परिभाषित कर रहे हैं उसे कोलमोगोरोव-चैटिन जटिलता कहा जाता है।

http://en.wikipedia.org/wiki/Kolmogorov_complexity

और ऐसा लगता है कि आप जिस सरलता की आवश्यकता महसूस कर रहे हैं उसकी धारणा को जटिलता माप की धारणा के माध्यम से औपचारिक रूप दिया जा सकता है, जिसे ब्लम के स्वयंसिद्धों द्वारा औपचारिक रूप दिया गया है।

http://en.wikipedia.org/wiki/Blum_axioms

यह भी लगता है कि कोलमोगोरोव की जटिलता को सामान्य करने के लिए अन्य जटिलता उपायों को ध्यान में रखना संभव है। नीचे संदर्भ देखें। (कोलमोगोरोव जटिलता पर विकिपीडिया का लेख इस मुद्दे को संबोधित करता है।)

Burgin1990- सामान्यीकृत कोलमोगोरोव जटिलता और अन्य दोहरे जटिलता उपाय साइबरनेटिक्स एंड सिस्टम्स एनालिसिस वॉल्यूम 26, नंबर 4, 481-490


जैसा कि @ जुक्का सुकोला कहते हैं, यह सवाल थोड़ा बुरा है। इस प्रकार मुझे आश्चर्य है कि मुझे इस प्रश्न का पूरा उत्तर शायद ही मिले। हालाँकि, चूंकि यह उत्तर काफी जानकारीपूर्ण है, और प्रश्न का एक महत्वपूर्ण हिस्सा हिट करता है, फिर भी मैं इसे उत्तर के रूप में टैग करता हूं।
यिंगिंग

वैसे, क्या आप मुझे विषय के अनुप्रयोग पर आगे इंगित कर सकते हैं, खासकर यदि किसी के पास एक कार्यक्रम का औपचारिक विनिर्देश है, तो क्या वह विनिर्देश से सबसे छोटा आकार पा सकता है?
युनिंग

1

पहले प्रश्न का उत्तर हां में एक सिद्धांत है, यह एल्गोरिथम सूचना सिद्धांत है और इन्हें एलिगेंट प्रोग्राम (ग्रेगरी चैटिन द्वारा) कहा जाता है।

के बारे में दूसरे प्रश्न के लिए "क्या कार्यक्रम मुझे सबसे सरल है"?

इसका कोई जवाब नहीं है , क्योंकि यह एक अविश्वसनीय प्रश्न है, यह साबित करने के लिए सकारात्मक नहीं है कि एक कार्यक्रम एक सुरुचिपूर्ण कार्यक्रम है।

मैंने सुरुचिपूर्ण कार्यक्रमों के बारे में उल्लेख जोड़ने के लिए एक उत्तर दिया है ।


-1

एक सरल कोड क्या है और क्या नहीं है, यह तय करने के लिए विभिन्न प्रकार के दृष्टिकोण हैं।

लेकिन दुख की बात है कि इसे निर्धारित करने के लिए एक स्वचालित तरीका नहीं है, उदाहरण के लिए, कोलमोगोरोव कॉम्प्लेक्सिटी पुनरावर्ती कार्यों के साथ विफल हो जाती है, कुछ पुनरावर्ती कार्य (तार्किक गहरे) सरल हैं लेकिन इसके बारे में समझ इतनी सरल नहीं है।

मेरे अनुभव में, हमारी टीम एक प्रणाली में काम कर रही थी और हमें ओरेकल में "सरल" प्रक्रिया (50 से अधिक लाइनें नहीं) मिली ... और हमने इसे समझने की कोशिश की, इसे पूरी तरह से समझने में 2 महीने (और कई बैठकें) लगीं। यह कोड की जटिलता से नहीं, बल्कि हर चर के पीछे तर्क में है।

मुझे लगता है कि एक कोड कितना सरल है यह निर्धारित करने का तरीका है: "एक कोड पढ़ें और इसे समझने के लिए उपयोग किए जाने वाले समय पर विचार करें।"

तो "एक समस्या को हल करने का सबसे सरल कार्यक्रम?" में विभाजित किया जा सकता है:

a) कोड की सरलता (स्पष्ट कोड) लेकिन यह बहुत व्यक्तिपरक है।

बी) फ़ंक्शन की अधिकता, अगर मुझे एक्स समस्या है, तो मुझे इसे हल करने के लिए डीएक्स (डेल्टा एक्स) कार्य को हल करना होगा, जहां डीएक्स को एक्स की ओर रुझान करना होगा।

उदाहरण के लिए, यदि मेरी समस्या है (एक) "एक सेब छीलने के लिए" और मुझे इसे PHP (और भाषा) में करना होगा

अगर मैं बेहद भाग्यशाली हूं और PHP में फंक्शन function_peel_apple () है, तो यह अब तक का सबसे सरल कोड X = 1 DX = 1 है, बस फ़ंक्शन को कॉल करें और यह है!।

इसके विपरीत, अगर मैं इतना भाग्यशाली नहीं हूं, लेकिन फ़ंक्शन function_peel () और function_get_apple () मौजूद हैं तो X = 1 (एक समस्या) और DX = 2 (दो कार्य) मौजूद हैं।

यदि, सबसे खराब स्थिति में, कोई फ़ंक्शन मौजूद नहीं है, तो मुझे अपने आप से एक (या एक से अधिक) बनाना होगा और समस्या को हल करने से पहले कई कार्य जोड़ना होगा, अब यह एक जटिल कार्यक्रम है।

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