कलन विधि



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

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

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

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

इतिहास
एल्गोरिथ्म की अवधारणा प्राचीन काल से मौजूद है। अंकगणितीय एल्गोरिदम, जैसे कि एक विभाजन एल्गोरिथ्म, का उपयोग प्राचीन बेबीलोन के गणितज्ञों द्वारा c. 2500 ईसा पूर्व और मिस्र के गणितज्ञों द्वारा c. 1550 ई.पू में किया गया था। ग्रीक गणितज्ञों ने बाद में 240 ईसा पूर्व में एराटोस्थनीज की छलनी में अभाज्य संख्याओं को खोजने के लिए एल्गोरिदम का इस्तेमाल किया, और यूक्लिडियन एल्गोरिथम ने दो संख्याओं में सबसे बड़ा सामान्य भाजक खोजने के लिए एल्गोरिदम का इस्तेमाल किया। 9वीं शताब्दी में अल-किंडी जैसे अरबी गणितज्ञों ने आवृत्ति विश्लेषण के आधार पर कोड-ब्रेकिंग के लिए क्रिप्टोग्राफ़िक एल्गोरिदम का उपयोग किया।

एल्गोरिथम शब्द 9वीं शताब्दी के फारसी गणितज्ञ मुहम्मद इब्न मूसा अल-ख्वारिज्मी (Muḥammad ibn Mūsā al-Khwārizmī) के नाम से लिया गया है। जिसका निस्बा (nisba) (ख़्वारज़्म (Khwarazm) से उसकी पहचान) को अल्गोरितमी (अरबी फ़ारसी (Arabized Persian) الخوارزمی c. 780-850) के रूप में लैटिनकृत किया गया था। मुहम्मद इब्न मूसा अल-ख्वारिज्मी एक गणितज्ञ, खगोलशास्त्री, भूगोलवेत्ता और बगदाद में हाउस ऑफ विजडम के विद्वान थे। जिनके नाम का अर्थ है 'ख़्वारज़्म का मूल निवासी', एक ऐसा क्षेत्र जो ग्रेटर ईरान का हिस्सा था और अब उज़्बेकिस्तान में है।

825 के आसपास, अल-ख्वारिज्मी ने हिंदू-अरबी अंक प्रणाली पर एक अरबी भाषा का ग्रंथ लिखा, जिसका 12वीं शताब्दी के दौरान लैटिन में अनुवाद किया गया था। पांडुलिपि दीक्षित अल्गोरिज्मी ('इस प्रकार अल-ख्वारिज्मी बोले') वाक्यांश से शुरू होती है, जहां "एलगोरिज़मी (Algorizmi)" अल-ख्वारिज्मी के नाम का अनुवादक का लैटिनकरण था। मध्य युग के अंत में अल-ख्वारिज्मी यूरोप में सबसे अधिक पढ़ा जाने वाला गणितज्ञ था, मुख्य रूप से उनकी एक अन्य पुस्तक, बीजगणित थी। जिसका अर्थ मध्ययुगीन लैटिन में, अल्गोरिस्मस, अंग्रेजी 'एल्गोरिज्म', उनके नाम का भ्रष्टाचार, बस "दशमलव संख्या प्रणाली" का अर्थ था। 15वीं शताब्दी में, ग्रीक शब्द ऐरिस्थमोस (ἀριθμός-arithmos), 'नंबर' ('अंकगणित') के प्रभाव में, लैटिन शब्द को एल्गोरिथम में बदल दिया गया था, और इसके साथ अंग्रेजी शब्द 'एल्गोरिदम' पहली बार 17वीं शताब्दी में प्रमाणित हुआ; तथा इस प्रकार आधुनिक अर्थ 19वीं सदी में पेश किया गया था।

भारतीय गणित मुख्यतः एल्गोरिथम था। एल्गोरिदम जो भारतीय गणितीय परंपरा के प्रतिनिधि हैं, प्राचीन सुल्बसूत्रों से लेकर केरल स्कूल के मध्यकालीन ग्रंथों तक हैं।

अंग्रेजी में एल्गोरिथम शब्द का प्रयोग सबसे पहले लगभग 1230 में और फिर चौसर ने 1391 में किया था। अंग्रेजी ने फ्रांसीसी शब्द को अपनाया, लेकिन 19वीं शताब्दी के अंत तक "एल्गोरिदम" का अर्थ आधुनिक अंग्रेजी में नहीं था।

शब्द का एक और प्रारंभिक उपयोग 1240 से है, एक मैनुअल में जिसका नाम कारमेन डी अल्गोरिस्मो है, जिसे अलेक्जेंड्रे डी विलेडियू द्वारा रचित किया गया है। इसके साथ शुरू होता है:"Haec algorismus ars praesens dicitur, in qua / Talibus Indorum fruimur bis quinque figuris." जो अनुवाद करता है: "Algorism is the art by which at present we use those Indian figures, which number two times five." कविता कुछ सौ पंक्तियों की लंबी है और नए स्टाइल वाले भारतीय पासे (ताली इंडोरम), या हिंदू अंकों के साथ गणना करने की कला को सारांशित करती है।

एल्गोरिथम की आधुनिक अवधारणा का आंशिक औपचारिककरण 1928 में डेविड हिल्बर्ट द्वारा प्रस्तुत Entscheidungsproblem (निर्णय समस्या) को हल करने के प्रयासों के साथ शुरू हुआ। बाद में औपचारिकताओं को "प्रभावी गणना" या "प्रभावी विधि" को परिभाषित करने के प्रयासों के रूप में तैयार किया गया था। उन औपचारिकताओं में 1930, 1934 और 1935 के गोडेल हेरब्रांड क्लेन पुनरावर्ती कार्य, 1936 का अलोंजो चर्च का लैम्ब्डा कैलकुलस, 1936 का एमिल पोस्ट का फॉर्म्युलेशन 1, और 1936-37 और 1939 की एलन ट्यूरिंग की ट्यूरिंग मशीनें शामिल थीं।

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

सामान्य तौर पर, एक प्रोग्राम केवल एक एल्गोरिथम होता है यदि यह अंततः बंद हो जाता है।

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

बूलोस, जेफरी और 1974, 1999  निम्नलिखित उद्धरण में "एल्गोरिदम" शब्द का अनौपचारिक अर्थ प्रदान करते हैं: निम्नलिखित उद्धरण में शब्द एल्गोरिथ्म का एक अनौपचारिक अर्थ प्रदान करें:

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

एक "एन्यूमेरिकली इनफिनिट सेट" वह है जिसके तत्वों को पूर्णांकों के साथ एक से एक पत्राचार में रखा जा सकता है। इस प्रकार बूलोस और जेफरी कह रहे हैं कि एक एल्गोरिथ्म एक प्रक्रिया के लिए निर्देश का तात्पर्य है कि एक मनमाना "इनपुट" पूर्णांक या पूर्णांकों से "आउटपुट पूर्णांक" बनाता है, जो सिद्धांत रूप में, मनमाने ढंग से बड़े हो सकते हैं। उदाहरण के लिए, एक एल्गोरिथम एक बीजीय समीकरण हो सकता है जैसे कि y = m + n (यानी, दो मनमाना "इनपुट चर" m और n जो आउटपुट y उत्पन्न करते हैं), लेकिन इस धारणा को परिभाषित करने के लिए विभिन्न लेखकों के प्रयासों से संकेत मिलता है कि इस शब्द का अर्थ इससे कहीं अधिक है, कुछ के क्रम में (अतिरिक्त उदाहरण के लिए):
 * एक तेज़, कुशल, "अच्छी" प्रक्रिया के लिए सटीक निर्देश ("कंप्यूटर" द्वारा समझी जाने वाली भाषा में) जो "कंप्यूटर" की "चाल" (मशीन या मानव, आवश्यक आंतरिक रूप से निहित जानकारी और क्षमताओं से लैस) को खोजने, डिकोड करने के लिए निर्दिष्ट करता है,और फिर मनमाने ढंग से इनपुट पूर्णांक/प्रतीक m और n, प्रतीकों + और = ... और "प्रभावी रूप से" उत्पादन, "उचित" समय में, आउटपुट-पूर्णांक y को एक निर्दिष्ट स्थान पर और एक निर्दिष्ट प्रारूप में संसाधित करें।

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

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

औपचारिककरण
कंप्यूटर डेटा को संसाधित करने के तरीके के लिए एल्गोरिदम आवश्यक हैं। कई कंप्यूटर प्रोग्राम में एल्गोरिदम होते हैं उस विशिष्ट निर्देश का विवरण जो एक कंप्यूटर को एक निर्दिष्ट कार्य को करने के लिए एक विशिष्ट क्रम में करना चाहिए, जैसे कर्मचारियों की तनख्वाह की गणना करना या छात्रों के रिपोर्ट कार्ड को प्रिंट करना। इस प्रकार, एक एल्गोरिदम को संचालन के किसी भी अनुक्रम के रूप में माना जा सकता है जिसे ट्यूरिंग पूर्ण सिस्टम द्वारा अनुकरण किया जा सकता है। इस थीसिस पर जोर देने वाले लेखकों में मिन्स्की (1967), सैवेज (1987) और गुरेविच (2000) शामिल हैं:  मिन्स्की: "लेकिन हम ट्यूरिंग के साथ भी बनाए रखेंगे" कि कोई भी प्रक्रिया जिसे "स्वाभाविक रूप से" प्रभावी कहा जा सकता है, वास्तव में एक (सरल) मशीन द्वारा महसूस की जा सकती है। हालांकि यह अतिवादी लग सकता है, इसके पक्ष में तर्कों का खंडन करना कठिन है"। गुरेविच: "... ट्यूरिंग की थीसिस के पक्ष में अनौपचारिक तर्क एक मजबूत थीसिस को सही ठहराता है: सैवेज [1987] के अनुसार प्रत्येक एल्गोरिदम को ट्यूरिंग मशीन द्वारा अनुकरण किया जा सकता है, एक एल्गोरिदम एक ट्यूरिंग मशीन द्वारा परिभाषित एक कम्प्यूटेशनल प्रक्रिया है" ट्यूरिंग मशीनें कम्प्यूटेशनल प्रक्रियाओं को परिभाषित कर सकती हैं जो समाप्त नहीं होती हैं। एल्गोरिदम की अनौपचारिक परिभाषाओं के लिए आमतौर पर यह आवश्यक होता है कि एल्गोरिथम हमेशा समाप्त हो। यह आवश्यकता यह तय करने के कार्य को प्रस्तुत करती है कि क्या औपचारिक प्रक्रिया एक एल्गोरिथ्म है जो सामान्य मामले में असंभव है क्योंकि कम्प्यूटेबिलिटी सिद्धांत के एक प्रमुख प्रमेय को हॉल्टिंग समस्या के रूप में जाना जाता है।

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

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

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

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

एल्गोरिथम क्या होता है, इसकी कुछ वैकल्पिक अवधारणाओं के लिए, कार्यात्मक प्रोग्रामिंग और तर्क प्रोग्रामिंग देखें।

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

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

एल्गोरिदम के प्रतिनिधित्व को ट्यूरिंग मशीन विवरण के तीन स्वीकृत स्तरों में वर्गीकृत किया जा सकता है, जो निम्नानुसार है:

1 उच्च-स्तरीय विवरण
 * "... एक एल्गोरिथ्म का वर्णन करने के लिए गद्य, कार्यान्वयन विवरण की अनदेखी। इस स्तर पर, हमें यह उल्लेख करने की आवश्यकता नहीं है कि मशीन अपने टेप या सिर का प्रबंधन कैसे करती है।"


 * 2 कार्यान्वयन विवरण
 * "... गद्य ट्यूरिंग मशीन अपने सिर का उपयोग करने के तरीके और अपने टेप पर डेटा संग्रहीत करने के तरीके को परिभाषित करने के लिए प्रयोग किया जाता है। इस स्तर पर, हम राज्यों या संक्रमण कार्य का विवरण नहीं देते हैं।"


 * 3 औपचारिक विवरण
 * सबसे विस्तृत, "निम्नतम स्तर", ट्यूरिंग मशीन की "स्टेट टेबल" देता है। तीनों स्तरों में वर्णित सरल एल्गोरिथम "एम+एन जोड़ें (m+n) " के उदाहरण के लिए, उदाहरण देखें।

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

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

एल्गोरिदम के विकास में विशिष्ट कदम:
 * 1) समस्या की परिभाषा
 * 2) एक मॉडल का विकास
 * 3) एल्गोरिथ्म का विनिर्देशन
 * 4) एक एल्गोरिथ्म डिजाइन करना
 * 5) एल्गोरिथ्म की शुद्धता की जाँच करना
 * 6) एल्गोरिथ्म का विश्लेषण
 * 7) एल्गोरिथ्म का कार्यान्वयन
 * 8) कार्यक्रम परीक्षण
 * 9) प्रलेखन तैयारी

कंप्यूटर एल्गोरिदम
"सुरुचिपूर्ण" (कॉम्पैक्ट) कार्यक्रम, "अच्छा" (तेज़) कार्यक्रम : "सादगी और लालित्य" की धारणा अनौपचारिक रूप से नुथ में और ठीक चैतिन में प्रकट होती है:

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

चैतिन ने अपनी परिभाषा इस प्रकार प्रस्तुत की:

"मैं दिखाऊंगा कि आप यह साबित नहीं कर सकते कि एक कार्यक्रम 'सुरुचिपूर्ण' है" ऐसा प्रमाण हॉल्टिंग समस्या (ibid) को हल करेगा।

एल्गोरिथम बनाम फ़ंक्शन एक एल्गोरिथ्म द्वारा गणना योग्य: किसी दिए गए फ़ंक्शन के लिए कई एल्गोरिदम मौजूद हो सकते हैं। यह सच है, प्रोग्रामर के लिए उपलब्ध उपलब्ध निर्देश सेट का विस्तार किए बिना भी। रोजर्स का मानना ​​है कि "... एल्गोरिथम की धारणा के बीच अंतर करना महत्वपूर्ण है, यानी प्रक्रिया और एल्गोरिथ्म द्वारा गणना योग्य कार्य की धारणा, यानी प्रक्रिया द्वारा प्राप्त मानचित्रण एक ही फ़ंक्शन में कई अलग-अलग एल्गोरिदम हो सकते हैं।"

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

कंप्यूटर (और कंप्यूटर), गणना के मॉडल:

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

मिंस्की ने अपने "वेरी सिंपल बेसेस फॉर कम्प्यूटेबिलिटी" में लैंबेक के "एबेकस" मॉडल की अधिक अनुकूल भिन्नता का वर्णन किया है। मिंस्की की मशीन क्रमिक रूप से अपने पांच (या छह, यह निर्भर करता है कि कोई कैसे गिनता है) निर्देशों के माध्यम से आगे बढ़ता है जब तक कि कोई सशर्त यदि तब गोटो या बिना शर्त गोटो क्रम से प्रोग्राम प्रवाह को बदलता है। हाल्ट के अलावा, मिंस्की की मशीन में तीन असाइनमेंट (प्रतिस्थापन, प्रतिस्थापन) संचालन शामिल हैं: ZERO (जैसे 0: L ← 0 द्वारा प्रतिस्थापित स्थान की सामग्री), SUCCESSOR (जैसे L ← L+1), और DECREMENT (जैसे L ← L − 1 ) शायद ही किसी प्रोग्रामर को इतने सीमित निर्देश सेट के साथ "कोड" लिखना चाहिए। लेकिन मिन्स्की दिखाता है (जैसा कि मेल्ज़ाक और लैंबेक करते हैं) कि उसकी मशीन ट्यूरिंग केवल चार सामान्य प्रकार के निर्देशों के साथ पूर्ण है: सशर्त गोटो, बिना शर्त गोटो, असाइनमेंट/प्रतिस्थापन/प्रतिस्थापन, और पड़ाव। हालांकि, ट्यूरिंग-पूर्णता के लिए कुछ अलग असाइनमेंट निर्देश (जैसे डिक्रीमेंट, इंक्रीमेंट, और मिन्स्की मशीन के लिए शून्य/साफ/खाली) भी आवश्यक हैं; उनका सटीक विनिर्देश कुछ हद तक डिजाइनर पर निर्भर है। बिना शर्त गोटो एक सुविधा है; इसे एक समर्पित स्थान को शून्य पर प्रारंभ करके बनाया जा सकता है जैसे निर्देश " जेड 0 "; उसके बाद निर्देश IF Z=0 तब GOTO xxx बिना शर्त है।

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

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

संरचित प्रोग्रामिंग, विहित संरचनाएं: चर्च-ट्यूरिंग थीसिस के अनुसार, किसी भी एल्गोरिथ्म की गणना एक मॉडल द्वारा की जा सकती है जिसे ट्यूरिंग पूर्ण कहा जाता है, और मिन्स्की के प्रदर्शनों के अनुसार, ट्यूरिंग पूर्णता के लिए केवल चार निर्देश प्रकारों की आवश्यकता होती है-सशर्त गोटो, बिना शर्त गोटो, असाइनमेंट, एचएएलटी। केमेनी और कर्ट्ज़ ने देखा कि, बिना शर्त (गो टू) GOTO और सशर्त (इफ-देन गो टू) IF-THEN GOTO के "अनुशासनहीन" उपयोग के परिणामस्वरूप "स्पेगेटी कोड" हो सकता है, एक प्रोग्रामर केवल इन निर्देशों का उपयोग करके संरचित प्रोग्राम लिख सकता है; दूसरी ओर "एक संरचित भाषा में बुरी तरह से संरचित कार्यक्रमों को लिखना भी संभव है, और बहुत कठिन नहीं है"। टॉसवर्थ ने तीन बोहम-जैकोपिनी विहित संरचनाओं को बढ़ाया: सिक्वेंस (SEQUENCE), इफ-देन-एल्स (IF-THEN-ELSE), और वाइल-डू (WHILE-DO), दो और के साथ: डू-वाइल (DO-WHILE) और केस (CASE) । एक संरचित कार्यक्रम का एक अतिरिक्त लाभ यह है कि यह गणितीय प्रेरण का उपयोग करके शुद्धता के प्रमाण के लिए खुद को उधार देता है।

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

एल्गोरिथ्म उदाहरण
सबसे सरल एल्गोरिदम में से एक यादृच्छिक क्रम की संख्याओं की सूची में सबसे बड़ी संख्या खोजना है। समाधान खोजने के लिए सूची में प्रत्येक संख्या को देखने की आवश्यकता है। इससे एक सरल एल्गोरिथम इस प्रकार है, जिसे अंग्रेजी गद्य में उच्च स्तरीय विवरण में कहा जा सकता है, जैसे:

उच्च स्तरीय विवरण:


 * 1) यदि समुच्चय में कोई संख्या नहीं है तो कोई उच्चतम संख्या नहीं है।
 * 2) मान लें कि सेट में पहली संख्या सेट में सबसे बड़ी संख्या है।
 * 3) सेट में प्रत्येक शेष संख्या के लिए:
 * 4) यदि यह संख्या वर्तमान सबसे बड़ी संख्या से बड़ी है, तो इस संख्या को समुच्चय की सबसे बड़ी संख्या मानें।
 * 5) जब पुनरावृति के लिए सेट में कोई संख्या नहीं बची है, तो वर्तमान सबसे बड़ी संख्या को सेट की सबसे बड़ी संख्या मानें।

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

'अगर' L.Size = 0 'रिटर्न' NULL सबसे बड़ा ← l [0] 'एल,' डू 'में प्रत्येक' आइटम 'के लिए 'अगर' आइटम> सबसे बड़ा, 'तो' सबसे बड़ा ← आइटम 'रिटर्न' सबसे बड़ा

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

यूक्लिड ने इस समस्या को इस प्रकार प्रस्तुत किया: "दिए गए दो संख्याएँ जो एक दूसरे के लिए अभाज्य नहीं हैं, उनका सबसे बड़ा सामान्य उपाय खोजने के लिए"। वह परिभाषित करता है "एक संख्या [होने के लिए] इकाइयों से बना एक भीड़": एक गिनती संख्या, एक सकारात्मक पूर्णांक जिसमें शून्य शामिल नहीं है। "माप" करने के लिए एक छोटी माप लंबाई s क्रमिक रूप से (q गुना) लंबी लंबाई l के साथ रखना है जब तक कि शेष भाग r छोटी लंबाई s से कम न हो। आधुनिक शब्दों में, शेष r = l - q×s, q भागफल है, या शेष r "मापांक" है, विभाजन के बाद बचा हुआ पूर्णांक भिन्नात्मक भाग है।

यूक्लिड की विधि के सफल होने के लिए, प्रारंभिक लंबाई को दो आवश्यकताओं को पूरा करना चाहिए: (i) लंबाई शून्य नहीं होनी चाहिए, और (ii) घटाव "उचित" होना चाहिए; यानी, एक परीक्षण की गारंटी होनी चाहिए कि दो संख्याओं में से छोटी संख्या को बड़े से घटाया जाता है (या दोनों बराबर हो सकते हैं ताकि उनका घटाव शून्य हो)।

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

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


 * किसी स्थान को अपर केस अक्षर (अक्षरों) द्वारा दर्शाया जाता है, जैसे एस, ए, आदि।
 * किसी स्थान में अलग-अलग मात्रा (संख्या) लोअर केस अक्षरों में लिखी जाती है और (आमतौर पर) स्थान के नाम से जुड़ी होती है। उदाहरण के लिए, प्रारंभ में स्थान L में संख्या l = 3009 हो सकती है।

यूक्लिड के एल्गोरिथ्म के लिए एक अयोग्य कार्यक्रम
"सुरुचिपूर्ण" एल्गोरिथम के नुथ के संस्करण का एक अनुवाद है जिसमें एक घटाव आधारित शेष लूप है जो उसके विभाजन (या "मॉड्यूलस" निर्देश) के उपयोग की जगह लेता है। नुथ 1973: 2-4 से व्युत्पन्न। दो संख्याओं के आधार पर "सुरुचिपूर्ण" g.c.d. की गणना कर सकता है। "सुरुचिपूर्ण" से कम चरणों में। निम्नलिखित एल्गोरिथम को नुथ के यूक्लिड और निकोमाचस के चार चरण संस्करण के रूप में तैयार किया गया है, लेकिन, शेष को खोजने के लिए विभाजन का उपयोग करने के बजाय, यह शेष लंबाई r से छोटी लंबाई s के क्रमिक घटाव का उपयोग करता है जब तक कि r s से कम न हो। बोल्डफेस में दिखाया गया उच्च-स्तरीय विवरण, नुथ 1973: 2–4 से अनुकूलित है:

'इनपुट': 1 [दो स्थानों में एल और एस दो लंबाई का प्रतिनिधित्व करने वाली संख्या एल और एस डालते हैं]: इनपुट एल, एस 2 [आरंभिक आर: शेष लंबाई आर को प्रारंभिक/प्रारंभिक/इनपुट लंबाई एल के बराबर बनाएं]: आर एल E0: [सुनिश्चित करें कि r s.] 3 [सुनिश्चित करें कि दो संख्याओं में से छोटी संख्या S में है और बड़ी R में है]: अगर आर> एस तो एल की सामग्री बड़ी संख्या है इसलिए एक्सचेंज-चरण 4, 5 और 6 को छोड़ दें: गोटो चरण 7 वरना आर और एस की सामग्री को स्वैप करें। 4 एल ← आर (यह पहला कदम बेमानी है, लेकिन बाद में चर्चा के लिए उपयोगी है)। 5 आर ← एस 6 एस एल

E1: [शेष ज्ञात करें]: जब तक R में शेष लंबाई r, S में छोटी लंबाई s से कम न हो, बार-बार S में माप संख्या s को R में शेष लंबाई r से घटाएं। 7 अगर एस> आर तो इसलिए किया माप गोटो 10 वरना फिर से मापें, 8 आर ← आर - एस 9 [शेष-लूप]: गोटो 7. E2: [क्या शेषफल शून्य है?]: या तो (i) अंतिम उपाय सटीक था, R में शेषफल शून्य है, और प्रोग्राम रुक सकता है, या (ii) एल्गोरिथम जारी रहना चाहिए: अंतिम माप ने R में शेषफल S में मापने की संख्या से कम छोड़ दिया। 10 अगर आर = 0 तब ऐसा किया गोटो चरण 15 वरना

चरण 11 के लिए जारी रखें, E3: [इंटरचेंज एस और आर]: यूक्लिड के एल्गोरिथ्म का नट। शेष r का उपयोग यह मापने के लिए करें कि पहले छोटी संख्या s क्या थी; एल एक अस्थायी स्थान के रूप में कार्य करता है। 11 एल आर

12 आर एस

13 एस ली

14 [मापने की प्रक्रिया दोहराएं]:

गोटो 7 आउटपुट: 15 [हो गया।

S में सबसे बड़ा उभयनिष्ठ भाजक है]:

प्रिंट करें खत्म 16 रुको, अंत करो, रुको।

यूक्लिड के एल्गोरिथ्म के लिए एक सुरुचिपूर्ण कार्यक्रम
यूक्लिड के एल्गोरिथम के निम्नलिखित संस्करण के लिए केवल छह मुख्य निर्देशों की आवश्यकता है जो "इनलेगेंट" द्वारा तेरह को करने के लिए आवश्यक हैं; इससे भी बदतर, "सुरुचिपूर्ण" के लिए अधिक प्रकार के निर्देशों की आवश्यकता होती है। "सुरुचिपूर्ण" का फ़्लोचार्ट इस लेख के शीर्ष पर पाया जा सकता है। (असंरचित) मूल भाषा में, चरणों को क्रमांकित किया जाता है, और निर्देश LET [] = [] असाइनमेंट निर्देश का प्रतीक है।  5 आरईएम यूक्लिड का एल्गोरिथ्म सबसे बड़ी आम भाजक के लिए 6 प्रिंट टाइप दो पूर्णांक 0 से अधिक 10 इनपुट ए, बी 20 अगर बी = 0 तो गोटो 80 30 अगर ए> बी तो गोटो 60 40 लेट बी = बी-ए 50 गोटो 20 60 लेट ए = ए-बी 70 गोटो 20 80 प्रिंट ए 90 छोर "एलिगेंट" कैसे काम करता है: बाहरी "यूक्लिड लूप" के स्थान पर, "एलिगेंट" दो "को-लूप" के बीच आगे और पीछे शिफ्ट होता है, एक ए> बी लूप जो ए ← ए - बी, और ए बी ≤ ए लूप की गणना करता है जो बी ← बी - ए की गणना करता है। यह काम करता है क्योंकि, जब अंत में मिन्यूएंड एम सबट्रेंड एस से कम या उसके बराबर होता है (अंतर = मिन्यूएंड - सबट्रेंड), minuend s बन सकता है (नई माप लंबाई) और सबट्रेंड नया r (मापी जाने वाली लंबाई) बन सकता है; दूसरे शब्दों में घटाव की "भावना" उलट जाती है।

निम्नलिखित संस्करण का उपयोग सी-परिवार की प्रोग्रामिंग भाषाओं के साथ किया जा सकता है: सी-परिवार से प्रोग्रामिंग भाषाएं: // Euclid's algorithm for greatest common divisor

int euclidAlgorithm (int A, int B){ A=abs(A); B=abs(B); while (B!=0){ while (A>B) A=A-B; B=B-A; }     return A; }

यूक्लिड एल्गोरिदम का परीक्षण
क्या कोई एल्गोरिथम वही करता है जो उसका लेखक उससे करना चाहता है? कुछ परीक्षण मामले आमतौर पर मुख्य कार्यक्षमता में कुछ विश्वास देते हैं। लेकिन परीक्षण पर्याप्त नहीं हैं। परीक्षण मामलों के लिए, एक स्रोत 3009 और 884 का उपयोग करता है। नुथ ने 40902, 24140 का सुझाव दिया। एक और दिलचस्प मामला दो अपेक्षाकृत अभाज्य संख्याएँ 14157 और 5950 है।

लेकिन "असाधारण मामलों" की पहचान की जानी चाहिए और उनका परीक्षण किया जाना चाहिए। क्या आर > एस, एस > आर, आर = एस (R > S, S > R, R = S) होने पर "इनलीगेंट" ठीक से प्रदर्शन करेगा? "सुरुचिपूर्ण" के लिए डिट्टो: बी> ए, ए> बी, ए = बी (B > A, A > B, A = B)? (हाँ सभी को)। क्या होता है जब एक संख्या शून्य होती है, दोनों संख्याएँ शून्य होती हैं? ("सुरुचिपूर्ण" सभी मामलों में हमेशा के लिए गणना करता है; "सुरुचिपूर्ण" हमेशा के लिए गणना करता है जब ए = 0.) यदि ऋणात्मक संख्याएँ दर्ज की जाती हैं तो क्या होता है? भिन्नात्मक संख्याएँ? यदि इनपुट नंबर, यानी एल्गोरिदम/प्रोग्राम द्वारा गणना किए गए फ़ंक्शन का डोमेन शून्य सहित केवल सकारात्मक पूर्णांक शामिल करना है, तो शून्य पर विफलताएं इंगित करती हैं कि एल्गोरिदम (और प्रोग्राम जो इसे तुरंत चालू करता है) कुल फ़ंक्शन के बजाय आंशिक कार्य है। अपवादों के कारण एक उल्लेखनीय विफलता एरियन 5 फ्लाइट 501 रॉकेट विफलता (4 जून, 1996) है।

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

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

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

पाँच चरणों को समाप्त करके "सुरुचिपूर्ण" की कॉम्पैक्टनेस में सुधार किया जा सकता है। लेकिन चैतिन ने साबित कर दिया कि एक एल्गोरिदम को संकुचित करना एक सामान्यीकृत एल्गोरिदम द्वारा स्वचालित नहीं किया जा सकता है; बल्कि, यह केवल अनुमान से ही किया जा सकता है; यानी, संपूर्ण खोज (व्यस्त बीवर में पाए जाने वाले उदाहरण), परीक्षण और त्रुटि, चतुराई, अंतर्दृष्टि, आगमनात्मक तर्क का अनुप्रयोग, आदि। ध्यान दें कि चरण 4, 5 और 6 चरण 11, 12 और 13 में दोहराए गए हैं। "सुरुचिपूर्ण" के साथ तुलना एक संकेत प्रदान करती है कि चरण 2 और 3 के साथ इन चरणों को समाप्त किया जा सकता है। यह मूल निर्देशों की संख्या को तेरह से घटाकर आठ कर देता है, जो इसे नौ चरणों में "सुरुचिपूर्ण" की तुलना में "अधिक सुरुचिपूर्ण" बनाता है।

"बी = 0?" को स्थानांतरित करके "सुरुचिपूर्ण" की गति में सुधार किया जा सकता है। दो घटाव छोरों के बाहर परीक्षण करें। यह परिवर्तन तीन निर्देशों (बी = 0?, ए = 0?, गोटो) को जोड़ने के लिए कहता है। अब "सुरुचिपूर्ण" उदाहरण संख्याओं की तेज़ी से गणना करता है; क्या किसी दिए गए A, B और R के लिए हमेशा ऐसा ही होता है, S को विस्तृत विश्लेषण की आवश्यकता होगी।

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

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

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

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

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

वर्गीकरण
एल्गोरिदम को वर्गीकृत करने के विभिन्न तरीके हैं, प्रत्येक अपने गुण के साथ।

कार्यान्वयन द्वारा
एल्गोरिदम को वर्गीकृत करने का एक तरीका कार्यान्वयन के साधनों से है।


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


 * तार्किक
 * एक एल्गोरिथ्म को नियंत्रित तार्किक कटौती के रूप में देखा जा सकता है।इस धारणा को इस प्रकार व्यक्त किया जा सकता है: एल्गोरिथ्म = लॉजिक + कंट्रोल। लॉजिक घटक उन स्वयंसिद्धों को व्यक्त करता है जो गणना में उपयोग किए जा सकते हैं और नियंत्रण घटक उस तरीके को निर्धारित करता है जिसमें कटौती को स्वयंसिद्धों पर लागू किया जाता है। यह तर्क प्रोग्रामिंग प्रतिमान का आधार है। शुद्ध तर्क प्रोग्रामिंग भाषाओं में, नियंत्रण घटक तय किया जाता है और एल्गोरिदम केवल तर्क घटक की आपूर्ति करके निर्दिष्ट किया जाता है। इस दृष्टिकोण की अपील सुरुचिपूर्ण शब्दार्थ है: स्वयंसिद्धों में एक परिवर्तन एल्गोरिथ्म में एक अच्छी तरह से परिभाषित परिवर्तन पैदा करता है।


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


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


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

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


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


 * खोज और गणना
 * कई समस्याओं (जैसे शतरंज खेलना) को रेखांकन पर समस्याओं के रूप में तैयार किया जा सकता है। एक ग्राफ एक्सप्लोरेशन एल्गोरिथ्म एक ग्राफ के चारों ओर घूमने के लिए नियमों को निर्दिष्ट करता है और ऐसी समस्याओं के लिए उपयोगी है। इस श्रेणी में खोज एल्गोरिदम, शाखा और बाध्य गणना और बैकट्रैकिंग भी शामिल हैं।


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


 * बैक ट्रैकिंग
 * इस दृष्टिकोण में, कई समाधानों को वृद्धिशील रूप से बनाया जाता है और जब यह निर्धारित किया जाता है कि वे एक वैध पूर्ण समाधान का नेतृत्व नहीं कर सकते हैं।

अनुकूलन समस्याएं
अनुकूलन समस्याओं के लिए एल्गोरिदम का अधिक विशिष्ट वर्गीकरण है;ऐसी समस्याओं के लिए एक एल्गोरिथ्म एक या अधिक सामान्य श्रेणियों में से एक के साथ -साथ निम्नलिखित में से एक में भी गिर सकता है:


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


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


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

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

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

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

कुछ समस्याओं में अलग -अलग जटिलता के कई एल्गोरिदम हो सकते हैं, जबकि अन्य समस्याओं में कोई एल्गोरिदम या कोई ज्ञात कुशल एल्गोरिदम नहीं हो सकता है। कुछ समस्याओं से लेकर अन्य समस्याओं तक मैपिंग भी हैं। इसके कारण, यह उनके लिए सर्वोत्तम संभव एल्गोरिदम की जटिलता के आधार पर एल्गोरिदम के बजाय एल्गोरिदम के बजाय समस्याओं को वर्गीकृत करने के लिए अधिक उपयुक्त पाया गया।

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

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

इसके अतिरिक्त, कुछ क्रिप्टोग्राफिक एल्गोरिदम में निर्यात प्रतिबंध हैं (क्रिप्टोग्राफी का निर्यात देखें)।

प्राचीन निकट पूर्व
एल्गोरिदम का शुरुआती सबूत प्राचीन मेसोपोटामिया (आधुनिक इराक) के बेबीलोनियन गणित में पाया जाता है।बगदाद के पास शूरुप्पक में पाया गया एक सुमेरियन क्ले टैबलेट और 2500 ईसा पूर्व में दिनांकित था। हम्मुराबी राजवंश के दौरान 1800-1600 ईसा पूर्व, बेबीलोनियन क्ले टैबलेट्स ने कंप्यूटिंग सूत्रों के लिए एल्गोरिदम का वर्णन किया। बाबुल के खगोल विज्ञान में एल्गोरिदम का भी उपयोग किया गया था।बेबीलोनियन क्ले टैबलेट महत्वपूर्ण खगोलीय घटनाओं के समय और स्थान की गणना करने के लिए एल्गोरिथम प्रक्रियाओं का वर्णन और नियोजित करते हैं।

अंकगणित के लिए एल्गोरिदम भी प्राचीन मिस्र के गणित में पाए जाते हैं, जो कि Rhind गणितीय पपीरस लगभग 1550 ईसा पूर्व में डेटिंग करते हैं। Algorithms were later used in ancient Hellenistic mathematics. Two examples are the Sieve of Eratosthenes, which was described in the Introduction to Arithmetic by Nicomachus, और यूक्लिडियन एल्गोरिथ्म, जिसे पहले यूक्लिड के तत्वों (सी। 300 ईसा पूर्व) में वर्णित किया गया था।

असतत और अलग -अलग प्रतीक
टैली-मार्क्स: उनके झुंडों पर नज़र रखने के लिए, उनके अनाज के बोरों और उनके पैसे के पूर्वजों ने टैली का इस्तेमाल किया: पत्थरों को जमा करना या छड़ें पर खरोंच करना या मिट्टी में असतत प्रतीकों को बनाना।बाबुल और मिस्र के निशान और प्रतीकों के उपयोग के माध्यम से, अंततः रोमन अंक और अबेकस विकसित हुए (दिलसन, पी। & nbsp; 16–41)।टैली के निशान ट्यूरिंग मशीन और पोस्ट -ट्यूरिंग मशीन कम्प्यूटेशन में उपयोग किए जाने वाले Unary अंक प्रणाली अंकगणित में प्रमुखता से दिखाई देते हैं।

संख्याओं के लिए स्थान धारकों के रूप में प्रतीकों का हेरफेर: बीजगणित
मुहम्मद इब्न मसा अल-ख्वारिज़मी, एक फारसी गणितज्ञ, ने 9 वीं शताब्दी में अल-जबर लिखा था।अल्गोरिज़्म और एल्गोरिथ्म शब्द अल-ख्वारिज़मी नाम से प्राप्त होते हैं, जबकि बीजगणित शब्द अल-जबर पुस्तक से लिया गया है।यूरोप में, शब्द एल्गोरिथ्म का उपयोग मूल रूप से अल-ख्वारिज़मी द्वारा उपयोग किए जाने वाले नियमों और तकनीकों के सेटों को संदर्भित करने के लिए किया गया था, जो बीजगणितीय समीकरणों को हल करने के लिए, बाद में नियमों या तकनीकों के किसी भी सेट को संदर्भित करने के लिए सामान्यीकृत होने से पहले। यह अंततः Kalulus Ratiocinator (CA 1680) की Leibniz की धारणा में समाप्त हुआ:

"A good century and a half ahead of his time, Leibniz proposed an algebra of logic, an algebra that would specify the rules for manipulating logical concepts in the manner that ordinary algebra specifies the rules for manipulating numbers."

क्रिप्टोग्राफिक एल्गोरिदम
एन्क्रिप्टेड कोड को डिक्रिप्टेड कोड के लिए पहला क्रिप्टोग्राफिक एल्गोरिथ्म अल-किंडी द्वारा विकसित किया गया था, जो 9 वीं शताब्दी के अरब गणितज्ञ, क्रिप्टोग्राफिक संदेशों पर एक पांडुलिपि में एक पांडुलिपि में विकसित किया गया था।उन्होंने आवृत्ति विश्लेषण, जल्द से जल्द कोडब्रेकिंग एल्गोरिथ्म द्वारा क्रिप्टनालिसिस का पहला विवरण दिया।

असतत राज्यों के साथ यांत्रिक विरोधाभास
घड़ी: बोल्टर वजन-चालित घड़ी के आविष्कार को प्रमुख आविष्कार के रूप में [मध्य युग में यूरोप] के रूप में क्रेडिट करता है, विशेष रूप से, कगार से बचने के लिए यह हमें एक यांत्रिक घड़ी की टिक और टॉक प्रदान करता है।सटीक स्वचालित मशीन 13 वीं शताब्दी में शुरू होने वाले मैकेनिकल ऑटोमेटा के लिए तुरंत और अंत में कम्प्यूटेशनल मशीनों के लिए-अंतर इंजन और चार्ल्स बैबेज और काउंटेस एडा लवलेस के विश्लेषणात्मक इंजन, 19 वीं शताब्दी के मध्य में। LoveLace को कंप्यूटर पर प्रसंस्करण के लिए एक एल्गोरिथ्म की पहली रचना के साथ श्रेय दिया जाता है-Babbage के विश्लेषणात्मक इंजन, पहले डिवाइस ने केवल एक कैलकुलेटर के बजाय एक वास्तविक ट्यूरिंग-पूर्ण कंप्यूटर माना जाता है-और कभी-कभी एक परिणाम के रूप में इतिहास का पहला प्रोग्रामर कहा जाता है, हालांकि ए। बैबेज के दूसरे डिवाइस के पूर्ण कार्यान्वयन को उसके जीवनकाल के दशकों बाद तक महसूस नहीं किया जाएगा।

तार्किक मशीनें 1870 - स्टेनली जेवॉन्स 'लॉजिकल एबाकस एंड लॉजिकल मशीन: तकनीकी समस्या बूलियन समीकरणों को कम करने के लिए थी, जब एक रूप में प्रस्तुत किया जाता है, जिसे अब कर्णघा मैप्स के रूप में जाना जाता है। Jevons (1880) ने पहले पिन के साथ सुसज्जित लकड़ी की पर्चियों का एक सरल abacus का वर्णन किया है, जिससे कि [तार्किक] संयोजनों के किसी भी भाग या वर्ग को यंत्रवत् रूप से बाहर निकाला जा सकता है ... हाल ही में, हालांकि, मैंने सिस्टम को कम कर दिया है पूरी तरह से यांत्रिक रूप, और इस प्रकार एक तार्किक मशीन कहा जा सकता है, जो कि एक तार्किक मशीन कहा जा सकता है, इस तरह की अप्रत्यक्ष प्रक्रिया को पूरा किया है, जो कुछ जंगम लकड़ी की छड़ से सुसज्जित है और पैर में 21 कुंजियाँ हैं जैसे कि पियानो [आदि]। .. इस मशीन के साथ वह एक syllogism या किसी अन्य सरल तार्किक तर्क का विश्लेषण कर सकता है।

यह मशीन उन्होंने 1870 में रॉयल सोसाइटी के साथियों के समक्ष प्रदर्शित की। एक अन्य तर्कशास्त्री जॉन वेन, हालांकि, अपने 1881 के प्रतीकात्मक तर्क में, इस प्रयास के लिए एक पीलिया की आंख बदल गई: मेरे पास कभी -कभी तार्किक मशीनों के लिए रुचि या महत्व का कोई उच्च अनुमान नहीं है ... यह मुझे नहीं लगता है कि कोई भी नहीं है कि कोई भीवर्तमान में ज्ञात या खोजे जाने की संभावना वास्तव में तार्किक मशीनों के नाम के लायक है;एल्गोरिथ्म चरित्रों पर अधिक देखें।लेकिन आगे नहीं बढ़ने के लिए उन्होंने भी कुछ हद तक एक योजना प्रस्तुत की, मैं प्रो। जेवॉन के अबैकस ... [और] [ए] लाभ के लिए, प्रो। जेवोन्स की तार्किक मशीन के अनुरूप, निम्नलिखित विरोधाभास का वर्णन किया जा सकता है।मैं इसे केवल एक तार्किक-डायग्राम मशीन कहना पसंद करता हूं ... लेकिन मुझे लगता है कि यह बहुत पूरी तरह से कर सकता है जो किसी भी तार्किक मशीन से तर्कसंगत रूप से अपेक्षित हो सकता है।

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

इलेक्ट्रोमैकेनिकल रिले के टेलीफोन-स्विचिंग नेटवर्क (1835 का आविष्कार किया गया) डिजिटल एडिंग डिवाइस के आविष्कारक जॉर्ज स्टाइबिट्ज़ (1937) के काम के पीछे था।जैसा कि उन्होंने बेल प्रयोगशालाओं में काम किया, उन्होंने गियर के साथ यांत्रिक कैलकुलेटर के बोझ के उपयोग को देखा।वह 1937 में एक शाम अपने विचार का परीक्षण करने का इरादा रखते हुए घर गया था ... जब टिंकरिंग खत्म हो गया था, स्टिबिट्ज़ ने एक बाइनरी एडिंग डिवाइस का निर्माण किया था।

गणितज्ञ मार्टिन_डाविस_ (गणितज्ञ) |मार्टिन डेविस इलेक्ट्रोमैकेनिकल रिले के विशेष महत्व को देखते हैं (इसके दो बाइनरी राज्यों के साथ खुले और बंद):
 * यह केवल विकास के साथ था, 1930 के दशक में, विद्युत रिले का उपयोग करते हुए इलेक्ट्रोमैकेनिकल कैलकुलेटर की शुरुआत, कि मशीनों को बनाया गया था, जिसमें स्कोप बबेज ने कल्पना की थी।

गणित 19 वीं शताब्दी के दौरान 20 वीं शताब्दी के मध्य तक
प्रतीक और नियम: तेजी से उत्तराधिकार में, द मैथमेटिक्स ऑफ़ जॉर्ज बोले (1847, 1854), गोटलोब फ्रीज (1879), और ग्यूसेप पीनो (1888-1889) ने नियमों द्वारा हेरफेर किए गए प्रतीकों के अनुक्रम में अंकगणित को कम कर दिया।पीनो के द प्रिंसिपल्स ऑफ़ अंकगणित, एक नई विधि (1888) द्वारा प्रस्तुत किया गया था, एक प्रतीकात्मक भाषा में गणित के स्वयंसिद्धकरण में पहला प्रयास था।

लेकिन Heijenoort Frege (1879) देता है यह Kudos: Frege's शायद तर्क में लिखा गया सबसे महत्वपूर्ण एकल काम है।... जिसमें हम एक 'फॉर्मूला भाषा' देखते हैं, यह एक लिंगुआ चरित्र है, विशेष प्रतीकों के साथ लिखी गई भाषा, शुद्ध विचार के लिए, अर्थात्, बयानबाजी अलंकरणों से मुक्त ... विशिष्ट प्रतीकों से निर्मित जो निश्चित के अनुसार हेरफेर की जाती हैनियम । फ्रीज के काम को अल्फ्रेड नॉर्थ व्हाइटहेड और बर्ट्रेंड रसेल द्वारा उनके प्रिंसिपिया मैथेमेटिका (1910-1913) में और अधिक सरल और प्रवर्धित किया गया था।

विरोधाभास: एक ही समय में साहित्य में कई परेशान विरोधाभास दिखाई दिए, विशेष रूप से, ब्यूर्ली-फ़ॉर्टी विरोधाभास (1897), रसेल विरोधाभास (1902–03), और रिचर्ड पैराडॉक्स। परिणामी विचारों ने कर्ट गोडेल के पेपर (1931) को जन्म दिया - वह विशेष रूप से झूठे के विरोधाभास का हवाला देता है - जो पूरी तरह से संख्याओं को पुनरावृत्ति के नियमों को कम करता है।

प्रभावी गणना: 1928 में हिल्बर्ट द्वारा सटीक रूप से परिभाषित किए गए entscheidungsproblem को हल करने के प्रयास में, गणितज्ञों ने पहले यह परिभाषित करने के लिए निर्धारित किया कि एक प्रभावी विधि या प्रभावी गणना या प्रभावी गणना से क्या मतलब था (यानी, एक गणना जो सफल होगी)।तेजी से उत्तराधिकार में निम्नलिखित दिखाई दिए: अलोंजो चर्च, स्टीफन क्लेन और जे.बी. रोसेर के λ-Calculus जैक्स हर्ब्रांड (Cf. Gödel के प्रिंसटन लेक्चर 1934 के 1934 के लेक्चर) और बाद में क्लेन द्वारा बाद में सरलीकरण पर अभिनय करने वाले गोडेल के काम से सामान्य पुनरावृत्ति की एक बारीक सम्मान की परिभाषा। चर्च का प्रमाण यह कि entscheidungsproblem अनहोनी थी, एमिल पोस्ट की प्रभावी गणना की परिभाषा एक कार्यकर्ता के रूप में दिमाग से कमरों के अनुक्रम के माध्यम से बाएं या दाएं स्थानांतरित करने के निर्देशों की सूची का पालन करती है और जबकि एक कागज को चिह्नित या मिटा देती है या कागज का निरीक्षण करती है और हां-नो बनाती है।अगले निर्देश के बारे में निर्णय। एलन ट्यूरिंग का प्रमाण है कि entscheidungsproblem उसके a- [स्वचालित-] मशीन के उपयोग से बेजोड़ था - एक मशीन के संदर्भ में प्रभावी विधि की जे। बार्कले रोसेर परिभाषा के बाद लगभग समान प्रभाव। चर्च थीसिस के लिए एक अग्रदूत के क्लेन के प्रस्ताव को कि उन्होंने थीसिस कहा, और कुछ साल बाद क्लेन ने अपनी थीसिस चर्च की थीसिस का नाम बदल दिया और ट्यूरिंग की थीसिस का प्रस्ताव।

एमिल पोस्ट (1936) और एलन ट्यूरिंग (1936–37, 1939)
एमिल पोस्ट (1936) ने एक कंप्यूटर (मानव होने) के कार्यों को निम्नानुसार वर्णित किया:
 * ... दो अवधारणाएं शामिल हैं: एक प्रतीक स्थान जिसमें समस्या से उत्तर तक जाने वाला काम किया जाना है, और दिशाओं का एक निश्चित अटल सेट किया जाना है।

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


 * एक बॉक्स को बाहर किया जाना है और शुरुआती बिंदु कहा जाता है। ... एक विशिष्ट समस्या को प्रतीकात्मक रूप में बक्से की एक परिमित संख्या में दिया जाना है [यानी, इनपुट] एक स्ट्रोक के साथ चिह्नित किया जा रहा है। इसी तरह, उत्तर [यानी, आउटपुट] को चिह्नित बक्से के ऐसे कॉन्फ़िगरेशन द्वारा प्रतीकात्मक रूप में दिया जाना है ...


 * एक सामान्य समस्या के लिए लागू दिशाओं का एक सेट प्रत्येक विशिष्ट समस्या पर लागू होने पर एक नियतात्मक प्रक्रिया सेट करता है। यह प्रक्रिया तभी समाप्त हो जाती है जब यह प्रकार (c) [यानी, स्टॉप] की दिशा में आता है। पोस्ट -ट्यूरिंग मशीन पर और देखें

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

Turing -His मॉडल की गणना को अब एक ट्यूरिंग मशीन कहा जाता है - Begins, जैसा कि पोस्ट किया गया था, एक मानव कंप्यूटर के विश्लेषण के साथ, जिसे वह बुनियादी गतियों और मन की राज्यों के एक साधारण सेट के लिए नीचे ले जाता है।लेकिन वह एक कदम आगे जारी रखता है और संख्याओं की गणना के मॉडल के रूप में एक मशीन बनाता है।


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


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


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

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

यह हो सकता है कि इनमें से कुछ परिवर्तन आवश्यक रूप से मन की स्थिति के परिवर्तन को लागू करते हैं।इसलिए, सबसे सामान्य एकल ऑपरेशन को निम्न में से एक होना चाहिए:
 * (ए) मन की स्थिति के संभावित परिवर्तन के साथ प्रतीक का एक संभावित परिवर्तन (ए)।
 * (बी) मन की स्थिति के संभावित परिवर्तन के साथ -साथ देखे गए वर्गों का एक संभावित परिवर्तन (बी)


 * अब हम इस कंप्यूटर का काम करने के लिए एक मशीन का निर्माण कर सकते हैं।

A few years later, Turing expanded his analysis (thesis, definition) with this forceful expression of it:
 * "A function is said to be "effectively calculable" if its values can be found by some purely mechanical process. Though it is fairly easy to get an intuitive grasp of this idea, it is nevertheless desirable to have some more definite, mathematical expressible definition ... [he discusses the history of the definition pretty much as presented above with respect to Gödel, Herbrand, Kleene, Church, Turing, and Post] ... We may take this statement literally, understanding by a purely mechanical process one which could be carried out by a machine. It is possible to give a mathematical description, in a certain normal form, of the structures of these machines. The development of these ideas leads to the author's definition of a computable function, and to an identification of computability † with effective calculability...
 * "† We shall use the expression "computable function" to mean a function calculable by a machine, and we let "effectively calculable" refer to the intuitive idea without particular identification with any one of these definitions".

जे.बी. रोसेर (1939) और एस.सी. क्लेन (1943)
जे। बार्कले रोसेर ने निम्नलिखित तरीके से एक 'प्रभावी [गणितीय] विधि' को परिभाषित किया (इटैलिकाइजेशन जोड़ा गया):
 * 'प्रभावी विधि' का उपयोग यहां एक विधि के विशेष अर्थों में किया जाता है, जिसमें से प्रत्येक चरण को ठीक से निर्धारित किया जाता है और जो कि चरणों की एक परिमित संख्या में उत्तर का उत्पादन करना निश्चित है। इस विशेष अर्थ के साथ, तीन अलग -अलग सटीक परिभाषाएँ आज तक दी गई हैं। [उसका फुटनोट #5; नीचे चर्चा नीचे देखें]। इनमें से सबसे सरल राज्य (पोस्ट और ट्यूरिंग के कारण) अनिवार्य रूप से कहता है कि समस्याओं के कुछ सेटों को हल करने का एक प्रभावी तरीका मौजूद है यदि कोई मशीन का निर्माण कर सकता है जो तब सेट की किसी भी समस्या को हल करेगा जिसमें कोई मानवीय हस्तक्षेप नहीं है, जो प्रश्न को सम्मिलित करने से परे है और (बाद में) उत्तर पढ़ना। सभी तीन परिभाषाएँ समतुल्य हैं, इसलिए यह कोई फर्क नहीं पड़ता कि किसका उपयोग किया जाता है। इसके अलावा, यह तथ्य कि तीनों समकक्ष हैं, किसी भी एक की शुद्धता के लिए एक बहुत मजबूत तर्क है। (रोसेर 1939: 225–226)

Rosser का फुटनोट नंबर 5 (1) चर्च और क्लेन के काम और λ-definability की उनकी परिभाषा का संदर्भ देता है, विशेष रूप से, चर्च का उपयोग प्राथमिक संख्या सिद्धांत (1936) की अपनी एक अयोग्य समस्या में इसका उपयोग करता है; (२) हर्ब्रांड और गोडेल और उनके पुनरावृत्ति का उपयोग, विशेष रूप से, गोडेल का अपने प्रसिद्ध पेपर में उपयोग को प्रिंसिपिया मैथेमेटिका और संबंधित सिस्टम I (1931) के औपचारिक रूप से अविभाज्य प्रस्तावों पर; और (3) पोस्ट (1936) और ट्यूरिंग (1936–37) गणना के उनके तंत्र-मॉडल में।

स्टीफन सी। क्लेन ने अपनी अब तक की प्रसिद्ध थीसिस के रूप में परिभाषित किया, जिसे मैं चर्च-ट्र्यूरिंग थीसिस के रूप में जाना जाता हूं। लेकिन उन्होंने निम्नलिखित संदर्भ में ऐसा किया (मूल में बोल्डफेस):
 * 12. एल्गोरिथम सिद्धांत ... एक पूर्ण एल्गोरिथम सिद्धांत स्थापित करने में, हम जो करते हैं, वह एक प्रक्रिया का वर्णन करना है, जो स्वतंत्र चर के मूल्यों के प्रत्येक सेट के लिए प्रदर्शन योग्य है, जो प्रक्रिया आवश्यक रूप से समाप्त होती है और इस तरह से कि परिणाम से हम कर सकते हैं एक निश्चित उत्तर पढ़ें, हां या नहीं, प्रश्न के लिए, क्या विधेय मूल्य सही है? (क्लेन 1943: 273)

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

यह भी देखें

 * सार मशीन
 * एल्गोरिथम इंजीनियरिंग
 * एल्गोरिथम लक्षण वर्णन
 * एल्गोरिथम पूर्वाग्रह
 * एल्गोरिथम रचना
 * एल्गोरिथम संस्थाएं
 * एल्गोरिथम संश्लेषण
 * एल्गोरिथम तकनीक
 * एल्गोरिथम टोपोलॉजी
 * कचरा अंदर कचरा बाहर
 * एल्गोरिदम का परिचय (पाठ्यपुस्तक)
 * एल्गोरिदम की सूची
 * एल्गोरिथ्म सामान्य विषयों की सूची
 * सैद्धांतिक कंप्यूटर विज्ञान में महत्वपूर्ण प्रकाशनों की सूची - एल्गोरिदम
 * एल्गोरिदम का विनियमन
 * गणना का सिद्धांत
 * कम्प्यूटिबिलिटी थ्योरी
 * कम्प्यूटेशनल जटिलता सिद्धांत
 * कम्प्यूटेशनल गणित

ग्रन्थसूची

 * Bell, C. Gordon and Newell, Allen (1971), Computer Structures: Readings and Examples, McGraw–Hill Book Company, New York. ISBN 0-07-004357-4.
 * Includes an excellent bibliography of 56 references.
 * , ISBN 0-8078-4108-0
 * : cf. Chapter 3 Turing machines where they discuss "certain enumerable sets not effectively (mechanically) enumerable".
 * Campagnolo, M.L., Moore, C., and Costa, J.F. (2000) An analog characterization of the subrecursive functions. In Proc. of the 4th Conference on Real Numbers and Computers, Odense University, pp. 91–109
 * Reprinted in The Undecidable, p. 89ff. The first expression of "Church's Thesis". See in particular page 100 (The Undecidable) where he defines the notion of "effective calculability" in terms of "an algorithm", and he uses the word "terminates", etc.
 * Reprinted in The Undecidable, p. 110ff. Church shows that the Entscheidungsproblem is unsolvable in about 3 pages of text and 3 pages of footnotes.
 * Davis gives commentary before each article. Papers of Gödel, Alonzo Church, Turing, Rosser, Kleene, and Emil Post are included; those cited in the article are listed here by author's name.
 * Davis offers concise biographies of Leibniz, Boole, Frege, Cantor, Hilbert, Gödel and Turing with von Neumann as the show-stealing villain. Very brief bios of Joseph-Marie Jacquard, Babbage, Ada Lovelace, Claude Shannon, Howard Aiken, etc.
 * , ISBN 0-312-10409-X
 * Yuri Gurevich, Sequential Abstract State Machines Capture Sequential Algorithms, ACM Transactions on Computational Logic, Vol 1, no 1 (July 2000), pp. 77–111. Includes bibliography of 33 sources.
 * , 3rd edition 1976[?], ISBN 0-674-32449-8 (pbk.)
 * , ISBN 0-671-49207-1. Cf. Chapter "The Spirit of Truth" for a history leading to, and a discussion of, his proof.
 * Presented to the American Mathematical Society, September 1935. Reprinted in The Undecidable, p. 237ff. Kleene's definition of "general recursion" (known now as mu-recursion) was used by Church in his 1935 paper An Unsolvable Problem of Elementary Number Theory that proved the "decision problem" to be "undecidable" (i.e., a negative result).
 * Reprinted in The Undecidable, p. 255ff. Kleene refined his definition of "general recursion" and proceeded in his chapter "12. Algorithmic theories" to posit "Thesis I" (p. 274); he would later repeat this thesis (in Kleene 1952:300) and name it "Church's Thesis"(Kleene 1952:317) (i.e., the Church thesis).
 * Kosovsky, N.K. Elements of Mathematical Logic and its Application to the theory of Subrecursive Algorithms, LSU Publ., Leningrad, 1981
 * A.A. Markov (1954) Theory of algorithms. [Translated by Jacques J. Schorr-Kon and PST staff] Imprint Moscow, Academy of Sciences of the USSR, 1954 [i.e., Jerusalem, Israel Program for Scientific Translations, 1961; available from the Office of Technical Services, U.S. Dept. of Commerce, Washington] Description 444 p. 28 cm. Added t.p. in Russian Translation of Works of the Mathematical Institute, Academy of Sciences of the USSR, v. 42. Original title: Teoriya algerifmov. [QA248.M2943 Dartmouth College library. U.S. Dept. of Commerce, Office of Technical Services, number OTS 60-51085.]
 * Minsky expands his "...idea of an algorithm – an effective procedure..." in chapter 5.1 Computability, Effective Procedures and Algorithms. Infinite machines.
 * Reprinted in The Undecidable, pp. 289ff. Post defines a simple algorithmic-like process of a man writing marks or erasing marks and going from box to box and eventually halting, as he follows a list of simple instructions. This is cited by Kleene as one source of his "Thesis I", the so-called Church–Turing thesis.
 * Reprinted in The Undecidable, p. 223ff. Herein is Rosser's famous definition of "effective method": "...a method each step of which is precisely predetermined and which is certain to produce the answer in a finite number of steps... a machine which will then solve any problem of the set with no human intervention beyond inserting the question and (later) reading the answer" (p. 225–226, The Undecidable)
 * Cf. in particular the first chapter titled: Algorithms, Turing Machines, and Programs. His succinct informal definition: "...any sequence of instructions that can be obeyed by a robot, is called an algorithm" (p. 4).
 * . Corrections, ibid, vol. 43(1937) pp. 544–546. Reprinted in The Undecidable, p. 116ff. Turing's famous paper completed as a Master's dissertation while at King's College Cambridge UK.
 * Reprinted in The Undecidable, pp. 155ff. Turing's paper that defined "the oracle" was his PhD thesis while at Princeton.
 * United States Patent and Trademark Office (2006), 2106.02 **>Mathematical Algorithms: 2100 Patentability, Manual of Patent Examining Procedure (MPEP). Latest revision August 2006
 * Kosovsky, N.K. Elements of Mathematical Logic and its Application to the theory of Subrecursive Algorithms, LSU Publ., Leningrad, 1981
 * A.A. Markov (1954) Theory of algorithms. [Translated by Jacques J. Schorr-Kon and PST staff] Imprint Moscow, Academy of Sciences of the USSR, 1954 [i.e., Jerusalem, Israel Program for Scientific Translations, 1961; available from the Office of Technical Services, U.S. Dept. of Commerce, Washington] Description 444 p. 28 cm. Added t.p. in Russian Translation of Works of the Mathematical Institute, Academy of Sciences of the USSR, v. 42. Original title: Teoriya algerifmov. [QA248.M2943 Dartmouth College library. U.S. Dept. of Commerce, Office of Technical Services, number OTS 60-51085.]
 * Minsky expands his "...idea of an algorithm – an effective procedure..." in chapter 5.1 Computability, Effective Procedures and Algorithms. Infinite machines.
 * Reprinted in The Undecidable, pp. 289ff. Post defines a simple algorithmic-like process of a man writing marks or erasing marks and going from box to box and eventually halting, as he follows a list of simple instructions. This is cited by Kleene as one source of his "Thesis I", the so-called Church–Turing thesis.
 * Reprinted in The Undecidable, p. 223ff. Herein is Rosser's famous definition of "effective method": "...a method each step of which is precisely predetermined and which is certain to produce the answer in a finite number of steps... a machine which will then solve any problem of the set with no human intervention beyond inserting the question and (later) reading the answer" (p. 225–226, The Undecidable)
 * Cf. in particular the first chapter titled: Algorithms, Turing Machines, and Programs. His succinct informal definition: "...any sequence of instructions that can be obeyed by a robot, is called an algorithm" (p. 4).
 * . Corrections, ibid, vol. 43(1937) pp. 544–546. Reprinted in The Undecidable, p. 116ff. Turing's famous paper completed as a Master's dissertation while at King's College Cambridge UK.
 * Reprinted in The Undecidable, pp. 155ff. Turing's paper that defined "the oracle" was his PhD thesis while at Princeton.
 * United States Patent and Trademark Office (2006), 2106.02 **>Mathematical Algorithms: 2100 Patentability, Manual of Patent Examining Procedure (MPEP). Latest revision August 2006
 * Cf. in particular the first chapter titled: Algorithms, Turing Machines, and Programs. His succinct informal definition: "...any sequence of instructions that can be obeyed by a robot, is called an algorithm" (p. 4).
 * . Corrections, ibid, vol. 43(1937) pp. 544–546. Reprinted in The Undecidable, p. 116ff. Turing's famous paper completed as a Master's dissertation while at King's College Cambridge UK.
 * Reprinted in The Undecidable, pp. 155ff. Turing's paper that defined "the oracle" was his PhD thesis while at Princeton.
 * United States Patent and Trademark Office (2006), 2106.02 **>Mathematical Algorithms: 2100 Patentability, Manual of Patent Examining Procedure (MPEP). Latest revision August 2006
 * . Corrections, ibid, vol. 43(1937) pp. 544–546. Reprinted in The Undecidable, p. 116ff. Turing's famous paper completed as a Master's dissertation while at King's College Cambridge UK.
 * Reprinted in The Undecidable, pp. 155ff. Turing's paper that defined "the oracle" was his PhD thesis while at Princeton.
 * United States Patent and Trademark Office (2006), 2106.02 **>Mathematical Algorithms: 2100 Patentability, Manual of Patent Examining Procedure (MPEP). Latest revision August 2006

अग्रिम पठन

 * Knuth, Donald E. (2000). Selected Papers on Analysis of Algorithms. Stanford, California: Center for the Study of Language and Information.
 * Knuth, Donald E. (2010). Selected Papers on Design of Algorithms. Stanford, California: Center for the Study of Language and Information.
 * Knuth, Donald E. (2000). Selected Papers on Analysis of Algorithms. Stanford, California: Center for the Study of Language and Information.
 * Knuth, Donald E. (2010). Selected Papers on Design of Algorithms. Stanford, California: Center for the Study of Language and Information.
 * Knuth, Donald E. (2000). Selected Papers on Analysis of Algorithms. Stanford, California: Center for the Study of Language and Information.
 * Knuth, Donald E. (2010). Selected Papers on Design of Algorithms. Stanford, California: Center for the Study of Language and Information.
 * Knuth, Donald E. (2000). Selected Papers on Analysis of Algorithms. Stanford, California: Center for the Study of Language and Information.
 * Knuth, Donald E. (2010). Selected Papers on Design of Algorithms. Stanford, California: Center for the Study of Language and Information.

बाहरी संबंध

 * Dictionary of Algorithms and Data Structures – National Institute of Standards and Technology
 * Algorithm repositories
 * The Stony Brook Algorithm Repository – State University of New York at Stony Brook
 * Collected Algorithms of the ACM – Association for Computing Machinery
 * The Stanford GraphBase – Stanford University
 * The Stony Brook Algorithm Repository – State University of New York at Stony Brook
 * Collected Algorithms of the ACM – Association for Computing Machinery
 * The Stanford GraphBase – Stanford University