2013-02-24 120 views
6

सी ++ में लिखे गए प्रोग्राम पी को देखते हुए, क्या मैं एक एल्गोरिदम लिख सकता हूं जो यह पता लगाता है कि प्रोग्राम पी एक विशेष एल्गोरिदम लागू करता है या नहीं? क्या कोई एल्गोरिदम है जो इस समस्या को हल करता है। क्या यह समस्या हल करने योग्य है?क्या एक सत्यापनकर्ता लिखना संभव है जो जांचता है कि कोई दिया गया प्रोग्राम किसी दिए गए एल्गोरिदम लागू करता है या नहीं?

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

+1

व्यक्ति निम्न स्तर के संचालन के लिए एक सार इंटरफ़ेस का उपयोग करने के बारे में, जैसे तत्वों और स्वैपिंग तक पहुंचने के बारे में। फिर उन्हें एक ठोस वस्तु पास करें जो सुनिश्चित करता है कि कॉलर उन परिचालनों को कॉल करता है जिस तरह से क्विकॉर्ट होगा। –

उत्तर

5

Rice's Theorem से, आप यह भी तय नहीं कर सकते कि कोड का एक टुकड़ा एक प्रकार का कार्य है या कोड की जांच करके नहीं। आप निश्चित रूप से यह पता लगा सकते हैं कि क्या इनपुट के कुछ सीमित सेट के लिए इसे इनपुट करके और परिणामों की जांच करके इसे सॉर्ट करने का असर पड़ता है।

आप किसी दिए गए लक्ष्य सॉर्ट एल्गोरिदम के विशिष्ट मामले के लिए कुछ करने में सक्षम हो सकते हैं, इस प्रकार के दौरान सॉर्ट किए जा रहे सरणी की जांच करके, लक्षित एल्गोरिदम की विशेषता वाले इनवेंटर्स की जांच करके। उदाहरण के लिए, एक रिकर्सिव त्वरित सॉर्ट कार्यान्वयन में प्रत्येक कॉल के परिणामस्वरूप एक सबएरे क्रमबद्ध हो जाएगा।

============================================== ===================

टिप्पणियों के बाद, मैं Ahmad Taherkhani's home page को देखने का सुझाव देता हूं। उन्होंने इस क्षेत्र में 2012 के पेपर समेत इस क्षेत्र में अनुसंधान जारी रखा है।

+0

धन्यवाद कि वास्तव में मदद की। मुझे आश्चर्य है कि यह काम करेगा यदि हम एल्गोरिदम लागू करने वाले नमूना कार्यक्रमों के कुछ सेट का उपयोग करते हैं और फिर हम एक प्रोग्राम वर्गीकृत करने का प्रयास करते हैं। जैसे वे मशीन सीखने की समस्याओं में करते हैं। – Aryaveer

+0

@Aryaveer ऐसा करने की कुंजी उन विशेषताओं को ढूंढना होगा जिन्हें आप टेक्स्ट से निकाल सकते हैं जैसे कि फीचर स्पेस में एक साथ निकट बिंदुएं समान एल्गोरिदम का प्रतिनिधित्व करती हैं। मैंने कुछ वेब खोज की, और पाया [सॉर्टिंग एल्गोरिदम को पहचानने के लिए स्टेटिक प्रोग्राम विश्लेषण] (www.cs.hut.fi/~ahmad/mastersthesis.pdf)। यह 2008 का पेपर है लेकिन कला की स्थिति खोजने के लिए उद्धरण के लिए एक उपयोगी प्रारंभिक बिंदु हो सकता है। –

0

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