एक एल्गोरिथ्म वास्तव में क्या है?


12

मुझे पता है कि यह बॉक्स से थोड़ा सा लग सकता है, वास्तव में मैं हमेशा बॉक्स के अंदर सोचता था, लेकिन हाल ही में मैं सोच रहा हूं, संभवतः क्योंकि कंप्यूटर विज्ञान कार्यक्रमों के अलावा अन्य कार्यक्रमों को तैयार करने के तरीकों के बारे में उच्च स्तर की स्वतंत्रता प्रदान करता है। विश्वविद्यालय में पढ़ाया जाता है।

तथ्यात्मक कार्य पर विचार करें। आमतौर पर हम इस फ़ंक्शन को जैसे परिभाषित करते हैं

 int fact(int n) 
 { 
 int r = 1; 
 for(int i=2;i<=n;i++) 
 r = r*i; 
 return r; 
 } 

मैं इसे एक एल्गोरिथ्म कहूंगा और इसमें कोई संदेह नहीं है कि यह करने का सही तरीका है। फिर, मुझे आश्चर्य हुआ कि "क्या मैं निरंतर समय में ऐसा कर सकता हूं?", जो कि निम्नलिखित विचार करने देता है: क्या होगा यदि मेरे पास पूर्णांकों की एक सरणी है जहां सरणी [एन] में एन का तथ्य है? एक बार यह सरणी भर जाने के बाद मैं केवल तथ्य को परिभाषित कर सकता हूं:

 int fact(int n) 
 { 
 return array[n]; 
 } 

फिर भी मैं इस एल्गोरिथ्म को शांत नहीं कर सकता, भले ही यह सही परिणाम प्रदान करता है और निरंतर समय ओ (1) में संचालित होता है। क्या इसे एल्गोरिथम कहा जा सकता है? नहीं तो क्यों नहीं? मैं तर्क दे सकता हूं कि सरणी को भरने के लिए किसी समय एक एल्गोरिथ्म की आवश्यकता होती है, भले ही यह हमारे दिमाग में था कि हमारे लिए सरणी को भरना है, लेकिन क्या यह मानदंड हो सकता है? इन पहलुओं को औपचारिक रूप से कैसे नियंत्रित किया जाता है?

ध्यान दें कि इस अवधारणा को पूर्णतया तर्कों के स्वतंत्र रूप से पूर्णांक पर काम करने वाले किसी भी फ़ंक्शन तक बढ़ाया जा सकता है, मुझे फ़ंक्शन को 2 तर्क, या 3 यदि फ़ंक्शन में 3 तर्क और इसके बाद के संस्करण हैं, तो मुझे बस एक मैट्रिक्स का उपयोग करना होगा। इसके अलावा, इन समाधानों का उपयोग केवल मेमोरी की खपत के कारण नहीं किया जाता है?

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

एक अन्य उदाहरण के रूप में, एक सरणी के सामान्य उपयोग पर विचार करें: मैं आकार एन के प्रारंभ में एक सरणी आवंटित करता हूं, फिर मैं सूचकांक n पर मान को संग्रहीत करके और एक इकाई द्वारा n बढ़ाकर सरणी में तत्वों को जोड़ता हूं। फिर, अगर मैं एक एलिमेंट की तलाश करना चाहता हूं, तो मैं मदद कर सकता हूं लेकिन सरणी पर एक रेखीय खोज करने के लिए। अगर इसके बजाय मैंने आकार की एक सरणी बनाई, उदाहरण के लिए, Integer.MAXVALUE, पूर्णांक को स्टोर करने के लिए, शून्य के साथ आरंभीकृत, मैं एक पूर्णांक को इसके सूचकांक पर रखकर स्टोर कर सकता था। तब मैं O (1) समय में सरणी में इसके अस्तित्व की खोज कर सकता था। क्या होगा अगर मैं एक ही नंबर की कई इकाइयों को रखने में सक्षम होना चाहता हूं? कोई समस्या नहीं है, मैं सिर्फ पूर्णांक के सूचकांक में संग्रहीत मान को बढ़ाऊंगा।

सॉर्टिंग थोड़ी अधिक जटिल होगी, लेकिन फिर भी ओ (1) समय में लुकअप और जोड़ प्रदर्शन किया जा सकता है।


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

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

दायित्व: मैं आज उस शॉर्टहैंड विवरण ["एल्गोरिथ्म"] के भीतर जिस प्रकार की सामग्री को समझ सकता हूं, उसे परिभाषित करने के लिए आगे प्रयास नहीं करूंगा, और शायद मैं ऐसा करने में बुद्धिमानी से कभी सफल नहीं हो सकता। लेकिन मुझे पता है कि जब मैं इसे देखता हूं, और नीचे दिए गए पदों में वर्णित चीजें नहीं हैं
पैट्रिक87

इस सवाल से संबंधित (लेकिन सीधे इसका जवाब नहीं), यह भी पढ़ना दिलचस्प है "एक एल्गोरिथ्म क्या है?" यूरी गुरिविच, माइक्रोसॉफ्ट रिसर्च, तकनीकी रिपोर्ट MSR-TR-2011-116 research.microsoft.com/pubs/155608/209-3.pdf
godfatherofpolka

आप कहते हैं: "... अगर मेरे पास पूर्णांक का एक सरणी होता है जहां सरणी [n] में एन का भाज्य होता है? एक बार यह सरणी भर जाने के बाद"। आप सभी पूर्णांकों के भाज्य के साथ एक सरणी कैसे भरने जा रहे हैं? इस सरणी का अनंत आकार होगा और इसे भरने में अनंत समय लगेगा। इसलिए आपका प्रश्न बीमार है।
एपी

जवाबों:


9

एक लोकप्रिय पाठ्यपुस्तक में एक एल्गोरिथ्म की अनौपचारिक परिभाषा कुछ इस प्रकार है:

एक एल्गोरिथ्म (1) एक अच्छी तरह से परिभाषित कम्प्यूटेशनल प्रक्रिया (2) है जो कुछ इनपुट लेता है और (3) एक अच्छी तरह से परिभाषित कम्प्यूटेशनल समस्या के लिए कुछ आउटपुट (4) का उत्पादन करता है।

आपके पहले मामले में आपने एक एल्गोरिथ्म कोडित किया है जहां: समस्या को फैक्टरियल (परिभाषा का भाग 4), इनपुट के रूप में इंट एन (परिभाषा के भाग 2) को खोजने के लिए है, कोड की गणना की जाने वाली गणना का वर्णन करता है (परिभाषा का भाग 1) ), आउटपुट भाज्य (परिभाषा का भाग 3) है।

आपके दूसरे मामले में: समस्या को स्थिति n (परिभाषा के भाग 4) में सरणी तत्व को खोजने के लिए है, इनपुट के रूप में n (परिभाषा के भाग 3) को दिया गया है, कोड गणना की जाने वाली गणना का वर्णन करता है (परिभाषा के भाग 2), आउटपुट स्थिति n पर तत्व है (परिभाषा का भाग 1)।

आपने वहां फैक्टरियल स्टोर किए हैं, इसलिए यह आपको फैक्टोरियल देता है। यदि आपने वर्गों या क्यूब्स को संग्रहीत किया था, तो आपको स्क्वायर या क्यूब्स मिलेंगे, इसलिए यह नहीं कहा जा सकता है कि स्वयं के द्वारा दूसरा स्निपेट फैक्टोरियल की गणना करने के लिए एक एल्गोरिथ्म है।

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


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

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

2
यह सूचना के एक महीन टुकड़े के रूप में अभिव्यक्त होता है, जैसा कि ओपी ने प्रदर्शित किया है। सरणी को सभी factorials के साथ प्रारंभ किया गया है। यह एक परिमित विवरण है। यह सिर्फ ऑपरेटिव परिमित नहीं है। उसी तरह, में परिमित होने के बिना एक परिमित विवरण है। {(n,n!):nN}
युवल फिल्मस

सरणी का विवरण जानकारी के परिमित टुकड़े के रूप में व्यक्त किया जा सकता है, लेकिन सरणी स्वयं नहीं है।
रणबीर

मेरा तर्क है कि ओपी के दोनों उदाहरण एल्गोरिदम हैं , और ही सभी पूर्णांकों के लिए भाज्य की गणना करता है। लेकिन यह सिर्फ अचार है, मुझे लगता है।
पैट्रिक87

5

मोटे तौर पर, एक एल्गोरिथ्म एक समस्या को हल करने के लिए चरणों की एक श्रृंखला है

CS में, एल्गोरिथ्म शब्द का उपयोग करते समय आमतौर पर निम्नलिखित को समझा / समझा जाता है:

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

सीएस की स्थापना से पहले, गणितज्ञों ने एक ही प्रकार की चिंताओं को उठाया था, और इन चिंताओं को दूर करने के लिए गणना की औपचारिक परिभाषा प्रस्तुत की। इस प्रकार, आजकल, हम उपरोक्त सभी मान्यताओं को औपचारिक रूप से कह सकते हैं कि "एक एल्गोरिथ्म एक प्रक्रिया है जिसे ट्यूरिंग मशीन पर लागू किया जा सकता है" । यह संभवतः आपके प्रश्न का सबसे अच्छा औपचारिक उत्तर है।

ध्यान दें कि चर्च-ट्यूरिंग थीसिस कहती है कि हमें लगता है कि ट्यूरिंग मशीन की तुलना में एल्गोरिदम का कोई "अधिक शक्तिशाली" औपचारिककरण नहीं है।

तथ्यात्मक उदाहरण अभिकलन के एक अलग मॉडल में मिलता है, जिसे गैर-समान संगणना कहा जाता है। ट्यूरिंग मशीन गणना के एक समान मॉडल का एक उदाहरण है : इसमें एक एकल, परिमित विवरण है, और मनमाने ढंग से बड़े आकार के इनपुट के लिए काम करता है। दूसरे शब्दों में, एक टीएम मौजूद है जो सभी इनपुट आकारों के लिए समस्या को हल करता है।

अब, हम इसके बजाय गणना पर विचार कर सकते हैं: प्रत्येक इनपुट आकार के लिए, एक टीएम (या कुछ अन्य कम्प्यूटेशनल उपकरण) मौजूद है जो समस्या को हल करता है। यह एक बहुत अलग सवाल है। ध्यान दें कि एक एकल TM प्रत्येक एकल पूर्णांक के भाज्य को संग्रहीत नहीं कर सकता है, क्योंकि TM का एक बारीक वर्णन है। हालांकि, हम एक टीएम (या सी में एक प्रोग्राम) बना सकते हैं जो 1000 से नीचे के सभी नंबरों के factorials को स्टोर करता है। फिर, हम एक ऐसा प्रोग्राम बना सकते हैं जो 1000 और 10000 के बीच के सभी नंबरों के factorials को स्टोर करता है।

ये गैर-समान प्रकार की संगणना आमतौर पर सर्किट द्वारा सैद्धांतिक सीएस में मॉडलिंग की जाती है। आप प्रत्येक संभव इनपुट आकार के लिए एक अलग सर्किट निर्माण पर विचार करते हैं।

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


मुझे लगता है कि आपका सर्किट आधारित कम्प्यूटेशनल मॉडल अनुचित है। जैसा कि आप कहते हैं, एक TM का बारीक वर्णन है। लेकिन यह एक सहायक टेप है कि factorial के एक सारणीबद्ध संस्करण के साथ भरा है नहीं रोकता है। एक भी "बदतर" कर सकता है और अभी भी एक परिमित विवरण है। लेकिन वास्तव में आप सभी की जरूरत एक कम्प्यूटेशनल विवरण है, जो अंततः आवश्यक रूप से परिमित है। टैबिंग मशीन को एक सारणीबद्ध तथ्य के साथ परिभाषित करने के लिए कई कम्प्यूटेशनल रूप से समान तरीके हैं, जिनमें से कोई भी वास्तव में टीएम की कम्प्यूटेशनल शक्ति को बढ़ाने में सक्षम नहीं है। इसलिए आपका निष्कर्ष नहीं है।
बबौ

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

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

कोई विशेष पूर्व-निर्मित तालिका एक एल्गोरिथ्म का हिस्सा हो सकती है, और बढ़ती-आकार वाली पूर्व-निर्मित तालिकाओं के अनंत अनुक्रम के लिए, आप एल्गोरिथम का उपयोग करके इनमें से किसी एक चीज का उत्पादन कर सकते हैं। लेकिन मैं अपने आकार पर, एक एल्गोरिथ्म या एक समान संगणना के साथ, आकार में अनंत होने के कारण तेजी से लुकअप टेबल के अनंत सेट पर विचार नहीं करूंगा।
usul

आप इसे एक एल्गोरिथ्म नहीं मानेंगे। यह व्यक्तिपरक है। क्या मायने रखता है यह जानकर कि आपको क्यों नहीं करना चाहिए। और कोई कारण नहीं है कि मैं देख सकूं। कोई भी अवधारणा जो एल्गोरिदम के लिए समझ में आता है, उस मामले में समझ में आता है। यह सब कुछ तालिका के निर्माण से अलग है, हालांकि इसके लिए अलग से हिसाब लगाया जा सकता है। वास्तव में यह एक विशुद्ध रूप से शब्दार्थ अंक है, क्योंकि बढ़ते क्रम को इस तरह से देखते हुए, या इसकी अनंत सीमा द्वारा प्रतिस्थापित करने के बाद, गणितीय रूप से समान है। और अभिकलन के शब्दार्थ सिद्धांत ऐसी अनंत सीमाओं पर विचार करते हैं, हालांकि उत्पादन या प्रतिनिधित्व करते हैं।
बबौ

4

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

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

जब वास्तविक कंप्यूटर पर वास्तविक चलने के समय के बारे में चिंतित हो तो हमें और भी अधिक सावधान रहना चाहिए, लेकिन यह आमतौर पर सैद्धांतिक कंप्यूटर विज्ञान की सीमाओं से परे है, दुर्भाग्य से।


यदि हम बहुत उधम मचाते हैं, तो हमें एल्गोरिदम द्वारा गणना किए गए एल्गोरिदम और कार्यों के बीच अंतर के बारे में स्पष्ट होना चाहिए । उदाहरण के लिए, फैक्टोरियल फ़ंक्शन एक प्राकृतिक संख्या रूप में इनपुट प्राप्त करता है और आउटपुट। तथ्यात्मक फ़ंक्शन की गणना एक एल्गोरिथ्म द्वारा की जा सकती है। हम कहते हैं कि यदि कोई एल्गोरिथ्म का उपयोग करके गणना की जा सकती है, तो एक फ़ंक्शन कम्प्यूटेबल है।n !nn!

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

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


3
lol "एक एल्गोरिथ्म C में लिखा गया एक प्रोग्राम है ..."?!?
vzn

2
"एल्गोरिथ्म सी में लिखा गया एक प्रोग्राम है" ... आप भाषा को क्यों निर्दिष्ट कर रहे हैं? यह गैर-समझ में आता है।
संज्ञा

1
@nouney मैं सिर्फ ठोस होने की कोशिश कर रहा हूं। आपकी पसंदीदा प्रोग्रामिंग भाषा भी ट्यूरिंग-पूर्ण है।
युवल फिल्मस

@YuvalFilmus वैसे आप ठोस नहीं हैं, आप भ्रमित कर रहे हैं।
संज्ञा

@nouney आपका स्वयं का उत्तर जोड़ने के लिए आपका स्वागत है।
युवल फिल्मस

4

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

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

आपके प्रश्न से असंबंधित, किसी एल्गोरिथम मशीन की किसी भी वास्तविक परिभाषा में मेमोरी लुकअप कम से कम होगा जो एड्रेस पर मेमोरी लाने के लिए है । इसलिए आपके लुकअप एल्गोरिथ्म में आउटपुट के प्रत्येक बिट के लिए कम से कम समय होगा , जिसमें बिट्स हैं, इसलिए आपके लुक अप का कुल रनटाइम । लेकिन यदि इनपुट बिट्स है, तो , इसलिए आपका लुकअप एल्गोरिथ्म , कहीं के बॉलपार्क में नहीं है ।एक हे ( लॉग एन ) हे ( लॉग ऑन n ! ) हे ( एन ( लॉग एन ) 2 ) रों n = हे ( 2 रों ) हे ( 2 रों रों 2 ) हे ( 1 )O(logA)AO(logn)O(logn!)O(n(logn)2)sn=O(2s)O(2s s2)O(1)


" कोडस्पेस को परिमित होना चाहिए ": क्या आपके कहने का मतलब यह है कि एक लिस्प प्रोग्राम जो evalइसे बनाए गए कुछ बड़े डेटा स्ट्रक्चर पर फ़ंक्शन को कॉल करता है , और जो एक lLisp अभिव्यक्ति का प्रतिनिधित्व करता है, को एल्गोरिथ्म नहीं माना जा सकता है। मुझे संदेह है कि 20 वीं शताब्दी में एमआईटी में उत्पादित अधिकांश कोड एल्गोरिदम के रूप में योग्य नहीं हैं। यह सिर्फ एक अनौपचारिक तर्क है, लेकिन औपचारिक समस्या यह है कि एक परिमित विनिर्देश क्या है, जिसे आप बहुत अधिक प्रतिबंधात्मक तरीके से पढ़ते हैं।
बबौ

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

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

3

कुछ अवलोकन जो सहायक हो सकते हैं:

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

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

  1. nn!
  2. n>0n!< INT_MAXn!

आपके पहले कोड स्निपेट की कुछ व्याख्याएँ:

  1. यह pseudocode है जो विवरणों को छोड़कर C / C ++ जैसा दिखता है। intउदाहरण के लिए वास्तव में "किसी भी पूर्णांक" का अर्थ है।
  2. यह व्याख्या की जानी है क्योंकि यह एक वास्तविक C / C ++ प्रोग्राम था।

इंटरप्रिटेशन 1 समस्या बयान 1 के लिए सही है, जब तक कि फैक्टरियल नेगेटिव नंबर्स के लिए वैल्यू 1 मान लेता है (अन्यथा, हम डोमेन को प्रतिबंधित करने के लिए समस्या स्टेटमेंट को संशोधित कर सकते हैं, या इच्छित व्यवहार के लिए एल्गोरिथ्म)। व्याख्या 2 समस्या बयान 2 के लिए सही है, एक ही चेतावनी के साथ।

arrayarraynn>0n!< INT_MAXn!n<0

nn!232n!264

kknknk+n


मुझे लगता है कि एक एल्गोरिथ्म की अवधारणा कंप्यूटर के शब्द आकार सीमाओं से कुछ हद तक परे है। मुझे लगता है कि आप सिर्फ मुद्दे को चकमा दे रहे हैं।
बबौ

1

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

यह प्रश्न मूल रूप से प्रतीत होता है कि लुकअप टेबल एल्गोरिदम के भाग हैं या नहीं। पूर्ण रूप से! में ट्यूरिंग मशीन (टीएम) टेबल टीएम के राज्य तालिका में इनकोडिंग जा सकता है। टीएम संक्रमण तालिका में संग्रहीत डेटा की एक सीमित मात्रा के आधार पर टेप को इनिशियलाइज़ कर सकता है । हालांकि, "एल्गोरिदम" जो अनंत आदानों पर नहीं चलते हैं, केवल परिमित इनपुट हैं, "तुच्छ" परिमित-राज्य मशीन (FSM) हैं


3
यह एक TUring पूर्ण भाषा में क्यों है?
Babou

1

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

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

कुछ मुद्दों की पहचान

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

π

π, संभवतः लगभग सभी के गणितीय अर्थों में। लेकिन परिभाषाओं में अधिक सटीकता की आवश्यकता होगी।

तो असली सवाल यह जानना है कि सार्थक एल्गोरिदम क्या हैं। इसका उत्तर यह है कि सार्थक एल्गोरिदम वे हैं जो किसी समस्या को हल करते हैं, उस समस्या के लिए "समाधान", "उत्तर" को चरणबद्ध करके गणना करते हैं। एक एल्गोरिथ्म दिलचस्प है अगर यह एक समस्या से जुड़ा है जो इसे हल करता है।

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

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

दिलचस्प एल्गोरिदम (या कार्यक्रम)

यह सब निम्नलिखित विचारों को पेश करना था, जो कि बहुत वर्तमान शोध का उद्देश्य है (जिनमें से मैं विशेषज्ञ नहीं हूं)। यहां उपयोग की जाने वाली " दिलचस्प एल्गोरिथ्म " की धारणा मेरी है, जिसे अधिक सटीक परिभाषाओं के लिए एक अनौपचारिक स्थान धारक के रूप में पेश किया गया है।

एक दिलचस्प एल्गोरिथ्म एक रचनात्मक प्रमाण का रचनात्मक हिस्सा है जो किसी दिए गए समस्या का समाधान है । इसका मतलब है कि सबूत को वास्तव में समाधान को प्रदर्शित करना चाहिए बजाय इसके अस्तित्व को साबित करने के लिए, उदाहरण के लिए विरोधाभास द्वारा। अधिक जानकारी के लिए गणित में अंतर्ज्ञानवादी तर्क और निर्माणवाद देखें ।

यह निश्चित रूप से एक बहुत ही प्रतिबंधात्मक परिभाषा है, जो केवल उसी चीज़ पर विचार करता है जिसे मैंने दिलचस्प एल्गोरिदम कहा है। इसलिए यह लगभग सभी को नजरअंदाज करता है। लेकिन इसलिए हमारे सभी पाठ्यपुस्तकों को एल्गोरिथ्म पर करें। वे केवल कुछ दिलचस्प सिखाने की कोशिश करते हैं।

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

बेशक, यह एक औपचारिक तार्किक ढांचे के भीतर होना चाहिए जो यह स्थापित करता है कि किस डेटा के साथ गणना की जाती है, प्राथमिक कम्प्यूटेशनल कदम क्या हैं जो अनुमति दी गई है, और क्या उपयोग किए गए स्वयंसिद्ध हैं।

अपने तथ्यात्मक उदाहरण पर वापस जा रहे हैं, यह एक एल्गोरिथ्म के रूप में माना जा सकता है, भले ही एक तुच्छ हो। सामान्य फैक्टरियल फ़ंक्शन एक प्रमाण से मेल खाता है, जो कुछ अंकगणित की रूपरेखा प्रदान करता है, और एक पूर्णांक n दिया जाता है, एक संख्या है जो पहले n पूर्णांक का उत्पाद है। यह वास्तव में सरल है, जैसा कि तथ्यात्मक संगणना है। यह अन्य कार्यों के लिए अधिक जटिल हो सकता है।

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

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

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

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

21000

क्या कार्यक्रम दिलचस्प हैं

यह चर्चा कार्यक्रमों और प्रमाण के बीच करी-हावर्ड समरूपता जैसे परिणामों से अधिक ठीक से जुड़ी होनी चाहिए । यदि कोई कार्यक्रम वास्तव में किसी चीज़ का प्रमाण है, तो किसी भी कार्यक्रम को उपरोक्त परिभाषा के अर्थ में एक दिलचस्प कार्यक्रम के रूप में माना जा सकता है।

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

यह शायद सबसे "बेतरतीब ढंग से उत्पन्न" कार्यक्रमों को बाहर करता है।

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

हालांकि, यह ज्ञात है कि सभी प्रोग्राम टाइप करने योग्य नहीं हैं, क्योंकि यह ज्ञात है कि कुछ लैम्ब्डा अभिव्यक्ति, जैसे वाई कॉम्बिनेटर को लागू करना , एक ध्वनि प्रकार प्रणाली में टाइप नहीं किया जा सकता है

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

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


2
यह मुद्दे का एक आसान दृष्टिकोण नहीं है, हालांकि यह एक मौलिक है। मुझे अपमानजनक तरीके से सरलीकरण करना पड़ा और मुझसे गलतियाँ हुईं। लेकिन, यदि आप नीचे जाना चाहते हैं, तो कृपया मुझे बताएं कि क्यों।
Babou

हाँ, मुझे यकीन नहीं है कि क्या डाउनवोट्स के साथ है।
छद्म नाम

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

प्रश्न और आपके उत्तर दोनों को पढ़ने के बाद, मुझे इसे कम करने के लिए तैयार किया गया है, क्योंकि यह वास्तविक प्रश्न पर पर्याप्त ध्यान केंद्रित नहीं करता है, और इसमें बहुत सारे अधूरे विचार भी शामिल हैं। इसके अलावा, मुझे नहीं लगता कि "एक समस्या को हल करना" एक एल्गोरिथ्म की परिभाषा में लापता हिस्सा है। लेकिन मैं मानता हूं कि "शब्दार्थ" को एक एल्गोरिथ्म के गठन की परिभाषा में नजरअंदाज नहीं किया जाना चाहिए।
थॉमस क्लिंपेल

@ThomasKlimpel जैसा कि मैंने कहा, मैं वास्तविक मुद्दों पर पर्याप्त विशेषज्ञ नहीं हूं। और मैंने जोड़ा कि कोई और जवाब नहीं है। एल्गोरिदम बनाना समझ में नहीं आता है कि वे क्या हैं। मेरे सीमित ज्ञान के बारे में मेरी जागरूकता, जिसे छिपाना अवैज्ञानिक होगा, इस अधूरे विचारों की भावना का स्रोत है। समस्या के अस्तित्व को रेखांकित करना बेहतर लगता है, बल्कि फिर उन्हें अनदेखा करें। मैंने प्रत्येक उदाहरण को एक एल्गोरिथम से एक शब्दार्थ पीओवी से अधिक के रूप में संबोधित किया, क्योंकि प्रश्न एक शब्दार्थवादी प्रश्न है ("क्या है ...?")। क्या आपको लगता है कि अन्य उत्तर कोई औपचारिक समझ लाते हैं। Cf मेरी टिप्पणी
babou

0

लेखन के समय "एल्गोरिथ्म" की कोई अच्छी औपचारिक परिभाषा नहीं है। हालांकि, इस पर काम करने वाले स्मार्ट लोग हैं।

हम जानते हैं कि जो कुछ भी "एल्गोरिथ्म" है, वह "गणितीय फ़ंक्शन" और "कंप्यूटर प्रोग्राम" के बीच कहीं बैठता है।

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

तो सबसे अच्छा संभाल जो हमारे पास "एल्गोरिथ्म" पर है, वह यह है कि यह कार्यक्रमों पर किसी प्रकार की तुल्यता वर्ग है, जहां दो कार्यक्रम समान हैं यदि वे "अनिवार्य रूप से एक ही बात" करते हैं। किसी भी दो प्रोग्राम जो समान एल्गोरिथ्म को लागू करते हैं, उन्हें समान फ़ंक्शन की गणना करनी चाहिए, लेकिन ऐक्य सच नहीं है।

इसी तरह, एल्गोरिदम के बीच एक समतुल्यता वर्ग है, जहां दो एल्गोरिदम समान हैं यदि वे समान गणितीय कार्य की गणना करते हैं।

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

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

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


1
मुझे नहीं लगता कि यह कहना उचित है कि एल्गोरिथ्म की कोई अच्छी औपचारिक परिभाषा नहीं है। लगभग 100 साल पहले यह मामला था।
जुहो १

1
@ जूहू यह हो सकता है कि छद्म नाम से यह बहुत मजबूत हो, हालांकि वह बयान को कम करने की कोशिश करता है, विशेष रूप से यह कहते हुए कि स्थिति प्रगति कर रही है। हालांकि, मुझे लगता है कि वह अपने आकलन में सही है। मैं देर से प्रतिक्रिया कर रहा हूं, क्योंकि मैंने इस पर बहुत समय बिताया है, और बहुत अधिक महसूस करता हूं। लोगों ने अपनी समझ में काफी सुधार किया है, लेकिन पूरी चर्चा से पता चलता है कि कोई वास्तविक सहमति नहीं है ... और मुझे इसमें सबसे अधिक योगदान मिला अपरिपक्व, लोगों के स्तर को देखते हुए। अगर वह अनुचित है, तो आपको कौन लगता है कि उसने एक अच्छी औपचारिक परिभाषा दी है?
बाबू

आप 100% सही हैं। और मुझे लगता है कि अगर ट्यूरिंग जिंदा थे, या जटिलता सिद्धांत में किसी अन्य सिद्धांतकार थे, तो वह आपसे 100% सहमत होंगे। शिक्षाविदों को अपने सैन्यवाद को छोड़ने की जरूरत है। यह वास्तव में क्षेत्र में बाधा है। यह अंततः किसी भी तरह से होगा, एक बार जब वे मर जाएंगे। भगवान उस के लिए शुक्र।
आनंदम

-4

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

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


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