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