कार्यक्रम न्यूनतमकरण


10

सर्किट मिनिमलाइज़ेशन किसी दिए गए सर्किट के आकार को कम करने के लिए समस्या है। क्या सामान्य कार्यक्रमों के लिए भी कुछ ऐसा ही है?

विशेष रूप से मेरा सवाल है -

क्या दिए गए प्रोग्राम के लिए निर्देशों के # को कम करने के लिए एल्गोरिदम मौजूद हैं। मुझे पता है कि यह एक अनिर्णायक समस्या है लेकिन मैं ऐसे समाधान की तलाश में नहीं हूं जो कुछ इष्टतम लौटाए।

जबकि एक यह पूरा करने के लिए preexisting संकलक परिवर्तनों को लागू कर सकता है, मैं कुछ ऐसी चीज़ों की तलाश कर रहा हूँ जहाँ मुझे पहले से खोज करने के लिए बहुत ही संकीर्ण परिवर्तनों और एल्गोरिदमों के एक सेट को परिभाषित करने की आवश्यकता नहीं है।

संपादित करें: मेरे पास दूसरा प्रश्न यह है कि क्या कोई एक कैलकुलस हो सकता है जो ध्वनि और पूर्ण है जो हमें इस तरह के शब्दार्थ समकक्ष कार्यक्रमों के पूरे स्थान का पता लगाने की अनुमति देता है या यह संभव नहीं है।


2
आपके अन्य प्रश्न का उत्तर "कैलकुलस" की आपकी परिभाषा पर निर्भर करता है। तथ्य यह है कि HALT कोरे में नहीं है, इस तरह की अधिकांश परिभाषाओं के लिए उत्तर "नहीं" है।

दो क्षेत्रों से संबंधित हैं कि एक और दृष्टिकोण अलग-अलग इनपुट आकारों के लिए कार्यक्रमों को सर्किट में परिवर्तित करने के लिए है fn
vzn

जवाबों:


10

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

यह एल्गोरिथम ध्वनि है। इसे पूरा करने के लिए, आपको यह साबित करने में सक्षम होना चाहिए कि सभी अस्वीकृत कार्यक्रम मूल के बराबर नहीं हैं। यह फ़ाइनिटरी मशीन मॉडल में संभव है, जब तक आपके पास इनपुट आकार के लिए बाध्य है।

ध्यान दें कि जब प्रोग्राम निष्पादन का समय इनपुट पर निर्भर करता है, तो एक इष्टतम समाधान नहीं हो सकता है। यदि आप उदाहरण के लिए एक सबसे खराब स्थिति में बंधे हुए हैं, तो आप बहुत ही जल्द अनपेक्षित तुलनों में भाग लेंगे, जब आप सभी संभावित अनबाउंड इनपुटों की मात्रा निर्धारित करते हैं, और इनपुट के सीमाबद्ध होने पर अप्राप्य समस्याओं में।

एक दशक पहले, राजीव जोशी, ग्रेग नेल्सन और कीथ रान्डल द्वारा "Denali: A Goal-Directed Superoptimizer" लगभग 5 मशीन निर्देशों के इष्टतम कार्यक्रमों को खोजने में सक्षम था। मैंने हाल के परिणामों पर ध्यान नहीं दिया है।


5
ससेक्स विश्वविद्यालय में हमारे छात्रों में से एक ने कुछ कोर जावा रूटीन (जैसे इसके अलावा) की लंबाई को छोटा करने के लिए सुपरोप्टिमाइजेशन का इस्तेमाल किया। उन्होंने ऐसा करने के लिए अमेजन EC2 अभिकलन की भारी मात्रा को जला दिया। उनका शोध प्रबंध यहाँ है । स्पष्ट रूप से किसी भी चीज के लिए संभव नहीं, लेकिन वास्तव में छोटे कार्यक्रम।
मार्टिन बर्जर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.