कलन विधि: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(16 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Short description|Sequence of instructions to perform a task}}
{{Short description|Sequence of instructions to perform a task}}
{{Redirect|Algorithms|the subfield of computer science|Analysis of algorithms}}
{{Redirect|कलन विधि (एल्गोरिथ्म)|कंप्यूटर विज्ञान का उपक्षेत्र|कलन विधि (एल्गोरिथ्म) का विश्लेषण}}
{{Other uses}}
{{Other uses}}


[[Image:Euclid flowchart.svg|thumb|right|एक एल्गोरिथ्म (यूक्लिड एल्गोरिथ्म) का फ्लोचार्ट ए और बी नाम के स्थानों में दो नंबरों ए और बी के सबसे बड़े सामान्य भाजक (जी.सी.डी.) की गणना के लिए एल्गोरिथ्म दो छोरों में क्रमिक घटाव द्वारा आगे बढ़ता है: यदि परीक्षण बी yes ए पैदावार हां या सही है(अधिक सटीक रूप से, स्थान B में संख्या B स्थान A में संख्या A से अधिक या बराबर है A) तब, एल्गोरिथ्म B ← B - A को निर्दिष्ट करता है (जिसका अर्थ है संख्या B - A पुराने B को प्रतिस्थापित करता है)।इसी तरह, यदि a> b, तो a - a - B. प्रक्रिया समाप्त हो जाती है जब (b की सामग्री) 0 है, g.c.d.ए में (एल्गोरिथ्म स्कॉट 2009: 13 से प्राप्त एल्गोरिथ्म; प्रतीकों और ड्राइंग शैली से तौसवोरथे 1977 से)।]]
[[Image:Euclid flowchart.svg|thumb|right|एक कलन विधि (एल्गोरिथ्म) (यूक्लिड कलन विधि (एल्गोरिथ्म)) का फ्लोचार्ट ए और बी नाम के स्थानों में दो नंबरों ए और बी के सबसे बड़े सामान्य भाजक (जी.सी.डी.) की गणना के लिए कलन विधि (एल्गोरिथ्म) दो छोरों में क्रमिक घटाव द्वारा आगे बढ़ता है: यदि परीक्षण बी yes ए पैदावार हां या सही है(अधिक सटीक रूप से, स्थान B में संख्या B स्थान A में संख्या A से अधिक या बराबर है A) तब, कलन विधि (एल्गोरिथ्म) B ← B - A को निर्दिष्ट करता है (जिसका अर्थ है संख्या B - A पुराने B को प्रतिस्थापित करता है)।इसी तरह, यदि a> b, तो a - a - B. प्रक्रिया समाप्त हो जाती है जब (b की सामग्री) 0 है, g.c.d.ए में (कलन विधि (एल्गोरिथ्म) स्कॉट 2009: 13 से प्राप्त कलन विधि (एल्गोरिथ्म); प्रतीकों और ड्राइंग शैली से तौसवोरथे 1977 से)।]]


[[File:Diagram for the computation of Bernoulli numbers.jpg|thumb|नोट जी से एडा लवलेस का आरेख, पहला प्रकाशित कंप्यूटर एल्गोरिथ्म]]
[[File:Diagram for the computation of Bernoulli numbers.jpg|thumb|नोट जी से एडा लवलेस का आरेख, पहला प्रकाशित कंप्यूटर कलन विधि (एल्गोरिथ्म)]]
गणित और कंप्यूटर विज्ञान में, एक एल्गोरिथ्म ({{IPAc-en|audio=en-us-algorithm.ogg|ˈ|æ|l|ɡ|ə|r|ɪ|ð|əm}}) कठोर निर्देशों का एक सीमित क्रम है, यह आमतौर पर विशिष्ट समस्याओं के एक वर्ग को हल करने या गणना करने के लिए उपयोग किया जाता है।<ref>{{Cite web|url=https://www.merriam-webster.com/dictionary/algorithm|title=Definition of ALGORITHM|work=Merriam-Webster Online Dictionary |language=en |access-date=2019-11-14 |archive-url=https://web.archive.org/web/20200214074446/https://www.merriam-webster.com/dictionary/algorithm |archive-date=February 14, 2020|url-status=live}}</ref> एल्गोरिथ्म का उपयोग गणना और डेटा प्रोसेसिंग करने के लिए विनिर्देशों के रूप में किया जाता है। अधिक उन्नत एल्गोरिदम स्वचालित कटौती कर सकते हैं (स्वचालित तर्क के रूप में संदर्भित) और हम विभिन्न मार्गों (स्वचालित निर्णय लेने के रूप में संदर्भित) के माध्यम से कोड निष्पादन को मोड़ने के लिए गणितीय और तार्किक परीक्षणों का उपयोग करते हैं। मशीनों के वर्णनकर्ता के रूप में मानवीय विशेषताओं का उपयोग अलंकारिक तरीकों से पहले से ही एलन ट्यूरिंग द्वारा शब्दों के साथ किया जा चुका था जैसे "स्मृति", "खोज" और "प्रोत्साहन"।<ref>Blair, Ann, Duguid, Paul, Goeing, Anja-Silvia and Grafton, Anthony. Information: A Historical Companion, Princeton: Princeton University Press, 2021. p. 247</ref>
गणित और कंप्यूटर विज्ञान में, '''कलन विधि (एल्गोरिथ्म)''' ({{IPAc-en|audio=en-us-algorithm.ogg|ˈ|æ|l|ɡ|ə|r|ɪ|ð|əm}}) परिशुद्ध निर्देशों का एक सीमित क्रम है, इसका उपयोग विशिष्ट समस्याओं को हल करने या गणना करने के लिए किया जाता है।<ref>{{Cite web|url=https://www.merriam-webster.com/dictionary/algorithm|title=Definition of ALGORITHM|work=Merriam-Webster Online Dictionary |language=en |access-date=2019-11-14 |archive-url=https://web.archive.org/web/20200214074446/https://www.merriam-webster.com/dictionary/algorithm |archive-date=February 14, 2020|url-status=live}}</ref> गणना और डाटा का विश्लेषण करने के लिए कलन विधि (एल्गोरिदम) का उपयोग विनिर्देशों के रूप में किया जाता है। अच्छी तरह तैयार की गई कलन विधि (एल्गोरिथ्म) स्वचालित कटौती कर सकती हैं (स्वचालित तर्क के रूप में संदर्भित) और हम विभिन्न मार्गों (स्वचालित निर्णय लेने के रूप में संदर्भित) के माध्यम से कोड निष्पादन की प्रक्रिया को आसानी से हल करने के लिए गणितीय और तार्किक परीक्षणों का उपयोग करते हैं। मशीनों के वर्णनकर्ता के रूप में मानवीय विशेषताओं का उपयोग अलंकारिक तरीकों से पहले से ही '''एलन ट्यूरिंग''' द्वारा शब्दों के साथ किया जा चुका था जैसे '''"स्मृति", "खोज" और "प्रोत्साहन"'''।<ref>Blair, Ann, Duguid, Paul, Goeing, Anja-Silvia and Grafton, Anthony. Information: A Historical Companion, Princeton: Princeton University Press, 2021. p. 247</ref>


इसके विपरीत, एक अनुमानी समस्या समाधान के लिए एक दृष्टिकोण है जिसे पूरी तरह से निर्दिष्ट नहीं किया जा सकता है या यह सही या इष्टतम परिणामों की गारंटी नहीं दे सकता है, विशेष रूप से समस्या डोमेन में जहां कोई अच्छी तरह से परिभाषित सही या इष्टतम परिणाम नहीं है।<ref>David A. Grossman, Ophir Frieder, ''Information Retrieval: Algorithms and Heuristics'', 2nd edition, 2004, {{isbn|1402030045}}</ref>
इसके विपरीत, अनुमानी समस्या समाधान के लिए एक दृष्टिकोण है जिसे पूरी तरह से निर्दिष्ट नहीं किया जा सकता है या अगर कहें तो सही परिणामों का आश्वासन नहीं दे सकता है, विशेष रूप से समस्या डोमेन (Domain) में कोई अच्छी तरह से परिभाषित इष्टतम परिणाम नहीं है।<ref>David A. Grossman, Ophir Frieder, ''Information Retrieval: Algorithms and Heuristics'', 2nd edition, 2004, {{isbn|1402030045}}</ref>


एक प्रभावी विधि के रूप में, एक एल्गोरिथ्म को सीमित स्थान और समय के भीतर,<ref>"Any classical mathematical algorithm, for example, can be described in a finite number of English words" (Rogers 1987:2).</ref> और किसी फ़ंक्शन की गणना<ref>"an algorithm is a procedure for computing a ''function'' (with respect to some chosen notation for integers) ... this limitation (to numerical functions) results in no loss of generality", (Rogers 1987:1).</ref> के लिए एक अच्छी तरह से परिभाषित औपचारिक भाषा<ref>Well defined with respect to the agent that executes the algorithm: "There is a computing agent, usually human, which can react to the instructions and carry out the computations" (Rogers 1987:2).</ref> के रूप में व्यक्त किया जा सकता है।
एक प्रभावी विधि के रूप में, एक कलन विधि (एल्गोरिथ्म) को सीमित स्थान और समय के भीतर,<ref>"Any classical mathematical algorithm, for example, can be described in a finite number of English words" (Rogers 1987:2).</ref> और किसी फ़ंक्शन की गणना<ref>"an algorithm is a procedure for computing a ''function'' (with respect to some chosen notation for integers) ... this limitation (to numerical functions) results in no loss of generality", (Rogers 1987:1).</ref> करने के लिए औपचारिक भाषा<ref>Well defined with respect to the agent that executes the algorithm: "There is a computing agent, usually human, which can react to the instructions and carry out the computations" (Rogers 1987:2).</ref> के रूप में अच्छी तरह से परिभाषित किया जा सकता है।


प्रारंभिक स्थिति और प्रारंभिक इनपुट (शायद खाली)<ref>"An algorithm has [[zero]] or more inputs, i.e., [[Quantity|quantities]] which are given to it initially before the algorithm begins" (Knuth 1973:5).</ref> से शुरू हो रहा है, निर्देश एक गणना का वर्णन करते हैं कि, जब निष्पादित किया जाता है, तो अच्छी तरह से परिभाषित क्रमिक स्थिति की एक सीमित संख्या के माध्यम से आगे बढ़ता है,<ref>"A procedure which has all the characteristics of an algorithm except that it possibly lacks finiteness may be called a 'computational method{{'"}} (Knuth 1973:5).</ref> अंततः "आउटपुट" का उत्पादन<ref>"An algorithm has one or more outputs, i.e. quantities which have a specified relation to the inputs" (Knuth 1973:5).</ref> करना और अंतिम समाप्ति की स्थिति में समाप्त होना। एक स्थिति से दूसरी स्थिति में संक्रमण अनिवार्य रूप से नियतात्मक नहीं है; कुछ एल्गोरिदम, जिन्हें यादृच्छिक एल्गोरिदम के रूप में जाना जाता है, यादृच्छिक इनपुट को शामिल करते हैं।<ref>Whether or not a process with random interior processes (not including the input) is an algorithm is debatable. Rogers opines that: "a computation is carried out in a discrete stepwise fashion, without the use of continuous methods or analogue devices ... carried forward deterministically, without resort to random methods or devices, e.g., dice" (Rogers 1987:2).</ref>
प्रारंभिक स्थिति और प्रारंभिक इनपुट<ref>"An algorithm has [[zero]] or more inputs, i.e., [[Quantity|quantities]] which are given to it initially before the algorithm begins" (Knuth 1973:5).</ref> से शुरू हो रहा है, यहाँ निर्देश गणना का वर्णन करते हैं, जब निष्पादित किया जाता है, तो अच्छी तरह से परिभाषित क्रमिक स्थिति की एक सीमित संख्या के माध्यम से यह आगे बढ़ता है,<ref>"A procedure which has all the characteristics of an algorithm except that it possibly lacks finiteness may be called a 'computational method{{'"}} (Knuth 1973:5).</ref> अंततः "आउटपुट" प्राप्त<ref>"An algorithm has one or more outputs, i.e. quantities which have a specified relation to the inputs" (Knuth 1973:5).</ref> करना और अंतिम समाप्ति की स्थिति में यह समाप्त हो जाता हैं। एक स्थिति से दूसरी स्थिति में संक्रमण अनिवार्य रूप से नियतात्मक नहीं है; कुछ कलन विधि (एल्गोरिथ्म), जिन्हें यादृच्छिक कलन विधि (एल्गोरिथ्म) के रूप में जाना जाता है, वे यादृच्छिक इनपुट को शामिल करते हैं।<ref>Whether or not a process with random interior processes (not including the input) is an algorithm is debatable. Rogers opines that: "a computation is carried out in a discrete stepwise fashion, without the use of continuous methods or analogue devices ... carried forward deterministically, without resort to random methods or devices, e.g., dice" (Rogers 1987:2).</ref>


== इतिहास ==
== इतिहास ==
एल्गोरिथ्म की अवधारणा प्राचीन काल से मौजूद है। अंकगणितीय एल्गोरिदम, जैसे कि एक विभाजन एल्गोरिथ्म, का उपयोग प्राचीन बेबीलोन के गणितज्ञों द्वारा c. 2500 ईसा पूर्व और मिस्र के गणितज्ञों द्वारा c. 1550 ई.पू में किया गया था।<ref name="Springer Science & Business Media" /> ग्रीक गणितज्ञों ने बाद में 240 ईसा पूर्व में एराटोस्थनीज की छलनी में अभाज्य संख्याओं को खोजने के लिए एल्गोरिदम का इस्तेमाल किया, और यूक्लिडियन एल्गोरिथम ने दो संख्याओं में सबसे बड़ा सामान्य भाजक खोजने के लिए एल्गोरिदम का इस्तेमाल किया।<ref name="Cooke2005">{{cite book|last=Cooke|first=Roger L.|title=The History of Mathematics: A Brief Course|date=2005|publisher=John Wiley & Sons|isbn=978-1-118-46029-0}}</ref> 9वीं शताब्दी में अल-किंडी जैसे अरबी गणितज्ञों ने आवृत्ति विश्लेषण के आधार पर कोड-ब्रेकिंग के लिए क्रिप्टोग्राफ़िक एल्गोरिदम का उपयोग किया।<ref name="Dooley" />
कलन विधि (एल्गोरिथ्म) की अवधारणा प्राचीन काल से मौजूद है। अंकगणितीय कलन विधि (एल्गोरिथ्म), जैसे कि एक '''विभाजन कलन विधि (एल्गोरिथ्म)''', का उपयोग प्राचीन बेबीलोन के गणितज्ञों द्वारा c. 2500 ईसा पूर्व और मिस्र के गणितज्ञों द्वारा c. 1550 ई.पू में किया गया था।<ref name="Springer Science & Business Media">{{cite book |last1=Chabert |first1=Jean-Luc |title=A History of Algorithms: From the Pebble to the Microchip |date=2012 |publisher=Springer Science & Business Media |isbn=9783642181924 |pages=7–8}}</ref> ग्रीक गणितज्ञों ने बाद में 240 ईसा पूर्व में एराटोस्थनीज की छलनी में अभाज्य संख्याओं को खोजने के लिए कलन विधि (एल्गोरिथ्म) का इस्तेमाल किया, और '''यूक्लिडियन एल्गोरिथम''' ने दो संख्याओं में सबसे बड़ा सामान्य भाजक खोजने के लिए कलन विधि (एल्गोरिथ्म) का इस्तेमाल किया।<ref name="Cooke2005">{{cite book|last=Cooke|first=Roger L.|title=The History of Mathematics: A Brief Course|date=2005|publisher=John Wiley & Sons|isbn=978-1-118-46029-0}}</ref> 9वीं शताब्दी में अल-किंडी जैसे अरबी गणितज्ञों ने आवृत्ति विश्लेषण के आधार पर कोड-ब्रेकिंग के लिए क्रिप्टोग्राफ़िक कलन विधि (एल्गोरिथ्म) का उपयोग किया।<ref name="Dooley" />


एल्गोरिथम शब्द 9वीं शताब्दी के फारसी गणितज्ञ मुहम्मद इब्न मूसा अल-ख्वारिज्मी ([[Muhammad ibn Musa al-Khwarizmi|Muḥammad ibn Mūsā al-Khwārizmī]]) के नाम से लिया गया है। जिसका निस्बा ([[Nisba (suffix)|nisba]]) (ख़्वारज़्म ([[Khwarazm]]) से उसकी पहचान) को अल्गोरितमी (अरबी फ़ारसी ''([[Arabization|Arabized]] [[Persian language|Persian]])'' الخوارزمی c. 780-850) के रूप में लैटिनकृत किया गया था।<ref>{{cite web|title=Al-Khwarizmi biography|url=http://www-history.mcs.st-andrews.ac.uk/Biographies/Al-Khwarizmi.html|url-status=live|archive-url=https://web.archive.org/web/20190802091553/http://www-history.mcs.st-andrews.ac.uk/Biographies/Al-Khwarizmi.html|archive-date=August 2, 2019|access-date=May 3, 2017|website=www-history.mcs.st-andrews.ac.uk}}</ref><ref>{{cite web|title=Etymology of algorithm|url=http://chambers.co.uk/search/?query=algorithm&title=21st|url-status=live|archive-url=https://web.archive.org/web/20190331204600/https://chambers.co.uk/search/?query=algorithm&title=21st|archive-date=March 31, 2019|access-date=December 13, 2016|website=Chambers Dictionary}}</ref> मुहम्मद इब्न मूसा अल-ख्वारिज्मी एक गणितज्ञ, खगोलशास्त्री, भूगोलवेत्ता और बगदाद में हाउस ऑफ विजडम के विद्वान थे। जिनके नाम का अर्थ है 'ख़्वारज़्म का मूल निवासी', एक ऐसा क्षेत्र जो ग्रेटर ईरान का हिस्सा था और अब उज़्बेकिस्तान में है।<ref name="Hogendijk">{{cite journal|first=Jan P. |last=Hogendijk |title=al-Khwarzimi |journal=Pythagoras |volume=38 |issue=2 |year=1998 |pages=4–5 |url=http://www.kennislink.nl/web/show?id=116543 |url-status=dead |archive-url=https://web.archive.org/web/20090412193516/http://www.kennislink.nl/web/show?id=116543 |archive-date=April 12, 2009 }}</ref><ref name="Oaks">{{cite web|first=Jeffrey A.|last=Oaks|url=http://facstaff.uindy.edu/~oaks/MHMC.htm|title=Was al-Khwarizmi an applied algebraist?|publisher=[[University of Indianapolis]]|access-date=May 30, 2008|archive-url=https://web.archive.org/web/20110718094835/http://facstaff.uindy.edu/~oaks/MHMC.htm|archive-date=July 18, 2011|url-status=dead|df=mdy-all}}</ref>
एल्गोरिथम शब्द 9वीं शताब्दी के फारसी गणितज्ञ मुहम्मद इब्न मूसा अल-ख्वारिज्मी ([[Muhammad ibn Musa al-Khwarizmi|Muḥammad ibn Mūsā al-Khwārizmī]]) के नाम से लिया गया है। जिसका निस्बा ([[Nisba (suffix)|nisba]]) (ख़्वारज़्म ([[Khwarazm]]) से उसकी पहचान) को अल्गोरितमी (अरबी फ़ारसी ''([[Arabization|Arabized]] [[Persian language|Persian]])'' الخوارزمی c. 780-850) के रूप में लैटिनकृत किया गया था।<ref>{{cite web|title=Al-Khwarizmi biography|url=http://www-history.mcs.st-andrews.ac.uk/Biographies/Al-Khwarizmi.html|url-status=live|archive-url=https://web.archive.org/web/20190802091553/http://www-history.mcs.st-andrews.ac.uk/Biographies/Al-Khwarizmi.html|archive-date=August 2, 2019|access-date=May 3, 2017|website=www-history.mcs.st-andrews.ac.uk}}</ref><ref>{{cite web|title=Etymology of algorithm|url=http://chambers.co.uk/search/?query=algorithm&title=21st|url-status=live|archive-url=https://web.archive.org/web/20190331204600/https://chambers.co.uk/search/?query=algorithm&title=21st|archive-date=March 31, 2019|access-date=December 13, 2016|website=Chambers Dictionary}}</ref> मुहम्मद इब्न मूसा अल-ख्वारिज्मी एक गणितज्ञ, खगोलशास्त्री, भूगोलवेत्ता और बगदाद में हाउस ऑफ विजडम के विद्वान थे। जिनके नाम का अर्थ है 'ख़्वारज़्म का मूल निवासी', एक ऐसा क्षेत्र जो ग्रेटर ईरान का हिस्सा था और अब उज़्बेकिस्तान में है।<ref name="Hogendijk">{{cite journal|first=Jan P. |last=Hogendijk |title=al-Khwarzimi |journal=Pythagoras |volume=38 |issue=2 |year=1998 |pages=4–5 |url=http://www.kennislink.nl/web/show?id=116543 |url-status=dead |archive-url=https://web.archive.org/web/20090412193516/http://www.kennislink.nl/web/show?id=116543 |archive-date=April 12, 2009 }}</ref><ref name="Oaks">{{cite web|first=Jeffrey A.|last=Oaks|url=http://facstaff.uindy.edu/~oaks/MHMC.htm|title=Was al-Khwarizmi an applied algebraist?|publisher=[[University of Indianapolis]]|access-date=May 30, 2008|archive-url=https://web.archive.org/web/20110718094835/http://facstaff.uindy.edu/~oaks/MHMC.htm|archive-date=July 18, 2011|url-status=dead|df=mdy-all}}</ref>


825 के आसपास, अल-ख्वारिज्मी ने हिंदू-अरबी अंक प्रणाली पर एक अरबी भाषा का ग्रंथ लिखा, जिसका 12वीं शताब्दी के दौरान लैटिन में अनुवाद किया गया था। पांडुलिपि दीक्षित अल्गोरिज्मी ('इस प्रकार अल-ख्वारिज्मी बोले') वाक्यांश से शुरू होती है, जहां "एलगोरिज़मी (Algorizmi)" अल-ख्वारिज्मी के नाम का अनुवादक का लैटिनकरण था।<ref>{{cite book| last = Brezina| first = Corona| title = Al-Khwarizmi: The Inventor Of Algebra| url = https://books.google.com/books?id=955jPgAACAAJ| year = 2006| publisher = The Rosen Publishing Group| isbn = 978-1-4042-0513-0 }}</ref> मध्य युग के अंत में अल-ख्वारिज्मी यूरोप में सबसे अधिक पढ़ा जाने वाला गणितज्ञ था, मुख्य रूप से उनकी एक अन्य पुस्तक, बीजगणित<ref>[http://www-history.mcs.st-and.ac.uk/Extras/Boyer_Foremost_Text.html Foremost mathematical texts in history] {{Webarchive|url=https://web.archive.org/web/20110609224820/http://www-history.mcs.st-and.ac.uk/Extras/Boyer_Foremost_Text.html |date=June 9, 2011 }}, according to [[Carl B. Boyer]].</ref> थी। जिसका अर्थ मध्ययुगीन लैटिन में, अल्गोरिस्मस, अंग्रेजी 'एल्गोरिज्म', उनके नाम का भ्रष्टाचार, बस "दशमलव संख्या प्रणाली" का अर्थ था।<ref>{{Citation|title=algorismic|url=https://www.thefreedictionary.com/algorismic|work=The Free Dictionary|access-date=2019-11-14|archive-url=https://web.archive.org/web/20191221200124/https://www.thefreedictionary.com/algorismic|archive-date=December 21, 2019|url-status=live}}</ref> 15वीं शताब्दी में, ग्रीक शब्द ऐरिस्थमोस (ἀριθμός-arithmos), 'नंबर' ('अंकगणित') के प्रभाव में, लैटिन शब्द को एल्गोरिथम में बदल दिया गया था, और इसके साथ अंग्रेजी शब्द 'एल्गोरिदम' पहली बार 17वीं शताब्दी में प्रमाणित हुआ; तथा इस प्रकार आधुनिक अर्थ 19वीं सदी में पेश किया गया था।<ref>''[[Oxford English Dictionary]]'', Third Edition, 2012 [http://www.oed.com/view/Entry/4959 ''s.v.'']</ref>
825 के आसपास, अल-ख्वारिज्मी ने हिंदू-अरबी अंक प्रणाली पर एक अरबी भाषा का ग्रंथ लिखा, जिसका 12वीं शताब्दी के दौरान लैटिन में अनुवाद किया गया था। पांडुलिपि दीक्षित अल्गोरिज्मी ('इस प्रकार अल-ख्वारिज्मी बोले') वाक्यांश से शुरू होती है, जहां "एलगोरिज़मी (Algorizmi)" अल-ख्वारिज्मी के नाम का अनुवादक का लैटिनकरण था।<ref>{{cite book| last = Brezina| first = Corona| title = Al-Khwarizmi: The Inventor Of Algebra| url = https://books.google.com/books?id=955jPgAACAAJ| year = 2006| publisher = The Rosen Publishing Group| isbn = 978-1-4042-0513-0 }}</ref> मध्य युग के अंत में अल-ख्वारिज्मी यूरोप में सबसे अधिक पढ़ा जाने वाला गणितज्ञ था, मुख्य रूप से उनकी एक अन्य पुस्तक, बीजगणित<ref>[http://www-history.mcs.st-and.ac.uk/Extras/Boyer_Foremost_Text.html Foremost mathematical texts in history] {{Webarchive|url=https://web.archive.org/web/20110609224820/http://www-history.mcs.st-and.ac.uk/Extras/Boyer_Foremost_Text.html |date=June 9, 2011 }}, according to [[Carl B. Boyer]].</ref> थी। जिसका अर्थ मध्ययुगीन लैटिन में, अल्गोरिस्मस, अंग्रेजी 'एल्गोरिज्म', उनके नाम का भ्रष्टाचार, बस "दशमलव संख्या प्रणाली" का अर्थ था।<ref>{{Citation|title=algorismic|url=https://www.thefreedictionary.com/algorismic|work=The Free Dictionary|access-date=2019-11-14|archive-url=https://web.archive.org/web/20191221200124/https://www.thefreedictionary.com/algorismic|archive-date=December 21, 2019|url-status=live}}</ref> 15वीं शताब्दी में, ग्रीक शब्द ऐरिस्थमोस (ἀριθμός-arithmos), 'नंबर' ('अंकगणित') के प्रभाव में, लैटिन शब्द को एल्गोरिथम में बदल दिया गया था, और इसके साथ अंग्रेजी शब्द 'कलन विधि (एल्गोरिथ्म)' पहली बार 17वीं शताब्दी में प्रमाणित हुआ; तथा इस प्रकार आधुनिक अर्थ 19वीं सदी में पेश किया गया था।<ref>''[[Oxford English Dictionary]]'', Third Edition, 2012 [http://www.oed.com/view/Entry/4959 ''s.v.'']</ref>


भारतीय गणित मुख्यतः एल्गोरिथम था। एल्गोरिदम जो भारतीय गणितीय परंपरा के प्रतिनिधि हैं, प्राचीन '''सुल्बसूत्रों''' से लेकर केरल स्कूल के मध्यकालीन ग्रंथों तक हैं।<ref>{{cite book |last1=Sriram |first1=M. S. |editor1-last=Emch |editor1-first=Gerard G. |editor2-last=Sridharan |editor2-first=R. |editor3-last=Srinivas |editor3-first=M. D. |title=Contributions to the History of Indian Mathematics |date=2005 |publisher=Springer |isbn=978-93-86279-25-5 |page=153 |chapter-url=https://books.google.com/books?id=qfJdDwAAQBAJ&pg=PA153 |language=en |chapter=Algorithms in Indian Mathematics}}</ref>
भारतीय गणित मुख्यतः एल्गोरिथम था। कलन विधि (एल्गोरिथ्म) जो भारतीय गणितीय परंपरा के प्रतिनिधि हैं, प्राचीन '''''शुलबसूत्रों'''''  से लेकर केरल स्कूल के मध्यकालीन ग्रंथों तक हैं।<ref>{{cite book |last1=Sriram |first1=M. S. |editor1-last=Emch |editor1-first=Gerard G. |editor2-last=Sridharan |editor2-first=R. |editor3-last=Srinivas |editor3-first=M. D. |title=Contributions to the History of Indian Mathematics |date=2005 |publisher=Springer |isbn=978-93-86279-25-5 |page=153 |chapter-url=https://books.google.com/books?id=qfJdDwAAQBAJ&pg=PA153 |language=en |chapter=Algorithms in Indian Mathematics}}</ref>


अंग्रेजी में एल्गोरिथम शब्द का प्रयोग सबसे पहले लगभग 1230 में और फिर चौसर ने 1391 में किया था। अंग्रेजी ने फ्रांसीसी शब्द को अपनाया, लेकिन 19वीं शताब्दी के अंत तक "एल्गोरिदम" का अर्थ आधुनिक अंग्रेजी में नहीं था।<ref>{{Cite journal|last=Mehri|first=Bahman|date=2017|title=From Al-Khwarizmi to Algorithm|journal=Olympiads in Informatics|volume=11|issue=2|pages=71–74|doi=10.15388/ioi.2017.special.11}}</ref>
अंग्रेजी में कलन विधि (एल्गोरिथम) शब्द का प्रयोग सबसे पहले लगभग 1230 में और फिर चौसर ने 1391 में किया था। अंग्रेजी ने फ्रांसीसी शब्द को अपनाया, लेकिन 19वीं शताब्दी के अंत तक "कलन विधि (एल्गोरिथ्म)" का अर्थ आधुनिक अंग्रेजी में नहीं था।<ref>{{Cite journal|last=Mehri|first=Bahman|date=2017|title=From Al-Khwarizmi to Algorithm|journal=Olympiads in Informatics|volume=11|issue=2|pages=71–74|doi=10.15388/ioi.2017.special.11}}</ref>


शब्द का एक और प्रारंभिक उपयोग 1240 से है, एक मैनुअल में जिसका नाम कारमेन डी अल्गोरिस्मो है, जिसे अलेक्जेंड्रे डी विलेडियू द्वारा रचित किया गया है। इसके साथ शुरू होता है:{{blockquote|''Haec algorismus ars praesens dicitur, in qua / Talibus Indorum fruimur bis quinque figuris.''}}
शब्द का एक और प्रारंभिक उपयोग 1240 से है, एक मैनुअल में जिसका नाम कारमेन डी अल्गोरिस्मो है, जिसे अलेक्जेंड्रे डी विलेडियू द्वारा रचित किया गया है। इसके साथ शुरू होता है:{{blockquote|"इस एल्गोरिथम को वर्तमान कला कहा जाता है, जिसमें / हम ऐसे भारतीयों का आनंद लेते हैं जिनके पास दो बार पांच अंक हैं।"}}
जो अनुवाद करता है:
जो अनुवाद करता है:
{{blockquote|Algorism is the art by which at present we use those Indian figures, which number two times five.}}
{{blockquote|कलन विधि (एल्गोरिथम) वह कला है जिसके द्वारा वर्तमान में हम उन भारतीय आकृतियों का उपयोग करते हैं, जिनकी संख्या दो गुणा पांच है।}}
कविता कुछ सौ पंक्तियों की लंबी है और नए स्टाइल वाले भारतीय पासे (ताली इंडोरम), या हिंदू अंकों के साथ गणना करने की कला को सारांशित करती है।<ref>{{Cite web|url=http://members.peak.org/~jeremy/calculators/alKwarizmi.html|title=Abu Jafar Muhammad ibn Musa al-Khwarizmi|website=members.peak.org|access-date=2019-11-14|archive-url=https://web.archive.org/web/20190821232118/http://members.peak.org/~jeremy/calculators/alKwarizmi.html|archive-date=August 21, 2019|url-status=live}}</ref>
कविता कुछ सौ पंक्तियों की लंबी है और नए स्टाइल वाले भारतीय पासे (ताली इंडोरम), या हिंदू अंकों के साथ गणना करने की कला को सारांशित करती है।<ref>{{Cite web|url=http://members.peak.org/~jeremy/calculators/alKwarizmi.html|title=Abu Jafar Muhammad ibn Musa al-Khwarizmi|website=members.peak.org|access-date=2019-11-14|archive-url=https://web.archive.org/web/20190821232118/http://members.peak.org/~jeremy/calculators/alKwarizmi.html|archive-date=August 21, 2019|url-status=live}}</ref>


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


== अनौपचारिक परिभाषा ==
== अनौपचारिक परिभाषा ==
एक अनौपचारिक परिभाषा हो सकती है "नियमों का एक सेट जो संचालन के अनुक्रम को सटीक रूप से परिभाषित करता है",<ref>Stone 1973:4</ref>{{qn | reason = Stone (1972) suggests on page 4: "...any sequence of instructions that can be obeyed by a robot, is called an algorithm"|date=July 2020}} जिसमें सभी कंप्यूटर प्रोग्राम शामिल होंगे (कार्यक्रमों सहित जो संख्यात्मक गणना नहीं करते हैं), और (उदाहरण के लिए) कोई निर्धारित नौकरशाही प्रक्रिया<ref>
'''अनौपचारिक परिभाषा''' कुछ इस प्रकार हो सकती है- "नियमों का एक सेट जो संचालन के अनुक्रम को सटीक रूप से परिभाषित करता है",<ref>Stone 1973:4</ref>{{qn | reason = Stone (1972) suggests on page 4: "...any sequence of instructions that can be obeyed by a robot, is called an algorithm"|date=July 2020}} जिसमें सभी कंप्यूटर प्रोग्राम शामिल होंगे (कार्यक्रमों सहित जो संख्यात्मक गणना नहीं करते हैं), और (उदाहरण के लिए) कोई निर्धारित नौकरशाही प्रक्रिया<ref>
{{cite book
{{cite book
  | last1 = Simanowski
  | last1 = Simanowski
Line 55: Line 55:
  | url-status = live
  | url-status = live
  }}
  }}
</ref> या कुक बुक रेसिपी।<ref>
</ref> या कुक बुक रेसिपी इसके एक उदाहरण हो सकते हैं।<ref>
{{cite book
{{cite book
  | last1 = Dietrich
  | last1 = Dietrich
Line 80: Line 80:
सामान्य तौर पर, एक प्रोग्राम केवल एक एल्गोरिथम होता है यदि यह अंततः बंद हो जाता है।<ref>Stone simply requires that "it must terminate in a finite number of steps" (Stone 1973:7–8).</ref>
सामान्य तौर पर, एक प्रोग्राम केवल एक एल्गोरिथम होता है यदि यह अंततः बंद हो जाता है।<ref>Stone simply requires that "it must terminate in a finite number of steps" (Stone 1973:7–8).</ref>


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


बूलोस, जेफरी  और 1974, 1999 ({{Harvtxt|Boolos|Jeffrey|1974, 1999|ref=CITEREFBoolosJeffrey1999}}) निम्नलिखित उद्धरण में "एल्गोरिदम" शब्द का अनौपचारिक अर्थ प्रदान करते हैं: निम्नलिखित उद्धरण में शब्द एल्गोरिथ्म का एक अनौपचारिक अर्थ प्रदान करें:
बूलोस, जेफरी  और 1974, 1999 ({{Harvtxt|Boolos|Jeffrey|1974, 1999|ref=CITEREFBoolosJeffrey1999}}) निम्नलिखित उद्धरण में "कलन विधि (एल्गोरिथ्म)" शब्द का अनौपचारिक अर्थ प्रदान करते हैं: निम्नलिखित उद्धरण में शब्द कलन विधि (एल्गोरिथ्म) का एक अनौपचारिक अर्थ प्रदान करें:


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


एक "एन्यूमेरिकली इनफिनिट सेट" वह है जिसके तत्वों को पूर्णांकों के साथ एक से एक पत्राचार में रखा जा सकता है। इस प्रकार बूलोस और जेफरी कह रहे हैं कि एक एल्गोरिथ्म एक प्रक्रिया के लिए निर्देश का तात्पर्य है कि एक मनमाना "इनपुट" पूर्णांक या पूर्णांकों से "आउटपुट पूर्णांक" बनाता है, जो सिद्धांत रूप में, मनमाने ढंग से बड़े हो सकते हैं। उदाहरण के लिए, एक एल्गोरिथम एक बीजीय समीकरण हो सकता है जैसे कि y = m + n (यानी, दो मनमाना "इनपुट चर" m और n जो आउटपुट y उत्पन्न करते हैं), लेकिन इस धारणा को परिभाषित करने के लिए विभिन्न लेखकों के प्रयासों से संकेत मिलता है कि इस शब्द का अर्थ इससे कहीं अधिक है, कुछ के क्रम में (अतिरिक्त उदाहरण के लिए):
एक "'''संख्या की दृष्टि से अनंत स्थिति (एन्यूमेरिकली इनफिनिट सेट)'''" वह है जिसके तत्वों को पूर्णांकों के साथ एक से एक पत्राचार में रखा जा सकता है। इस प्रकार बूलोस और जेफरी कह रहे हैं कि एक कलन विधि (एल्गोरिथ्म) एक प्रक्रिया के लिए निर्देश का तात्पर्य है कि एक मनमाना "इनपुट" पूर्णांक या पूर्णांकों से "आउटपुट पूर्णांक" बनाता है, जो सिद्धांत रूप में, मनमाने ढंग से बड़े हो सकते हैं। उदाहरण के लिए, एक एल्गोरिथम एक बीजीय समीकरण हो सकता है,
: एक तेज़, कुशल, "अच्छी" प्रक्रिया के लिए<ref>Knuth 1973:7 states: "In practice we not only want algorithms, we want ''good'' algorithms ... one criterion of goodness is the length of time taken to perform the algorithm ... other criteria are the adaptability of the algorithm to computers, its simplicity, and elegance, etc."</ref> सटीक निर्देश ("कंप्यूटर" द्वारा समझी जाने वाली भाषा में)<ref>cf Stone 1972:5</ref> जो "कंप्यूटर" की "चाल" (मशीन या मानव, आवश्यक आंतरिक रूप से निहित जानकारी और क्षमताओं से लैस)<ref>cf Stone 1973:6</ref> को खोजने, डिकोड करने के लिए निर्दिष्ट करता है,और फिर मनमाने ढंग से इनपुट पूर्णांक/प्रतीक m और n, प्रतीकों + और = ... और "प्रभावी रूप से"<ref>
 
जैसे कि   '''y = m + n''' (यानी, दो मनमाना "इनपुट चर (वैरिएबल)" m और n जो आउटपुट y उत्पन्न करते हैं)
 
लेकिन इस धारणा को परिभाषित करने के लिए विभिन्न लेखकों के प्रयासों से संकेत मिलता है कि इस शब्द का अर्थ इससे कहीं अधिक है, कुछ के क्रम में (अतिरिक्त उदाहरण के लिए):
: एक तेज़, कुशल, "अच्छी" प्रक्रिया के लिए<ref>Knuth 1973:7 states: "In practice we not only want algorithms, we want ''good'' algorithms ... one criterion of goodness is the length of time taken to perform the algorithm ... other criteria are the adaptability of the algorithm to computers, its simplicity, and elegance, etc."</ref> सटीक निर्देश ("कंप्यूटर" द्वारा समझी जाने वाली भाषा में)<ref>cf Stone 1972:5</ref> जो "कंप्यूटर" की "चाल" (मशीन या मानव, आवश्यक आंतरिक रूप से निहित जानकारी और क्षमताओं से लैस)<ref>cf Stone 1973:6</ref> को खोजने, डिकोड करने के लिए निर्दिष्ट करता है,और फिर अपनी तरह इनपुट पूर्णांक/प्रतीक m और n, प्रतीकों + और = ... और "प्रभावी रूप से"<ref>
Stone 1973:7–8 states that there must be, "...a procedure that a robot [i.e., computer] can follow in order to determine precisely how to obey the instruction". Stone adds finiteness of the process, and definiteness (having no ambiguity in the instructions) to this definition.
Stone 1973:7–8 states that there must be, "...a procedure that a robot [i.e., computer] can follow in order to determine precisely how to obey the instruction". Stone adds finiteness of the process, and definiteness (having no ambiguity in the instructions) to this definition.
</ref> उत्पादन, "उचित" समय में,<ref>Knuth, loc. cit</ref> आउटपुट-पूर्णांक y को एक निर्दिष्ट स्थान पर और एक निर्दिष्ट प्रारूप में संसाधित करें।
</ref> उत्पादन, "उचित" समय में,<ref>Knuth, loc. cit</ref> आउटपुट-पूर्णांक y को एक निर्दिष्ट स्थान पर और एक निर्दिष्ट प्रारूप में संसाधित करता हैं।


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


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


== औपचारिककरण ==
== औपचारिककरण ==
कंप्यूटर डेटा को संसाधित करने के तरीके के लिए एल्गोरिदम आवश्यक हैं। कई कंप्यूटर प्रोग्राम में एल्गोरिदम होते हैं उस विशिष्ट निर्देश का विवरण जो एक कंप्यूटर को एक निर्दिष्ट कार्य को करने के लिए एक विशिष्ट क्रम में करना चाहिए, जैसे कर्मचारियों की तनख्वाह की गणना करना या छात्रों के रिपोर्ट कार्ड को प्रिंट करना। इस प्रकार, एक एल्गोरिदम को संचालन के किसी भी अनुक्रम के रूप में माना जा सकता है जिसे ट्यूरिंग पूर्ण सिस्टम द्वारा अनुकरण किया जा सकता है। इस थीसिस पर जोर देने वाले लेखकों में मिन्स्की (1967), सैवेज (1987) और गुरेविच (2000) शामिल हैं:
कंप्यूटर डेटा को संसाधित करने के तरीके के लिए कलन विधि (एल्गोरिथ्म) आवश्यक हैं। कई कंप्यूटर प्रोग्राम में कलन विधि (एल्गोरिथ्म) होते हैं उस विशिष्ट निर्देश का विवरण जो एक कंप्यूटर को एक निर्दिष्ट कार्य को करने के लिए एक विशिष्ट क्रम में करना चाहिए, जैसे कर्मचारियों की तनख्वाह की गणना करना या छात्रों के रिपोर्ट कार्ड को प्रिंट करना। इस प्रकार, एक कलन विधि (एल्गोरिथ्म) को संचालन के किसी भी अनुक्रम के रूप में माना जा सकता है जिसे ट्यूरिंग पूर्ण सिस्टम द्वारा अनुकरण किया जा सकता है। इस थीसिस पर जोर देने वाले लेखकों में मिन्स्की (1967), सैवेज (1987) और गुरेविच (2000) शामिल हैं:
<Blockquote> मिन्स्की: "लेकिन हम ट्यूरिंग के साथ भी बनाए रखेंगे" कि कोई भी प्रक्रिया जिसे "स्वाभाविक रूप से" प्रभावी कहा जा सकता है, वास्तव में एक (सरल) मशीन द्वारा महसूस की जा सकती है। हालांकि यह अतिवादी लग सकता है, इसके पक्ष में तर्कों का खंडन करना कठिन है"।<ref name="Minsky 1967:105">{{harvnb|Minsky|1967|page=105}}</ref> गुरेविच: "... ट्यूरिंग की थीसिस के पक्ष में अनौपचारिक तर्क एक मजबूत थीसिस को सही ठहराता है: सैवेज [1987] के अनुसार प्रत्येक एल्गोरिदम को ट्यूरिंग मशीन द्वारा अनुकरण किया जा सकता है, एक एल्गोरिदम एक ट्यूरिंग मशीन द्वारा परिभाषित एक कम्प्यूटेशनल प्रक्रिया है"<ref>Gurevich 2000:1, 3</ref></blockquote> ट्यूरिंग मशीनें कम्प्यूटेशनल प्रक्रियाओं को परिभाषित कर सकती हैं जो समाप्त नहीं होती हैं। एल्गोरिदम की अनौपचारिक परिभाषाओं के लिए आमतौर पर यह आवश्यक होता है कि एल्गोरिथम हमेशा समाप्त हो। यह आवश्यकता यह तय करने के कार्य को प्रस्तुत करती है कि क्या औपचारिक प्रक्रिया एक एल्गोरिथ्म है जो सामान्य मामले में असंभव है क्योंकि कम्प्यूटेबिलिटी सिद्धांत के एक प्रमुख प्रमेय को हॉल्टिंग समस्या के रूप में जाना जाता है।
<Blockquote> मिन्स्की: "लेकिन हम ट्यूरिंग के साथ भी बनाए रखेंगे" कि कोई भी प्रक्रिया जिसे "स्वाभाविक रूप से" प्रभावी कहा जा सकता है, वास्तव में एक (सरल) मशीन द्वारा महसूस की जा सकती है। हालांकि यह अतिवादी लग सकता है, इसके पक्ष में तर्कों का खंडन करना कठिन है"।<ref name="Minsky 1967:105">{{harvnb|Minsky|1967|page=105}}</ref> गुरेविच: "... ट्यूरिंग की थीसिस के पक्ष में अनौपचारिक तर्क एक मजबूत थीसिस को सही ठहराता है: सैवेज [1987] के अनुसार प्रत्येक कलन विधि (एल्गोरिथ्म) को ट्यूरिंग मशीन द्वारा अनुकरण किया जा सकता है, एक कलन विधि (एल्गोरिथ्म) एक ट्यूरिंग मशीन द्वारा परिभाषित एक कम्प्यूटेशनल प्रक्रिया है।"<ref>Gurevich 2000:1, 3</ref></blockquote> ट्यूरिंग मशीनें कम्प्यूटेशनल प्रक्रियाओं को परिभाषित कर सकती हैं जो समाप्त नहीं होती हैं। कलन विधि (एल्गोरिथ्म) की अनौपचारिक परिभाषाओं के लिए आमतौर पर यह आवश्यक होता है कि एल्गोरिथम हमेशा समाप्त हो। यह आवश्यकता यह तय करने के कार्य को प्रस्तुत करती है कि क्या औपचारिक प्रक्रिया एक कलन विधि (एल्गोरिथ्म) है जो सामान्य मामले में असंभव है क्योंकि कम्प्यूटेबिलिटी सिद्धांत के एक प्रमुख प्रमेय को हॉल्टिंग समस्या के रूप में जाना जाता है।


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


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


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


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


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


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


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


एल्गोरिदम के प्रतिनिधित्व को ट्यूरिंग मशीन विवरण के तीन स्वीकृत स्तरों में वर्गीकृत किया जा सकता है, जो निम्नानुसार है:<ref>Sipser 2006:157</ref>
कलन विधि (एल्गोरिथ्म) के प्रतिनिधित्व को '''ट्यूरिंग मशीन''' विवरण के तीन स्वीकृत स्तरों में वर्गीकृत किया जा सकता है, जो निम्नानुसार है:<ref>Sipser 2006:157</ref>


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


एल्गोरिथम डिज़ाइन समस्या समाधान और इंजीनियरिंग एल्गोरिदम के लिए एक विधि या गणितीय प्रक्रिया को संदर्भित करता है। एल्गोरिदम का डिज़ाइन ऑपरेशन अनुसंधान के कई समाधान सिद्धांतों का हिस्सा है, जैसे गतिशील प्रोग्रामिंग और फूट डालो और जीतो। एल्गोरिथम डिज़ाइनों को डिज़ाइन करने और कार्यान्वित करने की तकनीकों को एल्गोरिथम डिज़ाइन पैटर्न भी कहा जाता है,<ref>{{citation|url=http://ww3.algorithmdesign.net/ch00-front.html|title=Algorithm Design: Foundations, Analysis, and Internet Examples|last1=Goodrich|first1=Michael T.|author1-link=Michael T. Goodrich|last2=Tamassia|first2=Roberto|author2-link=Roberto Tamassia|publisher=John Wiley & Sons, Inc.|year=2002|isbn=978-0-471-38365-9|access-date=June 14, 2018|archive-url=https://web.archive.org/web/20150428201622/http://ww3.algorithmdesign.net/ch00-front.html|archive-date=April 28, 2015|url-status=live}}</ref> जिसमें टेम्पलेट विधि पैटर्न और डेकोरेटर पैटर्न शामिल हैं।
कलन विधि (एल्गोरिथ्म) डिज़ाइन समस्या समाधान और इंजीनियरिंग कलन विधि (एल्गोरिथ्म) के लिए एक विधि या गणितीय प्रक्रिया को संदर्भित करता है। कलन विधि (एल्गोरिथ्म) का डिज़ाइन ऑपरेशन अनुसंधान के कई समाधान सिद्धांतों का हिस्सा है, जैसे गतिशील प्रोग्रामिंग और फूट डालो और जीतो। एल्गोरिथम डिज़ाइनों को डिज़ाइन करने और कार्यान्वित करने की तकनीकों को एल्गोरिथम डिज़ाइन पैटर्न भी कहा जाता है,<ref>{{citation|url=http://ww3.algorithmdesign.net/ch00-front.html|title=Algorithm Design: Foundations, Analysis, and Internet Examples|last1=Goodrich|first1=Michael T.|author1-link=Michael T. Goodrich|last2=Tamassia|first2=Roberto|author2-link=Roberto Tamassia|publisher=John Wiley & Sons, Inc.|year=2002|isbn=978-0-471-38365-9|access-date=June 14, 2018|archive-url=https://web.archive.org/web/20150428201622/http://ww3.algorithmdesign.net/ch00-front.html|archive-date=April 28, 2015|url-status=live}}</ref> जिसमें टेम्पलेट विधि पैटर्न और डेकोरेटर पैटर्न शामिल हैं।


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


एल्गोरिदम के विकास में विशिष्ट कदम:
कलन विधि (एल्गोरिथ्म) के विकास में विशिष्ट कदम:
# समस्या की परिभाषा
# समस्या की परिभाषा
# एक मॉडल का विकास
# एक मॉडल का विकास
# एल्गोरिथ्म का विनिर्देशन
# कलन विधि (एल्गोरिथ्म) का विनिर्देशन
# एक एल्गोरिथ्म डिजाइन करना
# एक कलन विधि (एल्गोरिथ्म) डिजाइन करना
# एल्गोरिथ्म की शुद्धता की जाँच करना
# कलन विधि (एल्गोरिथ्म) की शुद्धता की जाँच करना
# एल्गोरिथ्म का विश्लेषण
# कलन विधि (एल्गोरिथ्म) का विश्लेषण
# एल्गोरिथ्म का कार्यान्वयन
# कलन विधि (एल्गोरिथ्म) का कार्यान्वयन
# कार्यक्रम परीक्षण
# कार्यक्रम परीक्षण
# प्रलेखन तैयारी{{clarify|reason=These steps are typically used in every day *software* development. In contrast, coming up with a new *algorithm* requires some ingenuity, and often lead(s) to a research article in a computer science journal; it can hardly be broken down into receipt-like steps.|date=December 2020}}
# प्रलेखन तैयारी{{clarify|reason=These steps are typically used in every day *software* development. In contrast, coming up with a new *algorithm* requires some ingenuity, and often lead(s) to a research article in a computer science journal; it can hardly be broken down into receipt-like steps.|date=December 2020}}


== कंप्यूटर एल्गोरिदम ==
== कंप्यूटर कलन विधि (एल्गोरिथ्म) ==
[[Image:TTL npn nand.svg|right|thumb|तार्किक नंद एल्गोरिथ्म इलेक्ट्रॉनिक रूप से 7400 श्रृंखलाओं में लागू किया गया | 7400 चिप]]
[[Image:TTL npn nand.svg|right|thumb|तार्किक नंद एल्गोरिथ्म इलेक्ट्रॉनिक रूप से 7400 श्रृंखलाओं में लागू किया गया | 7400 चिप]]
[[File:Euclid's algorithm structured blocks 1.png|thumb|कैनोनिकल बोहम-जैकोपिनी संरचनाओं के फ्लोचार्ट उदाहरण: अनुक्रम (पृष्ठ को नीचे उतरने वाले आयताकार), जबकि-डू और इफ-तब-एल्स।तीन संरचनाएं आदिम सशर्त गोटो से बनी हैं ({{code|1=IF test THEN GOTO step xxx}}, हीरे के रूप में दिखाया गया है), बिना शर्त गोटो (आयत), विभिन्न असाइनमेंट ऑपरेटर (आयत), और पड़ाव (आयत)।असाइनमेंट-ब्लॉक के अंदर इन संरचनाओं के घोंसले के कारण जटिल आरेख (cf. Tausworthe 1977: 100, 114) होते हैं।]]
[[File:Euclid's algorithm structured blocks 1.png|thumb|कैनोनिकल बोहम-जैकोपिनी संरचनाओं के फ्लोचार्ट उदाहरण: अनुक्रम (पृष्ठ को नीचे उतरने वाले आयताकार), जबकि-डू और इफ-तब-एल्स।तीन संरचनाएं आदिम सशर्त गोटो से बनी हैं ({{code|1=IF test THEN GOTO step xxx}}, हीरे के रूप में दिखाया गया है), बिना शर्त गोटो (आयत), विभिन्न असाइनमेंट ऑपरेटर (आयत), और पड़ाव (आयत)।असाइनमेंट-ब्लॉक के अंदर इन संरचनाओं के घोंसले के कारण जटिल आरेख (सीऍफ़ (cf) टॉउसवर्थ (Tausworthe) 1977: 100, 114) होते हैं।]]
"सुरुचिपूर्ण" (कॉम्पैक्ट) कार्यक्रम, "अच्छा" (तेज़) कार्यक्रम : "सादगी और लालित्य" की धारणा अनौपचारिक रूप से नुथ में और ठीक चैतिन में प्रकट होती है:
"सुरुचिपूर्ण" (कॉम्पैक्ट) कार्यक्रम, "अच्छा" (तेज़) कार्यक्रम : "सादगी और लालित्य" की धारणा अनौपचारिक रूप से नुथ में और ठीक चैतिन में प्रकट होती है:


नुथ: "... हम कुछ शिथिल परिभाषित सौंदर्य बोध में अच्छे एल्गोरिदम चाहते हैं। एक मानदंड ... एल्गोरिथम को निष्पादित करने में लगने वाले समय की लंबाई है ....अन्य मानदंड कंप्यूटर के लिए एल्गोरिदम की अनुकूलन क्षमता, इसकी सादगी और लालित्य, आदि हैं।"<ref>Knuth 1973:7</ref>
नुथ: "... हम कुछ शिथिल परिभाषित सौंदर्य बोध में अच्छे कलन विधि (एल्गोरिथ्म) चाहते हैं। एक मानदंड ... एल्गोरिथम को निष्पादित करने में लगने वाले समय की लंबाई है ....अन्य मानदंड कंप्यूटर के लिए कलन विधि (एल्गोरिथ्म) की अनुकूलन क्षमता, इसकी सादगी और लालित्य, आदि हैं।"<ref>Knuth 1973:7</ref>
: चैतिन: "... एक कार्यक्रम 'सुरुचिपूर्ण' है, जिसके द्वारा मेरा मतलब है कि यह आउटपुट के उत्पादन के लिए सबसे छोटा संभव कार्यक्रम है जो यह करता है"<ref>Chaitin 2005:32</ref>
: चैतिन: "... एक कार्यक्रम 'सुरुचिपूर्ण' है, जिसके द्वारा मेरा मतलब है कि यह आउटपुट के उत्पादन के लिए सबसे छोटा संभव कार्यक्रम है जो यह करता है"<ref>Chaitin 2005:32</ref>


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


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


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


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


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


एक कंप्यूटर (या मानव "कंप्यूटर"<ref>In his essay "Calculations by Man and Machine: Conceptual Analysis" Seig 2002:390 credits this distinction to Robin Gandy, cf Wilfred Seig, et al., 2002 ''Reflections on the foundations of mathematics: Essays in honor of Solomon Feferman'', Association for Symbolic Logic, A.K. Peters Ltd, Natick, MA.</ref>) एक प्रतिबंधित प्रकार की मशीन है, एक "असतत नियतात्मक यांत्रिक उपकरण"<ref>cf Gandy 1980:126, Robin Gandy ''Church's Thesis and Principles for Mechanisms'' appearing on pp. 123–148 in [[Jon Barwise|J. Barwise]] et al. 1980 ''The Kleene Symposium'', North-Holland Publishing Company.</ref> जो आँख बंद करके उसके निर्देशों का पालन करता है।<ref>A "robot": "A computer is a robot that performs any task that can be described as a sequence of instructions." cf Stone 1972:3</ref> मेल्ज़ाक और लैंबेक के आदिम मॉडल<ref>Lambek's "abacus" is a "countably infinite number of locations (holes, wires etc.) together with an unlimited supply of counters (pebbles, beads, etc.). The locations are distinguishable, the counters are not". The holes have unlimited capacity, and standing by is an agent who understands and is able to carry out the list of instructions" (Lambek 1961:295). Lambek references Melzak who defines his Q-machine as "an indefinitely large number of locations ... an indefinitely large supply of counters distributed among these locations, a program, and an operator whose sole purpose is to carry out the program" (Melzak 1961:283). B-B-J (loc. cit.) add the stipulation that the holes are "capable of holding any number of stones" (p. 46). Both Melzak and Lambek appear in ''The [[Canadian Mathematical Bulletin]]'', vol. 4, no. 3, September 1961.</ref> ने इस धारणा को चार तत्वों तक कम कर दिया: (i) असतत, अलग-अलग स्थान (ii) असतत, अप्रभेद्य काउंटर<ref>If no confusion results, the word "counters" can be dropped, and a location can be said to contain a single "number".</ref> (iii) एक एजेंट, और (iv) निर्देशों की एक सूची जो एजेंट की क्षमता के सापेक्ष प्रभावी है।<ref>"We say that an instruction is ''effective'' if there is a procedure that the robot can follow in order to determine precisely how to obey the instruction." (Stone 1972:6)</ref>
एक कंप्यूटर (या मानव "कंप्यूटर"<ref>In his essay "Calculations by Man and Machine: Conceptual Analysis" Seig 2002:390 credits this distinction to Robin Gandy, cf Wilfred Seig, et al., 2002 ''Reflections on the foundations of mathematics: Essays in honor of Solomon Feferman'', Association for Symbolic Logic, A.K. Peters Ltd, Natick, MA.</ref>) एक प्रतिबंधित प्रकार की मशीन है, एक "असतत नियतात्मक यांत्रिक उपकरण"<ref>cf Gandy 1980:126, Robin Gandy ''Church's Thesis and Principles for Mechanisms'' appearing on pp. 123–148 in [[Jon Barwise|J. Barwise]] et al. 1980 ''The Kleene Symposium'', North-Holland Publishing Company.</ref> जो आँख बंद करके उसके निर्देशों का पालन करता है।<ref>A "robot": "A computer is a robot that performs any task that can be described as a sequence of instructions." cf Stone 1972:3</ref> मेल्ज़ाक और लैंबेक के आदिम मॉडल<ref>Lambek's "abacus" is a "countably infinite number of locations (holes, wires etc.) together with an unlimited supply of counters (pebbles, beads, etc.). The locations are distinguishable, the counters are not". The holes have unlimited capacity, and standing by is an agent who understands and is able to carry out the list of instructions" (Lambek 1961:295). Lambek references Melzak who defines his Q-machine as "an indefinitely large number of locations ... an indefinitely large supply of counters distributed among these locations, a program, and an operator whose sole purpose is to carry out the program" (Melzak 1961:283). B-B-J (loc. cit.) add the stipulation that the holes are "capable of holding any number of stones" (p. 46). Both Melzak and Lambek appear in ''The [[Canadian Mathematical Bulletin]]'', vol. 4, no. 3, September 1961.</ref> ने इस धारणा को चार तत्वों तक कम कर दिया: (i) असतत, अलग-अलग स्थान (ii) असतत, अप्रभेद्य काउंटर<ref>If no confusion results, the word "counters" can be dropped, and a location can be said to contain a single "number".</ref> (iii) एक अभिकर्ता (एजेंट), और (iv) निर्देशों की एक सूची जो अभिकर्ता (एजेंट) की क्षमता के सापेक्ष प्रभावी है।<ref>"We say that an instruction is ''effective'' if there is a procedure that the robot can follow in order to determine precisely how to obey the instruction." (Stone 1972:6)</ref>


मिंस्की ने अपने "वेरी सिंपल बेसेस फॉर कम्प्यूटेबिलिटी" में लैंबेक के "एबेकस" मॉडल की अधिक अनुकूल भिन्नता का वर्णन किया है।<ref>cf Minsky 1967: Chapter 11 "Computer models" and Chapter 14 "Very Simple Bases for Computability" pp. 255–281, in particular,</ref> मिंस्की की मशीन क्रमिक रूप से अपने पांच (या छह, यह निर्भर करता है कि कोई कैसे गिनता है) निर्देशों के माध्यम से आगे बढ़ता है जब तक कि कोई सशर्त यदि तब गोटो या बिना शर्त गोटो क्रम से प्रोग्राम प्रवाह को बदलता है। हाल्ट के अलावा, मिंस्की की मशीन में तीन असाइनमेंट (प्रतिस्थापन, प्रतिस्थापन) संचालन शामिल हैं:<ref>cf Knuth 1973:3.</ref> ZERO (जैसे 0: L ← 0 द्वारा प्रतिस्थापित स्थान की सामग्री), SUCCESSOR (जैसे L ← L+1), और DECREMENT (जैसे L ← L − 1 )<ref>But always preceded by IF-THEN to avoid improper subtraction.</ref> शायद ही किसी प्रोग्रामर को इतने सीमित निर्देश सेट के साथ "कोड" लिखना चाहिए। लेकिन मिन्स्की दिखाता है (जैसा कि मेल्ज़ाक और लैंबेक करते हैं) कि उसकी मशीन ट्यूरिंग केवल चार सामान्य प्रकार के निर्देशों के साथ पूर्ण है: सशर्त गोटो, बिना शर्त गोटो, असाइनमेंट/प्रतिस्थापन/प्रतिस्थापन, और पड़ाव। हालांकि, ट्यूरिंग-पूर्णता के लिए कुछ अलग असाइनमेंट निर्देश (जैसे डिक्रीमेंट, इंक्रीमेंट, और मिन्स्की मशीन के लिए शून्य/साफ/खाली) भी आवश्यक हैं; उनका सटीक विनिर्देश कुछ हद तक डिजाइनर पर निर्भर है। बिना शर्त गोटो एक सुविधा है; इसे एक समर्पित स्थान को शून्य पर प्रारंभ करके बनाया जा सकता है जैसे निर्देश " जेड 0 "; उसके बाद निर्देश IF Z=0 तब GOTO xxx बिना शर्त है।
मिंस्की ने अपने "वेरी सिंपल बेसेस फॉर कम्प्यूटेबिलिटी" में लैंबेक के "एबेकस" प्रारूप (मॉडल) की अधिक अनुकूल भिन्नता का वर्णन किया है।<ref>cf Minsky 1967: Chapter 11 "Computer models" and Chapter 14 "Very Simple Bases for Computability" pp. 255–281, in particular,</ref> मिंस्की की मशीन क्रमिक रूप से अपने पांच (या छह, यह निर्भर करता है कि कोई कैसे गिनता है) निर्देशों के माध्यम से आगे बढ़ता है जब तक कि कोई सशर्त यदि तब गोटो या बिना शर्त गोटो क्रम से प्रोग्राम प्रवाह को बदलता है। हाल्ट के अलावा, मिंस्की की मशीन में तीन असाइनमेंट (प्रतिस्थापन, प्रतिस्थापन) संचालन शामिल हैं:<ref>cf Knuth 1973:3.</ref> जीरो  (जैसे 0: L ← 0 द्वारा प्रतिस्थापित स्थान की सामग्री), उत्तराधिकारी (जैसे L ← L+1), और घटते क्रम में (जैसे L ← L − 1 )<ref>But always preceded by IF-THEN to avoid improper subtraction.</ref> शायद ही किसी प्रोग्रामर को इतने सीमित निर्देश सेट के साथ "कोड" लिखना चाहिए। लेकिन मिन्स्की दिखाता है (जैसा कि मेल्ज़ाक और लैंबेक करते हैं) कि उसकी मशीन ट्यूरिंग केवल चार सामान्य प्रकार के निर्देशों के साथ पूर्ण है: सशर्त गोटो, बिना शर्त गोटो, असाइनमेंट/प्रतिस्थापन/प्रतिस्थापन, और पड़ाव। हालांकि, ट्यूरिंग-पूर्णता के लिए कुछ अलग असाइनमेंट निर्देश (जैसे डिक्रीमेंट, इंक्रीमेंट, और मिन्स्की मशीन के लिए शून्य/साफ/खाली) भी आवश्यक हैं; उनका सटीक विनिर्देश कुछ हद तक डिजाइनर पर निर्भर है। बिना शर्त गोटो एक सुविधा है; इसे एक समर्पित स्थान को शून्य पर प्रारंभ करके बनाया जा सकता है जैसे निर्देश " Z 0 "; उसके बाद निर्देश If Z=0(IF Z=0) तब गोटू एक्सएक्सएक्स (xxx) बिना शर्त है।


एक एल्गोरिथ्म का अनुकरण: कंप्यूटर (कंप्यूटर) भाषा: नुथ पाठक को सलाह देते हैं कि "एल्गोरिदम सीखने का सबसे अच्छा तरीका इसे आजमाना है। तुरंत कलम और कागज लें और एक उदाहरण के माध्यम से काम करें"।<ref>Knuth 1973:4</ref> लेकिन असली चीज़ के अनुकरण या निष्पादन के बारे में क्या? प्रोग्रामर को एल्गोरिथम का ऐसी भाषा में अनुवाद करना चाहिए जिसे सिम्युलेटर/कंप्यूटर/कंप्यूटर प्रभावी ढंग से निष्पादित कर सके। स्टोन इसका एक उदाहरण देता है: द्विघात समीकरण की जड़ों की गणना करते समय कंप्यूटर को पता होना चाहिए कि वर्गमूल कैसे लेना है। यदि वे नहीं करते हैं, तो प्रभावी होने के लिए एल्गोरिदम को वर्गमूल निकालने के लिए नियमों का एक सेट प्रदान करना होगा।<ref>Stone 1972:5. Methods for extracting roots are not trivial: see [[Methods of computing square roots]].</ref>
एक कलन विधि (एल्गोरिथ्म) का अनुकरण: कंप्यूटर (कंप्यूटर) भाषा: नुथ पाठक को सलाह देते हैं कि "कलन विधि (एल्गोरिथ्म) सीखने का सबसे अच्छा तरीका इसे आजमाना है। तुरंत कलम और कागज लें और एक उदाहरण के माध्यम से काम करें"।<ref>Knuth 1973:4</ref> लेकिन असली चीज़ के अनुकरण या निष्पादन के बारे में क्या? प्रोग्रामर को एल्गोरिथम का ऐसी भाषा में अनुवाद करना चाहिए जिसे सिम्युलेटर/कंप्यूटर/कंप्यूटर प्रभावी ढंग से निष्पादित कर सके। स्टोन इसका एक उदाहरण देता है: द्विघात समीकरण की जड़ों की गणना करते समय कंप्यूटर को पता होना चाहिए कि वर्गमूल कैसे लेना है। यदि वे नहीं करते हैं, तो प्रभावी होने के लिए कलन विधि (एल्गोरिथ्म) को वर्गमूल निकालने के लिए नियमों का एक सेट प्रदान करना होगा।<ref>Stone 1972:5. Methods for extracting roots are not trivial: see [[Methods of computing square roots]].</ref>


इसका मतलब है कि प्रोग्रामर को एक "भाषा" पता होनी चाहिए जो लक्ष्य कंप्यूटिंग एजेंट (कंप्यूटर/कंप्यूटर) के सापेक्ष प्रभावी है। लेकिन अनुकरण के लिए किस मॉडल का उपयोग किया जाना चाहिए? वैन एम्डे बोस ने कहा, "भले ही हम कंक्रीट मशीनों के बजाय अमूर्त पर जटिलता सिद्धांत को आधार बनाते हैं, एक मॉडल की पसंद की मनमानी बनी रहती है। यह इस बिंदु पर है कि अनुकरण की धारणा प्रवेश करती है"।<ref>{{cite book| last = Leeuwen| first = Jan| title = Handbook of Theoretical Computer Science: Algorithms and complexity. Volume A| url = https://books.google.com/books?id=-X39_rA3VSQC| year = 1990| publisher = Elsevier| isbn = 978-0-444-88071-0 | page = 85}}</ref> जब गति को मापा जा रहा हो, तो निर्देश सेट मायने रखता है उदाहरण के लिए, यूक्लिड के एल्गोरिथ्म में शेष की गणना करने के लिए उपप्रोग्राम बहुत तेजी से निष्पादित होगा यदि प्रोग्रामर के पास "मॉड्यूलस" निर्देश उपलब्ध हो केवल घटाव के बजाय (या इससे भी बदतर: केवल मिन्स्की की "कमी")।
इसका मतलब है कि प्रोग्रामर को एक "भाषा" पता होनी चाहिए जो लक्ष्य कंप्यूटिंग एजेंट के सापेक्ष प्रभावी है। लेकिन अनुकरण के लिए किस मॉडल का उपयोग किया जाना चाहिए? वैन एम्डे बोस ने कहा, "भले ही हम कंक्रीट मशीनों के बजाय अमूर्त पर जटिलता सिद्धांत को आधार बनाते हैं, एक मॉडल की पसंद की मनमानी बनी रहती है। यह इस बिंदु पर है कि अनुकरण की धारणा प्रवेश करती है"।<ref>{{cite book| last = Leeuwen| first = Jan| title = Handbook of Theoretical Computer Science: Algorithms and complexity. Volume A| url = https://books.google.com/books?id=-X39_rA3VSQC| year = 1990| publisher = Elsevier| isbn = 978-0-444-88071-0 | page = 85}}</ref> जब गति को मापा जा रहा हो, तो निर्देश सेट मायने रखता है उदाहरण के लिए, यूक्लिड के कलन विधि (एल्गोरिथ्म) में शेष की गणना करने के लिए उपप्रोग्राम बहुत तेजी से निष्पादित होगा यदि प्रोग्रामर के पास "'''मॉड्यूलस'''" निर्देश उपलब्ध हो केवल घटाव के बजाय (या इससे भी बदतर: केवल मिन्स्की की "कमी")।


संरचित प्रोग्रामिंग, विहित संरचनाएं: चर्च-ट्यूरिंग थीसिस के अनुसार, किसी भी एल्गोरिथ्म की गणना एक मॉडल द्वारा की जा सकती है जिसे ट्यूरिंग पूर्ण कहा जाता है, और मिन्स्की के प्रदर्शनों के अनुसार, ट्यूरिंग पूर्णता के लिए केवल चार निर्देश प्रकारों की आवश्यकता होती है-सशर्त गोटो, बिना शर्त गोटो, असाइनमेंट, एचएएलटी। केमेनी और कर्ट्ज़ ने देखा कि, बिना शर्त (गो टू) GOTO और सशर्त (इफ-देन गो टू) IF-THEN GOTO के "अनुशासनहीन" उपयोग के परिणामस्वरूप "स्पेगेटी कोड" हो सकता है, एक प्रोग्रामर केवल इन निर्देशों का उपयोग करके संरचित प्रोग्राम लिख सकता है; दूसरी ओर "एक संरचित भाषा में बुरी तरह से संरचित कार्यक्रमों को लिखना<ref>[[John G. Kemeny]] and [[Thomas E. Kurtz]] 1985 ''Back to Basic: The History, Corruption, and Future of the Language'', Addison-Wesley Publishing Company, Inc. Reading, MA, {{ISBN|0-201-13433-0}}.</ref> भी संभव है, और बहुत कठिन नहीं है"। टॉसवर्थ ने तीन बोहम-जैकोपिनी विहित संरचनाओं को बढ़ाया:<ref>Tausworthe 1977:101</ref> सिक्वेंस (SEQUENCE), इफ-देन-एल्स (IF-THEN-ELSE), और वाइल-डू (WHILE-DO), दो और के साथ: डू-वाइल (DO-WHILE) और केस (CASE)<ref>Tausworthe 1977:142</ref>। एक संरचित कार्यक्रम का एक अतिरिक्त लाभ यह है कि यह गणितीय प्रेरण का उपयोग करके शुद्धता के प्रमाण के लिए खुद को उधार देता है।<ref>Knuth 1973 section 1.2.1, expanded by Tausworthe 1977 at pages 100ff and Chapter 9.1</ref>
संरचित प्रोग्रामिंग, विहित संरचनाएं: चर्च-ट्यूरिंग थीसिस के अनुसार, किसी भी कलन विधि (एल्गोरिथ्म) की गणना एक मॉडल द्वारा की जा सकती है जिसे ट्यूरिंग पूर्ण कहा जाता है, और मिन्स्की के प्रदर्शनों के अनुसार, ट्यूरिंग पूर्णता के लिए केवल चार निर्देश प्रकारों की आवश्यकता होती है-सशर्त गोटो, बिना शर्त गोटो, असाइनमेंट, एचएएलटी। केमेनी और कर्ट्ज़ ने देखा कि, बिना शर्त (गो टू) GOTO और सशर्त (इफ-देन गो टू) IF-THEN GOTO के "अनुशासनहीन" उपयोग के परिणामस्वरूप "स्पेगेटी कोड" हो सकता है, एक प्रोग्रामर केवल इन निर्देशों का उपयोग करके संरचित प्रोग्राम लिख सकता है; दूसरी ओर "एक संरचित भाषा में बुरी तरह से संरचित कार्यक्रमों को लिखना<ref>[[John G. Kemeny]] and [[Thomas E. Kurtz]] 1985 ''Back to Basic: The History, Corruption, and Future of the Language'', Addison-Wesley Publishing Company, Inc. Reading, MA, {{ISBN|0-201-13433-0}}.</ref> भी संभव है, और बहुत कठिन नहीं है"। टॉसवर्थ ने तीन बोहम-जैकोपिनी विहित संरचनाओं को बढ़ाया:<ref>Tausworthe 1977:101</ref> सिक्वेंस (SEQUENCE), इफ-देन-एल्स (IF-THEN-ELSE), और वाइल-डू (WHILE-DO), दो और के साथ: डू-वाइल (DO-WHILE) और केस (CASE)<ref>Tausworthe 1977:142</ref>। एक संरचित कार्यक्रम का एक अतिरिक्त लाभ यह है कि यह गणितीय प्रेरण का उपयोग करके शुद्धता के प्रमाण के लिए खुद को उधार देता है।<ref>Knuth 1973 section 1.2.1, expanded by Tausworthe 1977 at pages 100ff and Chapter 9.1</ref>


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


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


उच्च स्तरीय विवरण:
उच्च स्तरीय विवरण:
Line 180: Line 184:
# जब पुनरावृति के लिए सेट में कोई संख्या नहीं बची है, तो वर्तमान सबसे बड़ी संख्या को सेट की सबसे बड़ी संख्या मानें।
# जब पुनरावृति के लिए सेट में कोई संख्या नहीं बची है, तो वर्तमान सबसे बड़ी संख्या को सेट की सबसे बड़ी संख्या मानें।


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


'अगर' L.Size = 0 'रिटर्न' NULL
If L.size = 0 return null
सबसे बड़ा l [0]
largest L[0]
'एल,' डू 'में प्रत्येक' आइटम 'के लिए
for each item in L, do
'अगर' आइटम> सबसे बड़ा, 'तो'
If item > largest, then
सबसे बड़ा आइटम
largest item
'रिटर्न' सबसे बड़ा
return largest{{algorithm-end}}
{{algorithm-end}}


=== यूक्लिड की एल्गोरिथ्म ===
=== यूक्लिड की कलन विधि (एल्गोरिथ्म) ===
गणित में, यूक्लिडियन एल्गोरिथ्म, या यूक्लिड का एल्गोरिथ्म, दो पूर्णांकों (संख्याओं) के सबसे बड़े सामान्य भाजक (GCD) की गणना के लिए एक कुशल विधि है, वह सबसे बड़ी संख्या जो उन दोनों को बिना किसी शेषफल के विभाजित करती है। इसका नाम प्राचीन यूनानी गणितज्ञ यूक्लिड के नाम पर रखा गया है, जिन्होंने पहली बार अपने तत्वों (सी. 300 ईसा पूर्व) में इसका वर्णन किया था।<ref>Heath 1908:300; Hawking's Dover 2005 edition derives from Heath.</ref> यह आम उपयोग में सबसे पुराने एल्गोरिदम में से एक है। इसका उपयोग भिन्नों को उनके सरलतम रूप में कम करने के लिए किया जा सकता है, और यह कई अन्य संख्या सैद्धांतिक और क्रिप्टोग्राफिक गणनाओं का एक हिस्सा है।
गणित में, यूक्लिडियन कलन विधि (एल्गोरिथ्म), या यूक्लिड का कलन विधि (एल्गोरिथ्म), दो पूर्णांकों (संख्याओं) के सबसे बड़े सामान्य भाजक (GCD) की गणना के लिए एक कुशल विधि है, वह सबसे बड़ी संख्या जो उन दोनों को बिना किसी शेषफल के विभाजित करती है। इसका नाम प्राचीन यूनानी गणितज्ञ यूक्लिड के नाम पर रखा गया है, जिन्होंने पहली बार अपने तत्वों (सी. 300 ईसा पूर्व) में इसका वर्णन किया था।<ref>Heath 1908:300; Hawking's Dover 2005 edition derives from Heath.</ref> यह आम उपयोग में सबसे पुराने कलन विधि (एल्गोरिथ्म) में से एक है। इसका उपयोग भिन्नों को उनके सरलतम रूप में कम करने के लिए किया जा सकता है, और यह कई अन्य संख्या सैद्धांतिक और क्रिप्टोग्राफिक गणनाओं का एक हिस्सा है।


[[File:Euclid's algorithm Book VII Proposition 2 2.png|250px|thumb|left|टी.एल. से यूक्लिड के एल्गोरिथ्म का उदाहरण-माप।हीथ (1908), अधिक विस्तार के साथ।यूक्लिड एक तीसरे माप से परे नहीं जाता है और कोई संख्यात्मक उदाहरण नहीं देता है।निकोमैचस 49 और 21 का उदाहरण देता है: मैं अधिक से कम घटाता हूं;28 छोड़ दिया गया है;तो फिर से मैं इसे उसी 21 से घटाता हूं (इसके लिए संभव है);7 बचा है;मैं इसे 21 से घटाता हूं, 14 छोड़ दिया जाता है;जिसमें से मैं फिर से 7 घटाना (इसके लिए संभव है);7 को छोड़ दिया गया है, लेकिन 7 को 7. से घटाया नहीं जा सकता है। हीथ टिप्पणियाँ कि अंतिम वाक्यांश उत्सुक है, लेकिन इसका अर्थ स्पष्ट रूप से पर्याप्त है, साथ ही 'एक और एक ही संख्या पर' समाप्त होने के बारे में वाक्यांश का अर्थ भी।(हीथ 1908: 300)।]]
[[File:Euclid's algorithm Book VII Proposition 2 2.png|250px|thumb|left|टी.एल. से यूक्लिड के कलन विधि (एल्गोरिथ्म) का उदाहरण-माप।हीथ (1908), अधिक विस्तार के साथ।यूक्लिड एक तीसरे माप से परे नहीं जाता है और कोई संख्यात्मक उदाहरण नहीं देता है।निकोमैचस 49 और 21 का उदाहरण देता है: मैं अधिक से कम घटाता हूं;28 छोड़ दिया गया है;तो फिर से मैं इसे उसी 21 से घटाता हूं (इसके लिए संभव है);7 बचा है;मैं इसे 21 से घटाता हूं, 14 छोड़ दिया जाता है;जिसमें से मैं फिर से 7 घटाना (इसके लिए संभव है);7 को छोड़ दिया गया है, लेकिन 7 को 7. से घटाया नहीं जा सकता है। हीथ टिप्पणियाँ कि अंतिम वाक्यांश उत्सुक है, लेकिन इसका अर्थ स्पष्ट रूप से पर्याप्त है, साथ ही 'एक और एक ही संख्या पर' समाप्त होने के बारे में वाक्यांश का अर्थ भी।(हीथ 1908: 300)।]]
यूक्लिड ने इस समस्या को इस प्रकार प्रस्तुत किया: "दिए गए दो संख्याएँ जो एक दूसरे के लिए अभाज्य नहीं हैं, उनका सबसे बड़ा सामान्य उपाय खोजने के लिए"। वह परिभाषित करता है "एक संख्या [होने के लिए] इकाइयों से बना एक भीड़": एक गिनती संख्या, एक सकारात्मक पूर्णांक जिसमें शून्य शामिल नहीं है। "माप" करने के लिए एक छोटी माप लंबाई s क्रमिक रूप से (q गुना) लंबी लंबाई l के साथ रखना है जब तक कि शेष भाग r छोटी लंबाई s से कम न हो।<ref>" 'Let CD, measuring BF, leave FA less than itself.' This is a neat abbreviation for saying, measure along BA successive lengths equal to CD until a point F is reached such that the length FA remaining is less than CD; in other words, let BF be the largest exact multiple of CD contained in BA" (Heath 1908:297)</ref> आधुनिक शब्दों में, शेष r = l - q×s, q भागफल है, या शेष r "मापांक" है, विभाजन के बाद बचा हुआ पूर्णांक भिन्नात्मक भाग है।<ref>For modern treatments using division in the algorithm, see Hardy and Wright 1979:180, Knuth 1973:2 (Volume 1), plus more discussion of Euclid's algorithm in Knuth 1969:293–297 (Volume 2).</ref>
यूक्लिड ने इस समस्या को इस प्रकार प्रस्तुत किया: "दिए गए दो संख्याएँ जो एक दूसरे के लिए अभाज्य नहीं हैं, उनका सबसे बड़ा सामान्य उपाय खोजने के लिए"। वह परिभाषित करता है "एक संख्या [होने के लिए] इकाइयों से बना एक भीड़": एक गिनती संख्या, एक सकारात्मक पूर्णांक जिसमें शून्य शामिल नहीं है। "माप" करने के लिए एक छोटी माप लंबाई s क्रमिक रूप से (q गुना) लंबी लंबाई l के साथ रखना है जब तक कि शेष भाग r छोटी लंबाई s से कम न हो।<ref>" 'Let CD, measuring BF, leave FA less than itself.' This is a neat abbreviation for saying, measure along BA successive lengths equal to CD until a point F is reached such that the length FA remaining is less than CD; in other words, let BF be the largest exact multiple of CD contained in BA" (Heath 1908:297)</ref> आधुनिक शब्दों में, शेष r = l - q×s, q भागफल है, या शेष r "मापांक" है, विभाजन के बाद बचा हुआ पूर्णांक भिन्नात्मक भाग है।<ref>For modern treatments using division in the algorithm, see Hardy and Wright 1979:180, Knuth 1973:2 (Volume 1), plus more discussion of Euclid's algorithm in Knuth 1969:293–297 (Volume 2).</ref>


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


यूक्लिड का मूल प्रमाण तीसरी आवश्यकता जोड़ता है: दो लंबाई एक दूसरे के लिए प्रमुख नहीं होनी चाहिए।यूक्लिड ने इसे इसलिए निर्धारित किया ताकि वह एक रिडक्टियो एड एब्सर्डम प्रूफ तैयार कर सके कि दो संख्याओं का सामान्य माप वास्तव में सबसे बड़ा है।<ref>Euclid covers this question in his Proposition 1.</ref> जबकि निकोमाचस का एल्गोरिथ्म यूक्लिड के समान है,जब संख्याएं एक दूसरे के लिए अभाज्य हों, यह उनके सामान्य माप के लिए संख्या "1" प्राप्त करता है। तो, सटीक होने के लिए, निम्नलिखित वास्तव में निकोमाचस 'एल्गोरिदम है।[[File:Euclids-algorithm-example-1599-650.gif|350px|thumb|right|1599 और 650 के लिए सबसे बड़ी आम भाजक को खोजने के लिए यूक्लिड के एल्गोरिथ्म की एक चित्रमय अभिव्यक्ति।
यूक्लिड का मूल प्रमाण तीसरी आवश्यकता जोड़ता है: दो लंबाई एक दूसरे के लिए प्रमुख नहीं होनी चाहिए।यूक्लिड ने इसे इसलिए निर्धारित किया ताकि वह एक रिडक्टियो एड एब्सर्डम प्रूफ तैयार कर सके कि दो संख्याओं का सामान्य माप वास्तव में सबसे बड़ा है।<ref>Euclid covers this question in his Proposition 1.</ref> जबकि निकोमाचस का कलन विधि (एल्गोरिथ्म) यूक्लिड के समान है,जब संख्याएं एक दूसरे के लिए अभाज्य हों, यह उनके सामान्य माप के लिए संख्या "1" प्राप्त करता है। तो, सटीक होने के लिए, निम्नलिखित वास्तव में निकोमाचस 'कलन विधि (एल्गोरिथ्म) है।[[File:Euclids-algorithm-example-1599-650.gif|350px|thumb|right|1599 और 650 के लिए सबसे बड़ी आम भाजक को खोजने के लिए यूक्लिड के कलन विधि (एल्गोरिथ्म) की एक चित्रमय अभिव्यक्ति।<syntaxhighighlight lang = पाठ हाइलाइट = 1,5>
<syntaxhighighlight lang = पाठ हाइलाइट = 1,5>
 
1599 = 650 × 2 + 299
1599 = 650 × 2 + 299
650 = 299 × 2 + 52
650 = 299 × 2 + 52
299 = 52 × 5 + 39
299 = 52 × 5 + 39
52 = 39 × 1 + 13
 
39 = 13 × 3 + 0 </syntaxhighlight>]]
52 = 39 × 1 + 13
==== यूक्लिड के एल्गोरिथ्म के लिए कंप्यूटर भाषा =====
39 = 13 × 3 + 0 <nowiki></syntaxhighlight></nowiki>]]
==== यूक्लिड के कलन विधि (एल्गोरिथ्म) के लिए कंप्यूटर भाषा ====
यूक्लिड के एल्गोरिथम को निष्पादित करने के लिए केवल कुछ निर्देश प्रकारों की आवश्यकता होती है कुछ तार्किक परीक्षण (सशर्त गोटो), बिना शर्त गोटो, असाइनमेंट (प्रतिस्थापन), और घटाव।
यूक्लिड के एल्गोरिथम को निष्पादित करने के लिए केवल कुछ निर्देश प्रकारों की आवश्यकता होती है कुछ तार्किक परीक्षण (सशर्त गोटो), बिना शर्त गोटो, असाइनमेंट (प्रतिस्थापन), और घटाव।


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


==== यूक्लिड के एल्गोरिथ्म के लिए एक अयोग्य कार्यक्रम =====
==== "यूक्लिड के कलन विधि (एल्गोरिथ्म) के लिए एक सुरुचिपूर्ण कार्यक्रम "====
[[File:Euclid's algorithm Inelegant program 1.png|thumb|163px|right|IneLegant एक घटाव-आधारित शेष-लूप के साथ एल्गोरिथ्म के Knuth के संस्करण का अनुवाद है, जो विभाजन के अपने उपयोग (या एक मापांक निर्देश) के उपयोग की जगह लेता है।नुथ 1973 से व्युत्पन्न: 2-4।दो नंबरों के आधार पर inelegant G.C.D की गणना कर सकता है।सुरुचिपूर्ण से कम चरणों में।]]
[[File:Euclid's algorithm Inelegant program 1.png|thumb|163px|right|IneLegant एक घटाव-आधारित शेष-लूप के साथ कलन विधि (एल्गोरिथ्म) के Knuth के संस्करण का अनुवाद है, जो विभाजन के अपने उपयोग (या एक मापांक निर्देश) के उपयोग की जगह लेता है।नुथ 1973 से व्युत्पन्न: 2-4।दो नंबरों के आधार पर inelegant G.C.D की गणना कर सकता है।सुरुचिपूर्ण से कम चरणों में।]]
"सुरुचिपूर्ण" एल्गोरिथम के नुथ के संस्करण का एक अनुवाद है जिसमें एक घटाव आधारित शेष लूप है जो उसके विभाजन (या "मॉड्यूलस" निर्देश) के उपयोग की जगह लेता है। नुथ 1973: 2-4 से व्युत्पन्न। दो संख्याओं के आधार पर "सुरुचिपूर्ण" g.c.d. की गणना कर सकता है। "सुरुचिपूर्ण" से कम चरणों में। निम्नलिखित एल्गोरिथम को नुथ के यूक्लिड और निकोमाचस के चार चरण संस्करण के रूप में तैयार किया गया है, लेकिन, शेष को खोजने के लिए विभाजन का उपयोग करने के बजाय, यह शेष लंबाई r से छोटी लंबाई s के क्रमिक घटाव का उपयोग करता है जब तक कि r s से कम न हो। बोल्डफेस में दिखाया गया उच्च-स्तरीय विवरण, नुथ 1973: 2–4 से अनुकूलित है:
"सुरुचिपूर्ण" कलन विधि (एल्गोरिथ्म) के नुथ के संस्करण का एक अनुवाद है जिसमें एक घटाव आधारित शेष लूप है जो उसके विभाजन (या "मॉड्यूलस" निर्देश) के उपयोग की जगह लेता है। नुथ 1973: 2-4 से व्युत्पन्न। दो संख्याओं के आधार पर "सुरुचिपूर्ण" जी. सी. डी. (g.c.d.) की गणना कर सकता है। "सुरुचिपूर्ण" से कम चरणों में निम्नलिखित कलन विधि (एल्गोरिथ्म) को नुथ के यूक्लिड और निकोमाचस के चार चरण संस्करण के रूप में तैयार किया गया है, लेकिन शेष को खोजने के लिए विभाजन का उपयोग करने के बजाय, यह शेष लंबाई r से छोटी लंबाई s के क्रमिक घटाव का उपयोग करता है जब तक कि r s से कम न हो। बोल्डफेस में दिखाया गया उच्च-स्तरीय विवरण, नुथ 1973: 2–4 से अनुकूलित है:


'इनपुट':
'''INPUT''':
  1 [दो स्थानों में एल और एस दो लंबाई का प्रतिनिधित्व करने वाली संख्या एल और एस डालते हैं]:
  1 [Into two locations L and S put the numbers ''l'' and ''s'' that represent the two lengths]:
  इनपुट एल, एस
  INPUT L, S
  2 [आरंभिक आर: शेष लंबाई आर को प्रारंभिक/प्रारंभिक/इनपुट लंबाई एल के बराबर बनाएं]:
  2 [Initialize R: make the remaining length ''r'' equal to the starting/initial/input length ''l'']:                 R ← L1
आर एल
E0: [सुनिश्चित करें कि r s.]
3 [सुनिश्चित करें कि दो संख्याओं में से छोटी संख्या S में है और बड़ी R में है]:
अगर आर> एस तो
एल की सामग्री बड़ी संख्या है इसलिए एक्सचेंज-चरण 4, 5 और 6 को छोड़ दें:
गोटो चरण 7
वरना
आर और एस की सामग्री को स्वैप करें।
4 एल आर (यह पहला कदम बेमानी है, लेकिन बाद में चर्चा के लिए उपयोगी है)।
5 आर ← एस
6 एस एल


E1: [शेष ज्ञात करें]: जब तक R में शेष लंबाई r, S में छोटी लंबाई s से कम न हो, बार-बार S में माप संख्या s को R में शेष लंबाई r से घटाएं।
'''E0: [Ensure ''r'' ≥ ''s''.]'''
  7 अगर एस> आर तो
3 [Ensure the smaller of the two numbers is in S and the larger in R]:
  इसलिए किया माप
  IF R > S THEN
  गोटो 10
  the contents of L is the larger number so skip over the exchange-steps 4, 5 and 6:
  वरना
  GOTO step 7
  फिर से मापें,
  ELSE
  8 आर आर - एस
  swap the contents of R and S.
9 [शेष-लूप]:
  4 L R (this first step is redundant, but is useful for later discussion).
गोटो 7.
5 R ← S                                                          6 S ← L
E2: [क्या शेषफल शून्य है?]: या तो (i) अंतिम उपाय सटीक था, R में शेषफल शून्य है, और प्रोग्राम रुक सकता है, या (ii) एल्गोरिथम जारी रहना चाहिए: अंतिम माप ने R में शेषफल S में मापने की संख्या से कम छोड़ दिया।
10 अगर आर = 0 तब
ऐसा किया
गोटो चरण 15
वरना


चरण 11 के लिए जारी रखें,
'''E1: [Find remainder]''': जब तक R में शेष लंबाई r, S में छोटी लंबाई s से कम न हो, बार-बार S में माप संख्या s को R में शेष लंबाई r से घटाएं।
E3: [इंटरचेंज एस और आर]: यूक्लिड के एल्गोरिथ्म का नट।  शेष r का उपयोग यह मापने के लिए करें कि पहले छोटी संख्या s क्या थी; एल एक अस्थायी स्थान के रूप में कार्य करता है।
7 IF S > R THEN
  11 एल आर
done measuring so
GOTO 10
ELSE
measure again,
8 R ← R − S
  9 [Remainder-loop]:                                                          GOTO 7.


  12 आर एस
'''E2: [Is the remainder zero?]''': या तो (i) अंतिम उपाय सटीक था, R में शेषफल शून्य है, और प्रोग्राम रुक सकता है, या (ii) एल्गोरिथम जारी रहना चाहिए: अंतिम माप ने R में शेषफल S में मापने की संख्या से कम छोड़ दिया।
10 IF R = 0 THEN
done so
GOTO step 15
ELSE                                                                    CONTINUE TO step 11,
'''E3: [Interchange ''s'' and ''r'']''': यूक्लिड के कलन विधि (एल्गोरिथ्म) का नट।  शेष r का उपयोग यह मापने के लिए करें कि पहले छोटी संख्या s क्या थी; एल एक अस्थायी स्थान के रूप में कार्य करता है।
11 L ← R
  12 R ← S
13 S ← L
14 [Repeat the measuring process]:                                          GOTO 7
'''OUTPUT''':
15 [Done. S contains the greatest common divisor]:                          PRINT S
'''DONE''':
16 HALT, END, STOP.


13 एस ली
==== यूक्लिड के कलन विधि (एल्गोरिथ्म) के लिए एक सुरुचिपूर्ण कार्यक्रम ====
 
यूक्लिड के एल्गोरिथम के निम्नलिखित संस्करण के लिए केवल छह मुख्य निर्देशों की आवश्यकता है जो "इनलेगेंट" द्वारा तेरह को करने के लिए आवश्यक हैं;  इससे भी बदतर, "सुरुचिपूर्ण" के लिए अधिक प्रकार के निर्देशों की आवश्यकता होती है। "सुरुचिपूर्ण" का फ़्लोचार्ट इस लेख के शीर्ष पर पाया जा सकता है। (असंरचित) मूल भाषा में, चरणों को क्रमांकित किया जाता है, और निर्देश LET [ ] = [ ] असाइनमेंट निर्देश का प्रतीक है।  
14 [मापने की प्रक्रिया दोहराएं]:
 
गोटो 7
आउटपुट:
15 [हो गया।
 
S में सबसे बड़ा उभयनिष्ठ भाजक है]:
 
प्रिंट करें
खत्म
16 रुको, अंत करो, रुको।
 
==== यूक्लिड के एल्गोरिथ्म के लिए एक सुरुचिपूर्ण कार्यक्रम =====
यूक्लिड के एल्गोरिथम के निम्नलिखित संस्करण के लिए केवल छह मुख्य निर्देशों की आवश्यकता है जो "इनलेगेंट" द्वारा तेरह को करने के लिए आवश्यक हैं;  इससे भी बदतर, "सुरुचिपूर्ण" के लिए अधिक प्रकार के निर्देशों की आवश्यकता होती है। "सुरुचिपूर्ण" का फ़्लोचार्ट इस लेख के शीर्ष पर पाया जा सकता है। (असंरचित) मूल भाषा में, चरणों को क्रमांकित किया जाता है, और निर्देश LET [] = [] असाइनमेंट निर्देश का प्रतीक है।  
<syntaxhighighlight lang = cbmbas>
<syntaxhighighlight lang = cbmbas>
  5 आरईएम यूक्लिड का एल्गोरिथ्म सबसे बड़ी आम भाजक के लिए
    5 REM Euclid's algorithm for greatest common divisor                                                  6 PRINT "Type two integers greater than 0"
  6 प्रिंट टाइप दो पूर्णांक 0 से अधिक
  10 INPUT A,B
  10 इनपुट ए, बी
  20 IF B=0 THEN GOTO 80
  20 अगर बी = 0 तो गोटो 80
  30 IF A > B THEN GOTO 60
  30 अगर ए> बी तो गोटो 60
  40 LET B=B-A
  40 लेट बी = बी-
  50 GOTO 20
  50 गोटो 20
  60 LET A=A-B
  60 लेट ए = -बी
  70 GOTO 20
  70 गोटो 20
  80 PRINT A                                                                          90 END
  80 प्रिंट ए
"एलिगेंट" कैसे काम करता है: बाहरी "यूक्लिड लूप" के स्थान पर, "एलिगेंट" दो "को-लूप" के बीच आगे और पीछे शिफ्ट हो जाता है, A> B लूप जो A A - B, और A B A लूप की गणना करता है और जो B B - A की गणना करता है। यह एक साथ काम करता है क्योंकि, जब अंत में मिन्यूएंड M सबट्रेंड S से कम या उसके बराबर होता है (अंतर = मिन्यूएंड - सबट्रेंड), तो ऐसी स्थिति में मिन्यूएंड s बन सकता है (नई माप लंबाई) और सबट्रेंड R (मापी जाने वाली लंबाई) बन सकता है; दूसरे शब्दों में घटाएं जाने का यह "अर्थ" आपस में बदल सकता है।
  90 छोर
"एलिगेंट" कैसे काम करता है: बाहरी "यूक्लिड लूप" के स्थान पर, "एलिगेंट" दो "को-लूप" के बीच आगे और पीछे शिफ्ट होता है, एक ए> बी लूप जो - बी, और ए बी लूप की गणना करता है जो बी बी - की गणना करता है। यह काम करता है क्योंकि, जब अंत में मिन्यूएंड एम सबट्रेंड एस से कम या उसके बराबर होता है (अंतर = मिन्यूएंड - सबट्रेंड), minuend s बन सकता है (नई माप लंबाई) और सबट्रेंड नया r (मापी जाने वाली लंबाई) बन सकता है; दूसरे शब्दों में घटाव की "भावना" उलट जाती है।
 
निम्नलिखित संस्करण का उपयोग सी-परिवार की प्रोग्रामिंग भाषाओं के साथ किया जा सकता है: सी-परिवार से प्रोग्रामिंग भाषाएं:
    // Euclid's algorithm for greatest common divisor


निम्नलिखित संस्करण का उपयोग C-परिवार की प्रोग्रामिंग भाषाओं के साथ किया जा सकता है: C-परिवार से प्रोग्रामिंग भाषाएं:
// Euclid's algorithm for greatest common divisor
  int euclidAlgorithm (int A, int B){
  int euclidAlgorithm (int A, int B){
       A=abs(A);
       A=abs(A);
Line 294: Line 284:
           B=B-A;
           B=B-A;
       }
       }
       return A;
       return A;                                                                   }
}


=== यूक्लिड एल्गोरिदम का परीक्षण ===
=== यूक्लिड एल्गोरिथम का परीक्षण ===
क्या कोई एल्गोरिथम वही करता है जो उसका लेखक उससे करना चाहता है? कुछ परीक्षण मामले आमतौर पर मुख्य कार्यक्षमता में कुछ विश्वास देते हैं। लेकिन परीक्षण पर्याप्त नहीं हैं। परीक्षण मामलों के लिए, एक स्रोत<ref>{{cite web |url=http://aleph0.clarku.edu/~djoyce/java/elements/bookVII/propVII2.html |title=Euclid's Elements, Book VII, Proposition 2 |publisher=Aleph0.clarku.edu |access-date=May 20, 2012 |archive-url=https://web.archive.org/web/20120524074919/http://aleph0.clarku.edu/~djoyce/java/elements/bookVII/propVII2.html |archive-date=May 24, 2012 |url-status=live }}</ref> 3009 और 884 का उपयोग करता है। नुथ ने 40902, 24140 का सुझाव दिया। एक और दिलचस्प मामला दो अपेक्षाकृत अभाज्य संख्याएँ 14157 और 5950 है।
क्या कोई एल्गोरिथम वही करता है जो उसका लेखक उससे करना चाहता है? कुछ परीक्षण मामले आमतौर पर मुख्य कार्यक्षमता में कुछ विश्वास देते हैं। लेकिन परीक्षण पर्याप्त नहीं हैं। परीक्षण मामलों के लिए, एक स्रोत<ref>{{cite web |url=http://aleph0.clarku.edu/~djoyce/java/elements/bookVII/propVII2.html |title=Euclid's Elements, Book VII, Proposition 2 |publisher=Aleph0.clarku.edu |access-date=May 20, 2012 |archive-url=https://web.archive.org/web/20120524074919/http://aleph0.clarku.edu/~djoyce/java/elements/bookVII/propVII2.html |archive-date=May 24, 2012 |url-status=live }}</ref> 3009 और 884 का उपयोग करता है। नुथ ने 40902, 24140 का सुझाव दिया।


लेकिन "असाधारण मामलों"<ref>While this notion is in widespread use, it cannot be defined precisely.</ref> की पहचान की जानी चाहिए और उनका परीक्षण किया जाना चाहिए। क्या आर > एस, एस > आर, आर = एस (R > S, S > R, R = S) होने पर "इनलीगेंट" ठीक से प्रदर्शन करेगा? "सुरुचिपूर्ण" के लिए डिट्टो: बी> ए, ए> बी, ए = बी (B > A, A > B, A = B)? (हाँ सभी को)। क्या होता है जब एक संख्या शून्य होती है, दोनों संख्याएँ शून्य होती हैं? ("सुरुचिपूर्ण" सभी मामलों में हमेशा के लिए गणना करता है; "सुरुचिपूर्ण" हमेशा के लिए गणना करता है जब = 0.) यदि ऋणात्मक संख्याएँ दर्ज की जाती हैं तो क्या होता है? भिन्नात्मक संख्याएँ? यदि इनपुट नंबर, यानी एल्गोरिदम/प्रोग्राम द्वारा गणना किए गए फ़ंक्शन का डोमेन शून्य सहित केवल सकारात्मक पूर्णांक शामिल करना है, तो शून्य पर विफलताएं इंगित करती हैं कि एल्गोरिदम (और प्रोग्राम जो इसे तुरंत चालू करता है) कुल फ़ंक्शन के बजाय आंशिक कार्य है। अपवादों के कारण एक उल्लेखनीय विफलता एरियन 5 फ्लाइट 501 रॉकेट विफलता (4 जून, 1996) है।
एक और दिलचस्प मामला<ref>While this notion is in widespread use, it cannot be defined precisely.</ref> दो अपेक्षाकृत अभाज्य संख्याएँ 14157 और 5950 है। लेकिन "असाधारण मामलों" की पहचान की जानी चाहिए और उनका परीक्षण किया जाना चाहिए। क्या R > S, S > R, R = S होने पर "इनलीगेंट" ठीक से प्रदर्शन करेगा? "सुरुचिपूर्ण" के लिए डिट्टो: B> A, A> B, A = B? (हाँ सभी को)। क्या होता है जब एक संख्या शून्य होती है, दोनों संख्याएँ शून्य होती हैं? ("सुरुचिपूर्ण" सभी मामलों में हमेशा के लिए गणना करता है; "सुरुचिपूर्ण" हमेशा के लिए गणना करता है जब A = 0.) यदि ऋणात्मक संख्याएँ दर्ज की जाती हैं तो क्या होता है? भिन्नात्मक संख्याएँ? यदि इनपुट नंबर, यानी कलन विधि (एल्गोरिथ्म)/प्रोग्राम द्वारा गणना किए गए फ़ंक्शन का डोमेन शून्य सहित केवल सकारात्मक पूर्णांक शामिल करना है, तो शून्य पर विफलताएं इंगित करती हैं कि कलन विधि (एल्गोरिथ्म) (और प्रोग्राम जो इसे तुरंत चालू करता है) इसके बजाय आंशिक कार्य है एक कुल समारोह। अपवादों के कारण एक उल्लेखनीय विफलता एरियन 5 फ्लाइट 501 रॉकेट विफलता (4 जून, 1996) है।


गणितीय प्रेरण के उपयोग से कार्यक्रम की शुद्धता का प्रमाण: नुथ यूक्लिड के एल्गोरिथम के "विस्तारित" संस्करण में गणितीय प्रेरण के अनुप्रयोग को प्रदर्शित करता है, और वह "किसी भी एल्गोरिथम की वैधता को साबित करने के लिए लागू एक सामान्य विधि" का प्रस्ताव करता है।<ref>Knuth 1973:13–18. He credits "the formulation of algorithm-proving in terms of assertions and induction" to R W. Floyd, Peter Naur, C.A.R. Hoare, H.H. Goldstine and J. von Neumann. Tausworth 1977 borrows Knuth's Euclid example and extends Knuth's method in section 9.1 ''Formal Proofs'' (pp. 288–298).</ref> टॉसवर्थ का प्रस्ताव है कि एक कार्यक्रम की जटिलता का एक माप उसके शुद्धता प्रमाण की लंबाई हो।<ref>Tausworthe 1997:294</ref>
गणितीय प्रेरण के उपयोग से कार्यक्रम की शुद्धता का प्रमाण: नुथ यूक्लिड के एल्गोरिथम के "विस्तारित" संस्करण में गणितीय प्रेरण के अनुप्रयोग को प्रदर्शित करता है, और वह "किसी भी एल्गोरिथम की वैधता को साबित करने के लिए लागू एक सामान्य विधि" का प्रस्ताव करता है।<ref>Knuth 1973:13–18. He credits "the formulation of algorithm-proving in terms of assertions and induction" to R W. Floyd, Peter Naur, C.A.R. Hoare, H.H. Goldstine and J. von Neumann. Tausworth 1977 borrows Knuth's Euclid example and extends Knuth's method in section 9.1 ''Formal Proofs'' (pp. 288–298).</ref> टॉसवर्थ का प्रस्ताव है कि किसी कार्यक्रम की जटिलता का माप उसके शुद्धता प्रमाण की लंबाई हो।<ref>Tausworthe 1997:294</ref>


=== यूक्लिड एल्गोरिदम को मापने और सुधारना ===
=== यूक्लिड कलन विधि (एल्गोरिथ्म) को मापने और सुधारना ===
लालित्य (कॉम्पैक्टनेस) बनाम अच्छाई (गति): केवल छह मुख्य निर्देशों के साथ, "सुरुचिपूर्ण" स्पष्ट विजेता है, इसकी तुलना तेरह निर्देशों पर "सुरुचिपूर्ण" से की गई। हालांकि, "सुरुचिपूर्ण" तेज है (यह कम चरणों में एचएएलटी पर पहुंचता है)। एल्गोरिथम विश्लेषण<ref>cf Knuth 1973:7 (Vol. I), and his more-detailed analyses on pp. 1969:294–313 (Vol II).</ref> इंगित करता है कि ऐसा क्यों है: "सुरुचिपूर्ण" प्रत्येक घटाव लूप में दो सशर्त परीक्षण करता है, जबकि "सुरुचिपूर्ण" केवल एक ही करता है। चूंकि एल्गोरिथम (आमतौर पर) को कई लूप थ्रू की आवश्यकता होती है, औसतन "बी = 0?" करने में बहुत समय बर्बाद होता है। परीक्षण जो शेष की गणना के बाद ही आवश्यक है।
लालित्य (कॉम्पैक्टनेस) बनाम अच्छाई (गति): केवल छह मुख्य निर्देशों के साथ, तेरह निर्देशों में "सुरुचिपूर्ण" की तुलना में "सुरुचिपूर्ण" स्पष्ट विजेता है। हालांकि, "सुरुचिपूर्ण" तेज है (यह कम चरणों में एचएएलटी पर पहुंचता है)। एल्गोरिथम विश्लेषण<ref>cf Knuth 1973:7 (Vol. I), and his more-detailed analyses on pp. 1969:294–313 (Vol II).</ref> इंगित करता है कि ऐसा क्यों है: "सुरुचिपूर्ण" प्रत्येक घटाव लूप में दो सशर्त परीक्षण करता है, जबकि "सुरुचिपूर्ण" केवल एक ही करता है। चूंकि एल्गोरिथम (आमतौर पर) को कई लूप की आवश्यकता होती है, औसतन "B = 0?" करने में बहुत समय बर्बाद होता है। परीक्षण जो शेष की गणना के बाद ही आवश्यक है।


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


पाँच चरणों को समाप्त करके "सुरुचिपूर्ण" की कॉम्पैक्टनेस में सुधार किया जा सकता है। लेकिन चैतिन ने साबित कर दिया कि एक एल्गोरिदम को संकुचित करना एक सामान्यीकृत एल्गोरिदम द्वारा स्वचालित नहीं किया जा सकता है; बल्कि, यह केवल अनुमान से ही किया जा सकता है;<ref>Breakdown occurs when an algorithm tries to compact itself. Success would solve the [[Halting problem]].</ref> यानी, संपूर्ण खोज (व्यस्त बीवर में पाए जाने वाले उदाहरण), परीक्षण और त्रुटि, चतुराई, अंतर्दृष्टि, आगमनात्मक तर्क का अनुप्रयोग, आदि। ध्यान दें कि चरण 4, 5 और 6 चरण 11, 12 और 13 में दोहराए गए हैं। "सुरुचिपूर्ण" के साथ तुलना एक संकेत प्रदान करती है कि चरण 2 और 3 के साथ इन चरणों को समाप्त किया जा सकता है। यह मूल निर्देशों की संख्या को तेरह से घटाकर आठ कर देता है, जो इसे नौ चरणों में "सुरुचिपूर्ण" की तुलना में "अधिक सुरुचिपूर्ण" बनाता है।
पाँच चरणों को समाप्त करके "सुरुचिपूर्ण" की कॉम्पैक्टनेस में सुधार किया जा सकता है। लेकिन चैतिन ने साबित कर दिया कि एक कलन विधि (एल्गोरिथ्म) को संकुचित करना एक सामान्यीकृत कलन विधि (एल्गोरिथ्म) द्वारा स्वचालित नहीं किया जा सकता है; बल्कि, यह केवल अनुमान से ही किया जा सकता है;<ref>Breakdown occurs when an algorithm tries to compact itself. Success would solve the [[Halting problem]].</ref> यानी, संपूर्ण खोज (व्यस्त बीवर में पाए जाने वाले उदाहरण), परीक्षण और त्रुटि, चतुराई, अंतर्दृष्टि, आगमनात्मक तर्क का अनुप्रयोग, आदि। ध्यान दें कि चरण 4, 5 और 6 चरण 11, 12 और 13 में दोहराए गए हैं। "सुरुचिपूर्ण" के साथ तुलना एक संकेत प्रदान करती है कि चरण 2 और 3 के साथ इन चरणों को समाप्त किया जा सकता है। यह मूल निर्देशों की संख्या को तेरह से घटाकर आठ कर देता है, जो इसे नौ चरणों में "सुरुचिपूर्ण" से "अधिक सुरुचिपूर्ण" बनाता है।


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


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


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


=== औपचारिक बनाम अनुभवजन्य ===
=== औपचारिक बनाम अनुभवजन्य ===
{{Main|Empirical algorithmics|Profiling (computer programming)|Program optimization}}
कलन विधि (एल्गोरिथ्म) का विश्लेषण और अध्ययन कंप्यूटर विज्ञान का एक अनुशासन है, और अक्सर एक विशिष्ट प्रोग्रामिंग भाषा या कार्यान्वयन के उपयोग के बिना अमूर्त रूप से अभ्यास किया जाता है। इस अर्थ में, एल्गोरिथम विश्लेषण अन्य गणितीय विषयों जैसा दिखता है इसमें यह एल्गोरिथम के अंतर्निहित गुणों पर ध्यान केंद्रित करता है न कि किसी विशेष कार्यान्वयन की बारीकियों पर। आमतौर पर छद्म कोड का उपयोग विश्लेषण के लिए किया जाता है क्योंकि यह सबसे सरल और सबसे सामान्य प्रतिनिधित्व है। हालांकि, अंततः, अधिकांश कलन विधि (एल्गोरिथ्म) आमतौर पर विशेष हार्डवेयर/सॉफ़्टवेयर प्लेटफ़ॉर्म पर लागू किए जाते हैं और उनकी एल्गोरिथम दक्षता को अंततः वास्तविक कोड का उपयोग करके परीक्षण के लिए रखा जाता है। "वन ऑफ" समस्या के समाधान के लिए, किसी विशेष कलन विधि (एल्गोरिथ्म) की दक्षता के महत्वपूर्ण परिणाम नहीं हो सकते हैं (जब तक कि n बहुत बड़ा न हो) लेकिन तेजी से इंटरैक्टिव, वाणिज्यिक या लंबे जीवन वैज्ञानिक उपयोग के लिए डिज़ाइन किए गए कलन विधि (एल्गोरिथ्म) के लिए यह महत्वपूर्ण हो सकता है। छोटे n से बड़े n में स्केलिंग अक्सर अक्षम कलन विधि (एल्गोरिथ्म) को उजागर करता है जो अन्यथा सौम्य होते हैं।
एल्गोरिदम का विश्लेषण और अध्ययन कंप्यूटर विज्ञान का एक अनुशासन है, और अक्सर एक विशिष्ट प्रोग्रामिंग भाषा या कार्यान्वयन के उपयोग के बिना अमूर्त रूप से अभ्यास किया जाता है। इस अर्थ में, एल्गोरिथ्म विश्लेषण अन्य गणितीय विषयों से मिलता -जुलता है जिसमें यह एल्गोरिथ्म के अंतर्निहित गुणों पर केंद्रित है, न कि किसी विशेष कार्यान्वयन की बारीकियों पर। आमतौर पर स्यूडोकोड का उपयोग विश्लेषण के लिए किया जाता है क्योंकि यह सबसे सरल और सबसे सामान्य प्रतिनिधित्व है। हालांकि, अंततः, अधिकांश एल्गोरिदम आमतौर पर विशेष हार्डवेयर/सॉफ्टवेयर प्लेटफार्मों पर लागू किए जाते हैं और उनकी एल्गोरिथम दक्षता को अंततः वास्तविक कोड का उपयोग करके परीक्षण में डाल दिया जाता है। एक ऑफ समस्या के समाधान के लिए, एक विशेष एल्गोरिथ्म की दक्षता के महत्वपूर्ण परिणाम नहीं हो सकते हैं (जब तक कि एन बहुत बड़ा नहीं है) लेकिन तेजी से इंटरैक्टिव, वाणिज्यिक या लंबे जीवन वैज्ञानिक उपयोग के लिए डिज़ाइन किए गए एल्गोरिदम के लिए यह महत्वपूर्ण हो सकता है। छोटे एन से बड़े एन तक स्केलिंग अक्सर अक्षम एल्गोरिदम को उजागर करती है जो अन्यथा सौम्य हैं।


अनुभवजन्य परीक्षण उपयोगी है क्योंकि यह अप्रत्याशित बातचीत को उजागर कर सकता है जो प्रदर्शन को प्रभावित करता है। कार्यक्रम अनुकूलन के बाद एल्गोरिथ्म के संभावित सुधारों से पहले/बाद की तुलना करने के लिए बेंचमार्क का उपयोग किया जा सकता है।
अनुभवजन्य परीक्षण उपयोगी है क्योंकि यह अप्रत्याशित अंतःक्रियाओं को उजागर कर सकता है जो प्रदर्शन को प्रभावित करते हैं। '''प्रोग्राम ऑप्टिमाइजेशन (Programming Optimization)''' के बाद किसी एल्गोरिथम में संभावित सुधारों से पहले/बाद में तुलना करने के लिए बेंचमार्क का उपयोग किया जा सकता है। '''अनुभवजन्य परीक्षण''' औपचारिक विश्लेषण की जगह नहीं ले सकते, हालांकि, और निष्पक्ष तरीके से प्रदर्शन करने के लिए तुच्छ नहीं हैं।<ref name="KriegelSchubert2016">{{cite journal|last1=Kriegel|first1=Hans-Peter|author-link=Hans-Peter Kriegel|last2=Schubert|first2=Erich|last3=Zimek|first3=Arthur|author-link3=Arthur Zimek|title=The (black) art of run-time evaluation: Are we comparing algorithms or implementations?|journal=Knowledge and Information Systems|volume=52|issue=2|year=2016|pages=341–378|issn=0219-1377|doi=10.1007/s10115-016-1004-2|s2cid=40772241}}</ref>
अनुभवजन्य परीक्षण औपचारिक विश्लेषण को प्रतिस्थापित नहीं कर सकते हैं, हालांकि, और उचित तरीके से प्रदर्शन करने के लिए तुच्छ नहीं हैं।<ref name="KriegelSchubert2016">{{cite journal|last1=Kriegel|first1=Hans-Peter|author-link=Hans-Peter Kriegel|last2=Schubert|first2=Erich|last3=Zimek|first3=Arthur|author-link3=Arthur Zimek|title=The (black) art of run-time evaluation: Are we comparing algorithms or implementations?|journal=Knowledge and Information Systems|volume=52|issue=2|year=2016|pages=341–378|issn=0219-1377|doi=10.1007/s10115-016-1004-2|s2cid=40772241}}</ref>


=== निष्पादन दक्षता ====
=== निष्पादन दक्षता ===
{{Main|Algorithmic efficiency}}
अच्छी तरह से स्थापित कलन विधि (एल्गोरिथ्म) में भी संभावित सुधारों को स्पष्ट करने के लिए, '''एफएफटी (FFT) कलन विधि (एल्गोरिथ्म)''' से संबंधित एक हालिया महत्वपूर्ण नवाचार (छवि प्रसंस्करण के क्षेत्र में भारी उपयोग किया जाता है), चिकित्सा इमेजिंग जैसे अनुप्रयोगों के लिए आईटी (IT) प्रसंस्करण समय को 1,000 गुना तक कम कर सकता है।<ref>{{cite web| title=Better Math Makes Faster Data Networks| author=Gillian Conahan| date=January 2013| url=http://discovermagazine.com/2013/jan-feb/34-better-math-makes-faster-data-networks| publisher=discovermagazine.com| access-date=May 13, 2014| archive-url=https://web.archive.org/web/20140513212427/http://discovermagazine.com/2013/jan-feb/34-better-math-makes-faster-data-networks| archive-date=May 13, 2014| url-status=live}}</ref> सामान्य तौर पर, गति में सुधार समस्या के विशेष गुणों पर निर्भर करता है, जो व्यावहारिक अनुप्रयोगों में बहुत आम हैं।<ref name="Hassanieh12">Haitham Hassanieh, [[Piotr Indyk]], Dina Katabi, and Eric Price, "[http://siam.omnibooksonline.com/2012SODA/data/papers/500.pdf ACM-SIAM Symposium On Discrete Algorithms (SODA)] {{webarchive|url=https://web.archive.org/web/20130704180806/http://siam.omnibooksonline.com/2012SODA/data/papers/500.pdf |date=July 4, 2013 }}, Kyoto, January 2012. See also the [http://groups.csail.mit.edu/netmit/sFFT/ sFFT Web Page] {{Webarchive|url=https://web.archive.org/web/20120221145740/http://groups.csail.mit.edu/netmit/sFFT/ |date=February 21, 2012 }}.</ref> इस परिमाण के स्पीडअप कंप्यूटिंग उपकरणों को सक्षम करते हैं जो कम बिजली की खपत के लिए इमेज प्रोसेसिंग (जैसे डिजिटल कैमरा और चिकित्सा उपकरण) का व्यापक उपयोग करते हैं।
अच्छी तरह से स्थापित एल्गोरिदम में भी संभावित सुधारों को स्पष्ट करने के लिए, हाल ही में एक महत्वपूर्ण नवाचार, एफएफटी एल्गोरिदम (छवि प्रसंस्करण के क्षेत्र में भारी उपयोग किया जाता है) से संबंधित, चिकित्सा इमेजिंग जैसे अनुप्रयोगों के लिए 1,000 गुना तक प्रसंस्करण समय को कम कर सकता है।<ref>{{cite web| title=Better Math Makes Faster Data Networks| author=Gillian Conahan| date=January 2013| url=http://discovermagazine.com/2013/jan-feb/34-better-math-makes-faster-data-networks| publisher=discovermagazine.com| access-date=May 13, 2014| archive-url=https://web.archive.org/web/20140513212427/http://discovermagazine.com/2013/jan-feb/34-better-math-makes-faster-data-networks| archive-date=May 13, 2014| url-status=live}}</ref>सामान्य तौर पर, गति में सुधार समस्या के विशेष गुणों पर निर्भर करता है, जो व्यावहारिक अनुप्रयोगों में बहुत आम हैं।<ref name="Hassanieh12">Haitham Hassanieh, [[Piotr Indyk]], Dina Katabi, and Eric Price, "[http://siam.omnibooksonline.com/2012SODA/data/papers/500.pdf ACM-SIAM Symposium On Discrete Algorithms (SODA)] {{webarchive|url=https://web.archive.org/web/20130704180806/http://siam.omnibooksonline.com/2012SODA/data/papers/500.pdf |date=July 4, 2013 }}, Kyoto, January 2012. See also the [http://groups.csail.mit.edu/netmit/sFFT/ sFFT Web Page] {{Webarchive|url=https://web.archive.org/web/20120221145740/http://groups.csail.mit.edu/netmit/sFFT/ |date=February 21, 2012 }}.</ref>इस परिमाण के स्पीडअप कंप्यूटिंग उपकरणों को सक्षम करते हैं जो कम शक्ति का उपभोग करने के लिए छवि प्रसंस्करण (जैसे डिजिटल कैमरा और चिकित्सा उपकरण) का व्यापक उपयोग करते हैं।


== वर्गीकरण ==
== वर्गीकरण ==
एल्गोरिदम को वर्गीकृत करने के विभिन्न तरीके हैं, प्रत्येक अपने गुण के साथ।
कलन विधि (एल्गोरिथ्म) को वर्गीकृत करने के कई तरीके हैं, जिनमें से प्रत्येक की अपनी खूबियां हैं।


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


{| style="float:right; width:200pt;"
{| style="float:right; width:200pt;"
Line 349: Line 335:
</syntaxhighlight>
</syntaxhighlight>
|-
|-
| Recursive [[C (programming language)|C]] implementation of Euclid's algorithm from the [[#lead|above]] flowchart
| उपरोक्त फ़्लोचार्ट ([[#lead|above]] flowchart) से यूक्लिड के कलन विधि (एल्गोरिथ्म) का पुनरावर्ती सी ([[C (programming language)|C]]) कार्यान्वयन
|}
|}
;प्रत्यावर्तन
;प्रत्यावर्तन
: एक पुनरावर्ती एल्गोरिथ्म वह है जो एक निश्चित स्थिति (जिसे समाप्ति की स्थिति के रूप में भी जाना जाता है) मेल नहीं खाता है, जब तक कि कार्यात्मक प्रोग्रामिंग के लिए एक सामान्य विधि है।Iterative एल्गोरिदम लूप और कभी -कभी अतिरिक्त डेटा संरचनाओं जैसे दोहरावदार निर्माणों का उपयोग करते हैं जैसे कि दिए गए समस्याओं को हल करने के लिए ढेर।कुछ समस्याएं स्वाभाविक रूप से एक कार्यान्वयन या दूसरे के लिए अनुकूल हैं।उदाहरण के लिए, हनोई के टावरों को पुनरावर्ती कार्यान्वयन का उपयोग करके अच्छी तरह से समझा जाता है।प्रत्येक पुनरावर्ती संस्करण में एक समकक्ष (लेकिन संभवतः अधिक या कम जटिल) पुनरावृत्त संस्करण होता है, और इसके विपरीत।
: एक '''पुनरावर्ती कलन विधि (एल्गोरिथ्म)''' वह है जो एक निश्चित स्थिति (जिसे '''टर्मिनेशन कंडीशन''' के रूप में भी जाना जाता है) से मेल खाने तक बार-बार खुद को इनवॉइस (संदर्भित करता है) करता है, जो कार्यात्मक प्रोग्रामिंग के लिए एक सामान्य विधि है। पुनरावृत्त कलन विधि (एल्गोरिथ्म) दी गई समस्याओं को हल करने के लिए लूप और कभी-कभी अतिरिक्त डेटा संरचनाओं जैसे स्टैक जैसे दोहराव वाले निर्माणों का उपयोग करते हैं। कुछ समस्याएं एक कार्यान्वयन या दूसरे के लिए स्वाभाविक रूप से अनुकूल हैं। उदाहरण के लिए, हनोई के टावरों को पुनरावर्ती कार्यान्वयन का उपयोग करके अच्छी तरह से समझा जाता है। प्रत्येक पुनरावर्ती संस्करण में एक समकक्ष (लेकिन संभवतः अधिक या कम जटिल) पुनरावृत्त संस्करण होता है, और इसके विपरीत।
;तार्किक
;तार्किक
: एक एल्गोरिथ्म को नियंत्रित तार्किक कटौती के रूप में देखा जा सकता है।इस धारणा को इस प्रकार व्यक्त किया जा सकता है: एल्गोरिथ्म = लॉजिक + कंट्रोल।<ref>Kowalski 1979</ref>लॉजिक घटक उन स्वयंसिद्धों को व्यक्त करता है जो गणना में उपयोग किए जा सकते हैं और नियंत्रण घटक उस तरीके को निर्धारित करता है जिसमें कटौती को स्वयंसिद्धों पर लागू किया जाता है। यह तर्क प्रोग्रामिंग प्रतिमान का आधार है। शुद्ध तर्क प्रोग्रामिंग भाषाओं में, नियंत्रण घटक तय किया जाता है और एल्गोरिदम केवल तर्क घटक की आपूर्ति करके निर्दिष्ट किया जाता है। इस दृष्टिकोण की अपील सुरुचिपूर्ण शब्दार्थ है: स्वयंसिद्धों में एक परिवर्तन एल्गोरिथ्म में एक अच्छी तरह से परिभाषित परिवर्तन पैदा करता है।
: एक कलन विधि (एल्गोरिथ्म) को नियंत्रित तार्किक कटौती के रूप में देखा जा सकता है। इस धारणा को इस प्रकार व्यक्त किया जा सकता है: '''एल्गोरिथम = तर्क + नियंत्रण'''।<ref>Kowalski 1979</ref> तर्क घटक उन अभिगृहीतों को व्यक्त करता है जिनका उपयोग गणना में किया जा सकता है और नियंत्रण घटक उस तरीके को निर्धारित करता है जिसमें कटौती को स्वयंसिद्धों पर लागू किया जाता है। यह तर्क प्रोग्रामिंग प्रतिमान का आधार है। शुद्ध तर्क प्रोग्रामिंग भाषाओं में, नियंत्रण घटक तय होता है और कलन विधि (एल्गोरिथ्म) केवल तर्क घटक की आपूर्ति करके निर्दिष्ट किया जाता है। इस दृष्टिकोण की अपील सुरुचिपूर्ण शब्दार्थ है: अभिगृहीतों में परिवर्तन एल्गोरिथम में एक सुपरिभाषित परिवर्तन उत्पन्न करता है।
; धारावाहिक, समानांतर या वितरित
; धारावाहिक, समानांतर या वितरित
: एल्गोरिदम को आमतौर पर इस धारणा के साथ चर्चा की जाती है कि कंप्यूटर एक समय में एक एल्गोरिथ्म के एक निर्देश को निष्पादित करते हैं। उन कंप्यूटरों को कभी -कभी सीरियल कंप्यूटर कहा जाता है। इस तरह के वातावरण के लिए डिज़ाइन किए गए एक एल्गोरिथ्म को एक सीरियल एल्गोरिथ्म कहा जाता है, समानांतर एल्गोरिदम या वितरित एल्गोरिदम के विपरीत। समानांतर एल्गोरिदम कंप्यूटर आर्किटेक्चर का लाभ उठाते हैं जहां कई प्रोसेसर एक ही समय में एक समस्या पर काम कर सकते हैं, जबकि वितरित एल्गोरिदम कंप्यूटर नेटवर्क से जुड़ी कई मशीनों का उपयोग करते हैं। समानांतर या वितरित एल्गोरिदम समस्या को अधिक सममित या विषम उपप्रकारों में विभाजित करते हैं और परिणामों को एक साथ एकत्र करते हैं। ऐसे एल्गोरिदम में संसाधन की खपत न केवल प्रत्येक प्रोसेसर पर प्रोसेसर चक्र है, बल्कि प्रोसेसर के बीच संचार ओवरहेड भी है। कुछ छँटाई एल्गोरिदम को कुशलता से समानांतर किया जा सकता है, लेकिन उनका संचार ओवरहेड महंगा है। Iterative एल्गोरिदम आम तौर पर समानांतर होते हैं। कुछ समस्याओं में कोई समानांतर एल्गोरिदम नहीं होता है और इसे स्वाभाविक रूप से धारावाहिक समस्याएं कहा जाता है।
: कलन विधि (एल्गोरिथ्म) की चर्चा आमतौर पर इस धारणा के साथ की जाती है कि कंप्यूटर एक समय में एक एल्गोरिथम के एक निर्देश को निष्पादित करते हैं। उन कंप्यूटरों को कभी-कभी सीरियल कंप्यूटर कहा जाता है। समानांतर कलन विधि (एल्गोरिथ्म) या वितरित कलन विधि (एल्गोरिथ्म) के विपरीत, ऐसे वातावरण के लिए डिज़ाइन किए गए कलन विधि (एल्गोरिथ्म) को सीरियल कलन विधि (एल्गोरिथ्म) कहा जाता है। समानांतर कलन विधि (एल्गोरिथ्म) कंप्यूटर आर्किटेक्चर का लाभ उठाते हैं जहां एक ही समय में कई प्रोसेसर एक समस्या पर काम कर सकते हैं, जबकि वितरित कलन विधि (एल्गोरिथ्म) एक कंप्यूटर नेटवर्क से जुड़ी कई मशीनों का उपयोग करते हैं। समानांतर या वितरित कलन विधि (एल्गोरिथ्म) समस्या को अधिक सममित या विषम उपसमस्याओं में विभाजित करते हैं और परिणामों को एक साथ वापस एकत्र करते हैं। ऐसे कलन विधि (एल्गोरिथ्म) में संसाधन की खपत न केवल प्रत्येक प्रोसेसर पर प्रोसेसर चक्र है, बल्कि प्रोसेसर के बीच संचार ओवरहेड भी है। कुछ छँटाई कलन विधि (एल्गोरिथ्म) को कुशलतापूर्वक समानांतर किया जा सकता है, लेकिन उनका संचार ओवरहेड महंगा है। '''पुनरावृत्त कलन विधि (एल्गोरिथ्म)''' आम तौर पर समानांतर होते हैं। कुछ समस्याओं में समानांतर कलन विधि (एल्गोरिथ्म) नहीं होते हैं और उन्हें स्वाभाविक रूप से धारावाहिक समस्याएं कहा जाता है।
; नियतात्मक या गैर-नियतात्मक
; नियतात्मक या गैर-नियतात्मक
: नियतात्मक एल्गोरिदम एल्गोरिथ्म के प्रत्येक चरण में सटीक निर्णय के साथ समस्या को हल करते हैं जबकि गैर-नियतात्मक एल्गोरिदम अनुमान के माध्यम से समस्याओं को हल करते हैं, हालांकि विशिष्ट अनुमानों को हेयूरिस्टिक्स के उपयोग के माध्यम से अधिक सटीक बनाया जाता है।
: '''नियतात्मक कलन विधि (एल्गोरिथ्म)''' एल्गोरिथम के हर चरण पर सटीक निर्णय के साथ समस्या का समाधान करते हैं जबकि गैर नियतात्मक कलन विधि (एल्गोरिथ्म) अनुमान के माध्यम से समस्याओं का समाधान करते हैं, हालांकि विशिष्ट अनुमान अनुमानों के उपयोग के माध्यम से अधिक सटीक होते हैं।
; सटीक या अनुमानित
; सटीक या अनुमानित
: जबकि कई एल्गोरिदम एक सटीक समाधान तक पहुंचते हैं, सन्निकटन एल्गोरिदम एक सन्निकटन की तलाश करते हैं जो सही समाधान के करीब है। सन्निकटन को या तो एक नियतात्मक या यादृच्छिक रणनीति का उपयोग करके पहुंचा जा सकता है। इस तरह के एल्गोरिदम में कई कठिन समस्याओं के लिए व्यावहारिक मूल्य है। एक अनुमानित एल्गोरिथ्म के उदाहरणों में से एक नैप्सैक समस्या है, जहां दी गई वस्तुओं का एक सेट है। इसका लक्ष्य अधिकतम कुल मूल्य प्राप्त करने के लिए नैप्सैक को पैक करना है। प्रत्येक आइटम में कुछ वजन और कुछ मूल्य होते हैं। कुल वजन जो किया जा सकता है वह कुछ निश्चित संख्या X से अधिक नहीं है। इसलिए, समाधान को वस्तुओं के वजन के साथ -साथ उनके मूल्य पर भी विचार करना चाहिए।<ref>{{Cite book|url=https://www.springer.com/us/book/9783540402862|title=Knapsack Problems {{!}} Hans Kellerer {{!}} Springer|language=en|isbn=978-3-540-40286-2|publisher=Springer|year=2004|doi=10.1007/978-3-540-24777-7|access-date=September 19, 2017|archive-url=https://web.archive.org/web/20171018181055/https://www.springer.com/us/book/9783540402862|archive-date=October 18, 2017|url-status=live|last1=Kellerer|first1=Hans|last2=Pferschy|first2=Ulrich|last3=Pisinger|first3=David}}</ref>;मात्रा का एल्गोरिथ्म
: जबकि कई कलन विधि (एल्गोरिथ्म) एक सटीक समाधान तक पहुंचते हैं, सन्निकटन कलन विधि (एल्गोरिथ्म) एक ऐसा सन्निकटन चाहते हैं जो वास्तविक समाधान के करीब हो। नियतात्मक या यादृच्छिक रणनीति का उपयोग करके सन्निकटन तक पहुँचा जा सकता है। इस तरह के कलन विधि (एल्गोरिथ्म) का कई कठिन समस्याओं के लिए व्यावहारिक मूल्य है अनुमानित एल्गोरिथम के उदाहरणों में से एक है नॅप्सैक समस्या, जहां दी गई वस्तुओं का एक सेट है। इसका लक्ष्य अधिकतम कुल मूल्य प्राप्त करने के लिए नैपसैक पैक करना है। प्रत्येक वस्तु का कुछ वजन और मूल्य होता है। कुल भार जो वहन किया जा सकता है, कुछ निश्चित संख्या एक्स (X) से अधिक नहीं है। इसलिए, समाधान को वस्तुओं के वजन के साथ-साथ उनके मूल्य पर भी विचार करना चाहिए।<ref>{{Cite book|url=https://www.springer.com/us/book/9783540402862|title=Knapsack Problems {{!}} Hans Kellerer {{!}} Springer|language=en|isbn=978-3-540-40286-2|publisher=Springer|year=2004|doi=10.1007/978-3-540-24777-7|access-date=September 19, 2017|archive-url=https://web.archive.org/web/20171018181055/https://www.springer.com/us/book/9783540402862|archive-date=October 18, 2017|url-status=live|last1=Kellerer|first1=Hans|last2=Pferschy|first2=Ulrich|last3=Pisinger|first3=David}}</ref>
: वे क्वांटम कम्प्यूटेशन के एक यथार्थवादी मॉडल पर चलते हैं।यह शब्द आमतौर पर उन एल्गोरिदम के लिए उपयोग किया जाता है जो स्वाभाविक रूप से क्वांटम प्रतीत होते हैं, या क्वांटम कंप्यूटिंग की कुछ आवश्यक विशेषता जैसे क्वांटम सुपरपोजिशन या क्वांटम उलझाव का उपयोग करते हैं।
:'''मात्रा का कलन विधि (एल्गोरिथ्म)'''
: वे क्वांटम गणना के यथार्थवादी मॉडल पर चलते हैं। शब्द आमतौर पर उन कलन विधि (एल्गोरिथ्म) के लिए उपयोग किया जाता है जो स्वाभाविक रूप से क्वांटम लगते हैं, या क्वांटम कंप्यूटिंग की कुछ आवश्यक विशेषता का उपयोग करते हैं जैसे क्वांटम सुपरपोजिशन या क्वांटम उलझाव।


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


;ब्रूट-फोर्स सर्च | ब्रूट-फोर्स या एग्जॉस्टिव सर्च
;ब्रूट-फोर्स या एग्जॉस्टिव सर्च
: यह भोला एल्गोरिथ्म है। यह देखने के लिए हर संभव समाधान की कोशिश करने की भोली विधि है जो सबसे अच्छा है।<ref>{{cite book| last1 = Carroll| first1 = Sue| last2 = Daughtrey| first2 = Taz| title = Fundamental Concepts for the Software Quality Engineer| url = https://books.google.com/books?id=bz_cl3B05IcC&pg=PA282| date = July 4, 2007| publisher = American Society for Quality| isbn = 978-0-87389-720-4| pages = 282 et seq }}</ref>; फूट डालो और राज करो
: यह देखने के लिए कि कौन सा सबसे अच्छा है, हर संभव समाधान की कोशिश करने का यह भोला तरीका है।<ref>{{cite book| last1 = Carroll| first1 = Sue| last2 = Daughtrey| first2 = Taz| title = Fundamental Concepts for the Software Quality Engineer| url = https://books.google.com/books?id=bz_cl3B05IcC&pg=PA282| date = July 4, 2007| publisher = American Society for Quality| isbn = 978-0-87389-720-4| pages = 282 et seq }}</ref>
: एक डिवाइड-एंड-कॉनकोर एल्गोरिथ्म बार-बार एक समस्या के एक उदाहरण को कम कर देता है, एक ही समस्या के एक या अधिक छोटे उदाहरणों (आमतौर पर पुनरावर्ती) तक जब तक कि उदाहरण आसानी से हल करने के लिए पर्याप्त छोटे न हो। विभाजन और विजय का एक ऐसा उदाहरण विलय की छंटाई है। डेटा को विभाजित करने के बाद डेटा के प्रत्येक सेगमेंट पर सॉर्टिंग किया जा सकता है और पूरे डेटा को सॉर्टिंग सेगमेंट में विलय करके विजेता चरण में प्राप्त किया जा सकता है। डिवाइड और विजेता के एक सरल संस्करण को एक कमी-और-कॉनकर एल्गोरिथ्म कहा जाता है, जो एक समान उपप्रोबल को हल करता है और बड़ी समस्या को हल करने के लिए इस उपप्रकार के समाधान का उपयोग करता है। विभाजित और विजय समस्या को कई उपप्रकारों में विभाजित करता है और इसलिए विजय चरण में कमी और विजय प्राप्त करने की तुलना में अधिक जटिल है। कमी और विजय एल्गोरिथ्म का एक उदाहरण बाइनरी सर्च एल्गोरिथ्म है।
:'''विभक्त करो  और अधिकार करो (डिवाइड एंड कौंकर)'''
: एक '''विभक्त करो  और अधिकार करो (डिवाइड एंड कौंकर)''' कलन विधि (एल्गोरिथ्म) बार-बार किसी समस्या के उदाहरण को एक ही समस्या के एक या अधिक छोटे उदाहरणों में कम कर देता है (आमतौर पर पुनरावर्ती) यह तब तक है जब तक कि उदाहरण आसानी से हल करने के लिए पर्याप्त छोटे न हों। विभक्त करो  और अधिकार करो (डिवाइड एंड कौंकर) का ऐसा ही एक उदाहरण '''मर्ज सॉर्टिंग(Merge Sorting)''' है। डेटा को खंडों में विभाजित करने के बाद डेटा के प्रत्येक खंड पर छँटाई की जा सकती है और संपूर्ण डेटा की छँटाई खंडों को मर्ज करके विजय चरण में प्राप्त की जा सकती है। विभक्त करो  और अधिकार करो (डिवाइड एंड कौंकर) के एक सरल संस्करण को कमी और जीत एल्गोरिथम कहा जाता है, जो एक समान उप-समस्या को हल करता है और बड़ी समस्या को हल करने के लिए इस उप-समस्या के समाधान का उपयोग करता है। विभाजित करें और जीतें समस्या को कई उप-समस्याओं में विभाजित करता है और इसलिए जीत की अवस्था घटने और जीतने वाले कलन विधि (एल्गोरिथ्म) की तुलना में अधिक जटिल है। कमी और जीत कलन विधि (एल्गोरिथ्म) का एक उदाहरण द्विआधारी खोज कलन विधि (एल्गोरिथ्म) है।
; खोज और गणना
; खोज और गणना
: कई समस्याओं (जैसे शतरंज खेलना) को रेखांकन पर समस्याओं के रूप में तैयार किया जा सकता है। एक ग्राफ एक्सप्लोरेशन एल्गोरिथ्म एक ग्राफ के चारों ओर घूमने के लिए नियमों को निर्दिष्ट करता है और ऐसी समस्याओं के लिए उपयोगी है। इस श्रेणी में खोज एल्गोरिदम, शाखा और बाध्य गणना और बैकट्रैकिंग भी शामिल हैं।
: कई समस्याओं (जैसे शतरंज खेलना) को ग्राफ़ पर समस्याओं के रूप में प्रतिरूपित किया जा सकता है। एक ग्राफ़ एक्सप्लोरेशन एल्गोरिथम एक ग्राफ़ के चारों ओर घूमने के लिए नियम निर्दिष्ट करता है और ऐसी समस्याओं के लिए उपयोगी है। इस श्रेणी में खोज कलन विधि (एल्गोरिथ्म), शाखा और बाध्य गणना और बैकट्रैकिंग भी शामिल है।
; यादृच्छिक एल्गोरिथ्म
; यादृच्छिक कलन विधि (एल्गोरिथ्म)
: इस तरह के एल्गोरिदम कुछ विकल्प बेतरतीब ढंग से (या छद्म-रैंडमली) बनाते हैं। वे समस्याओं के लिए अनुमानित समाधान खोजने में बहुत उपयोगी हो सकते हैं जहां सटीक समाधान खोजने से अव्यावहारिक हो सकता है (नीचे हेयुरिस्टिक विधि देखें)। इनमें से कुछ समस्याओं के लिए, यह ज्ञात है कि सबसे तेज़ अनुमानों में कुछ यादृच्छिकता शामिल होनी चाहिए।<ref>For instance, the [[volume]] of a [[convex polytope]] (described using a membership oracle) can be approximated to high accuracy by a randomized polynomial time algorithm, but not by a deterministic one: see {{citation
: इस तरह के कलन विधि (एल्गोरिथ्म) कुछ विकल्प बेतरतीब ढंग से (या छद्म यादृच्छिक रूप से) बनाते हैं। वे समस्याओं के अनुमानित समाधान खोजने में बहुत उपयोगी हो सकते हैं जहां सटीक समाधान खोजना अव्यावहारिक हो सकता है (नीचे अनुमानी विधि देखें)। इनमें से कुछ समस्याओं के लिए, यह ज्ञात है कि सबसे तेज़ सन्निकटन में कुछ यादृच्छिकता शामिल होनी चाहिए।<ref>For instance, the [[volume]] of a [[convex polytope]] (described using a membership oracle) can be approximated to high accuracy by a randomized polynomial time algorithm, but not by a deterministic one: see {{citation
  | last1 = Dyer | first1 = Martin
  | last1 = Dyer | first1 = Martin
  | last2 = Frieze | first2 = Alan
  | last2 = Frieze | first2 = Alan
Line 383: Line 371:
  | title = A Random Polynomial-time Algorithm for Approximating the Volume of Convex Bodies
  | title = A Random Polynomial-time Algorithm for Approximating the Volume of Convex Bodies
  | volume = 38| citeseerx = 10.1.1.145.4600| s2cid = 13268711
  | volume = 38| citeseerx = 10.1.1.145.4600| s2cid = 13268711
  }}.</ref>क्या बहुपद समय की जटिलता के साथ यादृच्छिक एल्गोरिदम कुछ समस्याओं के लिए सबसे तेज़ एल्गोरिदम हो सकता है, एक खुला प्रश्न है जिसे पी बनाम एनपी समस्या के रूप में जाना जाता है। ऐसे एल्गोरिदम के दो बड़े वर्ग हैं:
  }}.</ref> क्या बहुपद समय जटिलता वाले '''यादृच्छिक कलन विधि (एल्गोरिथ्म)''' कुछ समस्याओं के लिए सबसे तेज़ कलन विधि (एल्गोरिथ्म) हो सकते हैं, यह एक खुला प्रश्न है जिसे पी बनाम एनपी समस्या के रूप में जाना जाता है। ऐसे कलन विधि (एल्गोरिथ्म) के दो बड़े वर्ग हैं:
# मोंटे कार्लो एल्गोरिदम उच्च-संभावना के साथ एक सही उत्तर लौटाते हैं। उदा। आरपी इनमें से उपवर्ग है जो बहुपद समय में चलता है।
# मोंटे कार्लो कलन विधि (एल्गोरिथ्म) उच्च संभावना के साथ एक सही उत्तर देता है। उदाहरणतयः आरपी (RP) इनका उपवर्ग है जो बहुपद समय में चलता है।
# लास वेगास एल्गोरिदम हमेशा सही उत्तर लौटाता है, लेकिन उनका चलने का समय केवल संभावित रूप से बाध्य है, उदा। शून्य-त्रुटि संभाव्य बहुपद समय | ZPP
# लास वेगास कलन विधि (एल्गोरिथ्म) हमेशा सही उत्तर देता है, लेकिन उनके चलने का समय केवल संभाव्य रूप से बाध्य है, जैसे जेडपीपी (ZPP)।
; जटिलता में कमी
; जटिलता में कमी
: इस तकनीक में एक कठिन समस्या को एक बेहतर-ज्ञात समस्या में बदलकर हल करना शामिल है, जिसके लिए हमारे पास (उम्मीद है) एसिम्प्टोटिक रूप से इष्टतम एल्गोरिदम हैं। लक्ष्य एक कम करने वाले एल्गोरिथ्म को ढूंढना है जिसकी जटिलता परिणामस्वरूप कम एल्गोरिथ्म के हावी नहीं है। उदाहरण के लिए, एक अनसुना सूची में माध्यिका को खोजने के लिए एक चयन एल्गोरिथ्म में पहले सूची (महंगे भाग) को छांटना और फिर मध्य तत्व को क्रमबद्ध सूची (सस्ते भाग) में बाहर निकालना शामिल है। इस तकनीक को ट्रांसफॉर्म एंड कॉनक के रूप में भी जाना जाता है।
: इस तकनीक में एक कठिन समस्या को एक बेहतर ज्ञात समस्या में बदलकर हल करना शामिल है जिसके लिए हमारे पास (उम्मीद है) स्पर्शोन्मुख रूप से इष्टतम कलन विधि (एल्गोरिथ्म) हैं। इसका लक्ष्य एक मान कम करने वाले कलन विधि (एल्गोरिथ्म) को ढूंढना है जिसकी जटिलता परिणामी कम कलन विधि (एल्गोरिथ्म) का प्रभुत्व नहीं है। उदाहरण के लिए, एक क्रमबद्ध सूची में माध्यिका को खोजने के लिए एक चयन कलन विधि (एल्गोरिथ्म) में पहले सूची को छांटना शामिल है (महंगा भाग) और फिर मध्य तत्व को क्रमबद्ध सूची (सस्ता भाग) में खींच रहा है। इस तकनीक को परिवर्तन और जीत के रूप में भी जाना जाता है।
; बैक ट्रैकिंग
; बैक ट्रैकिंग
: इस दृष्टिकोण में, कई समाधानों को वृद्धिशील रूप से बनाया जाता है और जब यह निर्धारित किया जाता है कि वे एक वैध पूर्ण समाधान का नेतृत्व नहीं कर सकते हैं।
: इस दृष्टिकोण में, कई समाधान क्रमिक रूप से बनाए जाते हैं और छोड़ दिए जाते हैं जब यह निर्धारित किया जाता है कि वे एक वैध पूर्ण समाधान की ओर नहीं ले जा सकते हैं।


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


;रैखिक प्रोग्रामिंग
;रैखिक प्रोग्रामिंग
: जब रैखिक समानता और असमानता की बाधाओं के लिए बाध्य एक रैखिक फ़ंक्शन के लिए इष्टतम समाधानों की खोज करते हैं, तो समस्या की बाधाओं का उपयोग सीधे इष्टतम समाधानों के उत्पादन में किया जा सकता है।ऐसे एल्गोरिदम हैं जो इस श्रेणी में किसी भी समस्या को हल कर सकते हैं, जैसे कि लोकप्रिय सिम्प्लेक्स एल्गोरिथ्म।<ref>
: रैखिक समानता और असमानता बाधाओं से बंधे एक रैखिक कार्य के लिए इष्टतम समाधान खोजते समय, समस्या की बाधाओं का उपयोग सीधे इष्टतम समाधान तैयार करने में किया जा सकता है। ऐसे कलन विधि (एल्गोरिथ्म) हैं जो इस श्रेणी में किसी भी समस्या को हल कर सकते हैं, जैसे कि लोकप्रिय '''सिम्प्लेक्स एल्गोरिथम'''।<ref>
[[George B. Dantzig]] and Mukund N. Thapa. 2003. ''Linear Programming 2: Theory and Extensions''. Springer-Verlag.</ref>रैखिक प्रोग्रामिंग के साथ हल की जा सकने वाली समस्याओं में निर्देशित ग्राफ़ के लिए अधिकतम प्रवाह समस्या शामिल है। यदि किसी समस्या को अतिरिक्त रूप से आवश्यक है कि अज्ञात में से एक या अधिक एक पूर्णांक होना चाहिए, तो इसे पूर्णांक प्रोग्रामिंग में वर्गीकृत किया गया है। एक रैखिक प्रोग्रामिंग एल्गोरिथ्म इस तरह की समस्या को हल कर सकता है यदि यह साबित किया जा सकता है कि पूर्णांक मूल्यों के लिए सभी प्रतिबंध सतही हैं, अर्थात, समाधान वैसे भी इन प्रतिबंधों को संतुष्ट करते हैं। सामान्य मामले में, एक विशेष एल्गोरिथ्म या एक एल्गोरिथ्म जो अनुमानित समाधान पाता है, समस्या की कठिनाई के आधार पर उपयोग किया जाता है।
[[George B. Dantzig]] and Mukund N. Thapa. 2003. ''Linear Programming 2: Theory and Extensions''. Springer-Verlag.</ref> '''रैखिक प्रोग्रामिंग''' के साथ हल की जा सकने वाली समस्याओं में निर्देशित ग्राफ़ के लिए अधिकतम प्रवाह समस्या शामिल है। यदि किसी समस्या के लिए अतिरिक्त रूप से यह आवश्यक है कि एक या अधिक अज्ञात पूर्णांक हों तो इसे पूर्णांक प्रोग्रामिंग में वर्गीकृत किया जाता है। एक '''रैखिक प्रोग्रामिंग कलन विधि (एल्गोरिथ्म)''' ऐसी समस्या को हल कर सकता है यदि यह सिद्ध किया जा सकता है कि पूर्णांक मानों के लिए सभी प्रतिबंध सतही हैं, यानी, समाधान वैसे भी इन प्रतिबंधों को पूरा करते हैं। सामान्य मामले में, समस्या की कठिनाई के आधार पर, एक विशेष कलन विधि (एल्गोरिथ्म) या कलन विधि (एल्गोरिथ्म) जो अनुमानित समाधान ढूंढता है, का उपयोग किया जाता है।
; गतिशील प्रोग्रामिंग
; गतिशील प्रोग्रामिंग
: जब कोई समस्या इष्टतम सबस्ट्रक्चर दिखाती है - तो एक समस्या के इष्टतम समाधान का अर्थ है कि इष्टतम समाधानों से उपप्रकारों तक का निर्माण किया जा सकता है - और उपप्रकारों को ओवरलैप करने के लिए, जिसका अर्थ है कि समान उपप्रकारों का उपयोग कई अलग -अलग समस्याओं को हल करने के लिए किया जाता है, एक त्वरित दृष्टिकोण जिसे डायनेमिक प्रोग्रामिंग से बचने के लिए पुनरावृत्ति समाधान से बचता है जो पहले से ही गणना की जा चुकी है। उदाहरण के लिए, फ्लॉयड -वार्सल एल्गोरिथ्म, एक भारित ग्राफ में एक वर्टेक्स से एक लक्ष्य के लिए सबसे छोटा पथ सभी आसन्न कोने से लक्ष्य के लिए सबसे छोटे पथ का उपयोग करके पाया जा सकता है। डायनेमिक प्रोग्रामिंग और मेमोइजेशन एक साथ चलते हैं। गतिशील प्रोग्रामिंग और विभाजन और विजय के बीच मुख्य अंतर यह है कि उपप्रकार विभाजन और विजय में कम या ज्यादा स्वतंत्र हैं, जबकि सबप्रोबल्स डायनेमिक प्रोग्रामिंग में ओवरलैप करते हैं। गतिशील प्रोग्रामिंग और सीधे पुनरावर्तन के बीच का अंतर पुनरावर्ती कॉल के कैशिंग या मेमोइजेशन में है। जब उपप्रकार स्वतंत्र होते हैं और कोई पुनरावृत्ति नहीं होती है, तो मेमोइजेशन मदद नहीं करता है; इसलिए गतिशील प्रोग्रामिंग सभी जटिल समस्याओं के लिए एक समाधान नहीं है। पहले से ही हल किए गए उपप्रकारों की एक तालिका को मेमोइज़ेशन या बनाए रखने से, डायनामिक प्रोग्रामिंग बहुपद जटिलता के लिए कई समस्याओं की घातीय प्रकृति को कम कर देता है।
: जब कोई समस्या इष्टतम सबस्ट्रक्चर दिखाती है जिसका अर्थ है कि किसी समस्या का इष्टतम समाधान इष्टतम समाधान से उप-समस्याओं और अतिव्यापी उप-समस्याओं तक बनाया जा सकता है, जिसका अर्थ है कि एक ही उप-समस्या का उपयोग कई अलग-अलग समस्या उदाहरणों को हल करने के लिए किया जाता है, '''डायनेमिक प्रोग्रामिंग''' नामक एक त्वरित दृष्टिकोण पुनर्गणना समाधानों से बचा जाता है जिनकी गणना पहले ही की जा चुकी है। उदाहरण के लिए, फ़्लॉइड वारशॉल कलन विधि (एल्गोरिथ्म), एक भारित ग्राफ़ में एक शीर्ष से एक लक्ष्य के लिए सबसे छोटा पथ, सभी आसन्न कोने से लक्ष्य के लिए सबसे छोटा पथ का उपयोग करके पाया जा सकता है। गतिशील प्रोग्रामिंग और संस्मरण एक साथ चलते हैं। डायनेमिक प्रोग्रामिंग और डिवाइड एंड कॉनकॉन के बीच मुख्य अंतर यह है कि डिवाइड और जीत में उप-समस्याएं कमोबेश स्वतंत्र हैं, जबकि उप-समस्याएं गतिशील प्रोग्रामिंग में ओवरलैप होती हैं। डायनेमिक प्रोग्रामिंग और स्ट्रेट रिकर्सन के बीच का अंतर रिकर्सिव कॉल्स के कैशिंग या मेमोइज़ेशन में है। जब उप-समस्याएं स्वतंत्र होती हैं और कोई दोहराव नहीं होता है, तो संस्मरण मदद नहीं करता है; इसलिए गतिशील प्रोग्रामिंग सभी जटिल समस्याओं का समाधान नहीं है। संस्मरण का उपयोग करके या पहले से हल की गई उप-समस्याओं की तालिका को बनाए रखने से, गतिशील प्रोग्रामिंग कई समस्याओं की घातीय प्रकृति को बहुपद जटिलता तक कम कर देता है।
; लालची विधि
; लालची (ग्रीडी) विधि
: एक लालची एल्गोरिथ्म एक गतिशील प्रोग्रामिंग एल्गोरिथ्म के समान है जिसमें यह सबस्ट्रक्चर की जांच करके काम करता है, इस मामले में समस्या का नहीं बल्कि किसी दिए गए समाधान के लिए। इस तरह के एल्गोरिदम कुछ समाधान से शुरू होते हैं, जो किसी तरह से दिए गए या निर्मित किए जा सकते हैं, और छोटे संशोधन करके इसे सुधारते हैं। कुछ समस्याओं के लिए वे इष्टतम समाधान पा सकते हैं जबकि दूसरों के लिए वे स्थानीय ऑप्टिमा पर रुकते हैं, अर्थात्, समाधानों पर जो एल्गोरिथ्म द्वारा सुधार नहीं किया जा सकता है, लेकिन इष्टतम नहीं हैं। लालची एल्गोरिदम का सबसे लोकप्रिय उपयोग न्यूनतम फैले हुए पेड़ को खोजने के लिए है जहां इस विधि के साथ इष्टतम समाधान ढूंढना संभव है। हफमैन ट्री, क्रुस्कल का एल्गोरिथ्म | क्रुस्कल, प्राइम का एल्गोरिथ्म | प्राइम, सोलिन का एल्गोरिथ्म | सोलिन लालची एल्गोरिदम हैं जो इस अनुकूलन समस्या को हल कर सकते हैं।
: एक '''लालची (ग्रीडी) कलन विधि''' (एल्गोरिथ्म) एक गतिशील प्रोग्रामिंग कलन विधि (एल्गोरिथ्म) के समान है इसमें यह सबस्ट्रक्चर की जांच करके काम करता है, इस मामले में समस्या का नहीं बल्कि दिए गए समाधान का। ऐसे कलन विधि (एल्गोरिथ्म) कुछ समाधान से शुरू होते हैं, जो किसी तरह दिया या बनाया गया हो, और छोटे संशोधन करके इसे सुधारें। कुछ समस्याओं के लिए वे इष्टतम समाधान ढूंढ सकते हैं जबकि अन्य के लिए वे स्थानीय ऑप्टिमा पर रुक जाते हैं, यह उन समाधानों पर है जिन्हें एल्गोरिथम द्वारा सुधारा नहीं जा सकता है लेकिन इष्टतम नहीं हैं। '''लालची (ग्रीडी) कलन विधि''' (एल्गोरिथ्म) का सबसे लोकप्रिय उपयोग न्यूनतम फैले हुए पेड़ को खोजने के लिए है जहां इस पद्धति से इष्टतम समाधान खोजना संभव है। हफ़मैन ट्री, क्रुस्कल, प्राइम, सोलिन लालची (ग्रीडी) कलन विधि (एल्गोरिथ्म) हैं जो इस अनुकूलन समस्या को हल कर सकते हैं।
; हेयुरिस्टिक विधि
; हेयुरिस्टिक विधि
: अनुकूलन समस्याओं में, हेयुरिस्टिक एल्गोरिदम का उपयोग उन मामलों में इष्टतम समाधान के करीब एक समाधान खोजने के लिए किया जा सकता है जहां इष्टतम समाधान अव्यवहारिक है। ये एल्गोरिदम प्रगति के रूप में इष्टतम समाधान के करीब और करीब होकर काम करते हैं। सिद्धांत रूप में, यदि अनंत समय के लिए चलते हैं, तो वे इष्टतम समाधान पाएंगे। उनकी योग्यता यह है कि वे अपेक्षाकृत कम समय में इष्टतम समाधान के बहुत करीब एक समाधान पा सकते हैं। इस तरह के एल्गोरिदम में स्थानीय खोज, टैबू खोज, सिम्युलेटेड एनीलिंग और आनुवंशिक एल्गोरिदम शामिल हैं। उनमें से कुछ, जैसे सिम्युलेटेड एनीलिंग, गैर-नियतात्मक एल्गोरिदम हैं, जबकि अन्य, जैसे कि तबू खोज, नियतात्मक हैं। जब गैर-इष्टतम समाधान की त्रुटि पर एक बाउंड ज्ञात होता है, तो एल्गोरिथ्म को आगे एक सन्निकटन एल्गोरिथ्म के रूप में वर्गीकृत किया जाता है।
: अनुकूलन समस्याओं में, '''अनुमानी कलन विधि (एल्गोरिथ्म)''' का उपयोग मामलों में इष्टतम समाधान के करीब समाधान खोजने के लिए किया जा सकता है जहां इष्टतम समाधान खोजना अव्यावहारिक है। जैसे-जैसे वे आगे बढ़ते हैं, ये कलन विधि (एल्गोरिथ्म) इष्टतम समाधान के करीब और करीब पहुंचकर काम करते हैं। सिद्धांत रूप में, यदि अनंत समय तक चलाया जाता है, तो वे इष्टतम समाधान पाएंगे। उनकी योग्यता यह है कि वे अपेक्षाकृत कम समय में इष्टतम समाधान के बहुत करीब समाधान ढूंढ सकते हैं। इस तरह के कलन विधि (एल्गोरिथ्म) में स्थानीय खोज, टैबू खोज, नकली एनीलिंग और आनुवंशिक कलन विधि (एल्गोरिथ्म) शामिल हैं। उनमें से कुछ, जैसे सिम्युलेटेड एनीलिंग, गैर नियतात्मक कलन विधि (एल्गोरिथ्म) हैं जबकि अन्य, टैबू खोज की तरह, नियतात्मक हैं। जब गैर इष्टतम समाधान की त्रुटि पर बाध्यता ज्ञात हो, कलन विधि (एल्गोरिथ्म) को आगे एक '''सन्निकटन कलन विधि (एल्गोरिथ्म)''' के रूप में वर्गीकृत किया गया है।


=== अध्ययन के क्षेत्र द्वारा ===
=== अध्ययन के क्षेत्र द्वारा ===
{{See also|List of algorithms}}
विज्ञान के हर क्षेत्र की अपनी समस्याएं हैं और इसके लिए कुशल कलन विधि (एल्गोरिथ्म) की आवश्यकता होती है। एक क्षेत्र में संबंधित समस्याओं का अक्सर एक साथ अध्ययन किया जाता है। कुछ उदाहरण वर्ग खोज कलन विधि (एल्गोरिथ्म), सॉर्टिंग कलन विधि (एल्गोरिथ्म), मर्ज कलन विधि (एल्गोरिथ्म), संख्यात्मक कलन विधि (एल्गोरिथ्म), ग्राफ़ कलन विधि (एल्गोरिथ्म), स्ट्रिंग कलन विधि (एल्गोरिथ्म), कम्प्यूटेशनल ज्यामितीय कलन विधि (एल्गोरिथ्म), कॉम्बिनेटरियल कलन विधि (एल्गोरिथ्म), मेडिकल कलन विधि (एल्गोरिथ्म), मशीन लर्निंग, क्रिप्टोग्राफी, डेटा संपीड़न कलन विधि (एल्गोरिथ्म) और पार्सिंग तकनीक हैं।
विज्ञान के प्रत्येक क्षेत्र की अपनी समस्याएं हैं और उन्हें कुशल एल्गोरिदम की आवश्यकता है।एक क्षेत्र में संबंधित समस्याओं का अक्सर एक साथ अध्ययन किया जाता है।कुछ उदाहरण कक्षाएं खोज एल्गोरिदम, छंटनी एल्गोरिदम, मर्ज एल्गोरिदम, संख्यात्मक एल्गोरिदम, ग्राफ एल्गोरिदम, स्ट्रिंग एल्गोरिदम, कम्प्यूटेशनल ज्यामितीय एल्गोरिदम, कॉम्बिनेटरियल एल्गोरिदम, चिकित्सा एल्गोरिदम, मशीन लर्निंग, क्रिप्टोग्राफी, डेटा संपीड़न एल्गोरिदम और पार्सिंग तकनीक हैं।


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


=== जटिलता द्वारा ===
=== जटिलता द्वारा ===
{{See also|Complexity class| Parameterized complexity}}
कलन विधि (एल्गोरिथ्म) को समय की मात्रा द्वारा वर्गीकृत किया जा सकता है उन्हें अपने इनपुट आकार की तुलना में पूरा करने की आवश्यकता है:
एल्गोरिदम को अपने इनपुट आकार की तुलना में पूरा करने की आवश्यकता के समय से वर्गीकृत किया जा सकता है:
* '''निरंतर समय''': यदि इनपुट आकार की परवाह किए बिना कलन विधि (एल्गोरिथ्म) द्वारा आवश्यक समय समान है। उदा. एक सरणी तत्व तक पहुंच।
* निरंतर समय: यदि एल्गोरिथ्म द्वारा आवश्यक समय समान है, तो इनपुट आकार की परवाह किए बिना। उदा। एक सरणी तत्व तक पहुंच।
* '''लघुगणक समय''': यदि समय इनपुट आकार का लघुगणकीय कार्य है। उदा. द्विआधारी खोज कलन विधि (एल्गोरिथ्म)।
* लॉगरिदमिक समय: यदि समय इनपुट आकार का एक लॉगरिदमिक फ़ंक्शन है। उदा। बाइनरी सर्च एल्गोरिथ्म।
* '''रैखिक समय''': यदि समय इनपुट आकार के समानुपाती होता है। उदा. एक सूची का ट्रैवर्स।
* रैखिक समय: यदि समय इनपुट आकार के लिए आनुपातिक है। उदा। एक सूची का पार।
* '''बहुपद समय''': यदि समय इनपुट आकार की शक्ति है। उदा. बबल सॉर्ट कलन विधि (एल्गोरिथ्म) में द्विघात समय जटिलता है।
* बहुपद समय: यदि समय इनपुट आकार की शक्ति है। उदा। बुलबुला सॉर्ट एल्गोरिथ्म में द्विघात समय की जटिलता होती है।
* '''घातीय समय''': यदि समय इनपुट आकार का एक घातीय कार्य है। उदा. पाशविक बल खोज।
* घातीय समय: यदि समय इनपुट आकार का एक घातीय कार्य है। उदा। ब्रूट-फोर्स खोज।


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


=== निरंतर एल्गोरिदम ===
=== निरंतर कलन विधि (एल्गोरिथ्म) ===
शब्द एल्गोरिथ्म पर लागू होने पर विशेषण निरंतर का मतलब हो सकता है:
"कलन विधि (एल्गोरिथ्म)" शब्द पर लागू होने पर विशेषण "निरंतर" का अर्थ हो सकता है:
* डेटा पर काम करने वाला एक एल्गोरिथ्म जो निरंतर मात्रा का प्रतिनिधित्व करता है, भले ही इस डेटा को असतत अनुमानों द्वारा दर्शाया गया हो - ऐसे एल्गोरिदम को संख्यात्मक विश्लेषण में अध्ययन किया जाता है;या
* डेटा पर काम करने वाला एक कलन विधि (एल्गोरिथ्म) जो निरंतर मात्रा का प्रतिनिधित्व करता है, भले ही यह डेटा असतत अनुमानों द्वारा दर्शाया गया हो ऐसे कलन विधि (एल्गोरिथ्म) का संख्यात्मक विश्लेषण में अध्ययन किया जाता है; या
* एक अंतर समीकरण के रूप में एक एल्गोरिथ्म जो डेटा पर लगातार संचालित होता है, एक एनालॉग कंप्यूटर पर चल रहा है।<ref>{{cite book| author = Tsypkin| title = Adaptation and learning in automatic systems| url = https://books.google.com/books?id=sgDHJlafMskC&pg=PA54| year = 1971| publisher = Academic Press| isbn = 978-0-08-095582-7| page = 54 }}</ref>
* एक विभेदक समीकरण के रूप में एक कलन विधि (एल्गोरिथ्म) जो एनालॉग कंप्यूटर पर चलने वाले डेटा पर लगातार काम करता है।<ref>{{cite book| author = Tsypkin| title = Adaptation and learning in automatic systems| url = https://books.google.com/books?id=sgDHJlafMskC&pg=PA54| year = 1971| publisher = Academic Press| isbn = 978-0-08-095582-7| page = 54 }}</ref>


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


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


== इतिहास: एल्गोरिथ्म की धारणा का विकास ==
== इतिहास: कलन विधि (एल्गोरिथ्म) की धारणा का विकास ==


=== प्राचीन निकट पूर्व ===
=== प्राचीन निकट पूर्व ===
एल्गोरिदम का शुरुआती सबूत प्राचीन मेसोपोटामिया (आधुनिक इराक) के बेबीलोनियन गणित में पाया जाता है।बगदाद के पास शूरुप्पक में पाया गया एक सुमेरियन क्ले टैबलेट और 2500 ईसा पूर्व में दिनांकित था।<ref name="Springer Science & Business Media">{{cite book |last1=Chabert |first1=Jean-Luc |title=A History of Algorithms: From the Pebble to the Microchip |date=2012 |publisher=Springer Science & Business Media |isbn=9783642181924 |pages=7–8}}</ref>हम्मुराबी राजवंश के दौरान 1800-1600 ईसा पूर्व, बेबीलोनियन क्ले टैबलेट्स ने कंप्यूटिंग सूत्रों के लिए एल्गोरिदम का वर्णन किया।<ref>{{cite journal |last1=Knuth |first1=Donald E. |title=Ancient Babylonian Algorithms |journal=Commun. ACM |date=1972 |volume=15 |issue=7 |pages=671–677 |doi=10.1145/361454.361514 |s2cid=7829945 |url=http://steiner.math.nthu.edu.tw/disk5/js/computer/1.pdf |archive-url=https://web.archive.org/web/20121224100137/http://steiner.math.nthu.edu.tw/disk5/js/computer/1.pdf |url-status=dead |archive-date=2012-12-24 |issn=0001-0782}}</ref>बाबुल के खगोल विज्ञान में एल्गोरिदम का भी उपयोग किया गया था।बेबीलोनियन क्ले टैबलेट महत्वपूर्ण खगोलीय घटनाओं के समय और स्थान की गणना करने के लिए एल्गोरिथम प्रक्रियाओं का वर्णन और नियोजित करते हैं।<ref>{{Citation | last = Aaboe | first = Asger | author-link = Asger Aaboe | date = 2001 | title = Episodes from the Early History of Astronomy | publisher = Springer | place = New York | pages = 40–62 | isbn = 978-0-387-95136-2 }}</ref>
कलन विधि (एल्गोरिथ्म) का सबसे पहला प्रमाण प्राचीन मेसोपोटामिया (आधुनिक इराक) के बेबीलोन के गणित में मिलता है। बगदाद के पास शुरुप्पक में मिली एक सुमेरियन मिट्टी की गोली और लगभग 2500 ईसा पूर्व की है, जो सबसे पहले विभाजन कलन विधि (एल्गोरिथ्म) का वर्णन करती है।<ref name="Springer Science & Business Media" /> हम्मुराबी राजवंश के दौरान लगभग 1800-1600 ईसा पूर्व, बेबीलोन की मिट्टी की गोलियों ने सूत्रों की गणना के लिए कलन विधि (एल्गोरिथ्म) का वर्णन किया।<ref>{{cite journal |last1=Knuth |first1=Donald E. |title=Ancient Babylonian Algorithms |journal=Commun. ACM |date=1972 |volume=15 |issue=7 |pages=671–677 |doi=10.1145/361454.361514 |s2cid=7829945 |url=http://steiner.math.nthu.edu.tw/disk5/js/computer/1.pdf |archive-url=https://web.archive.org/web/20121224100137/http://steiner.math.nthu.edu.tw/disk5/js/computer/1.pdf |url-status=dead |archive-date=2012-12-24 |issn=0001-0782}}</ref> एल्गोरिथम का उपयोग बेबीलोन के खगोल विज्ञान में भी किया जाता था। बेबीलोन की मिट्टी की गोलियां महत्वपूर्ण खगोलीय घटनाओं के समय और स्थान की गणना करने के लिए कलन विधि (एल्गोरिथ्म) प्रक्रियाओं का वर्णन और उपयोग करती हैं।<ref>{{Citation | last = Aaboe | first = Asger | author-link = Asger Aaboe | date = 2001 | title = Episodes from the Early History of Astronomy | publisher = Springer | place = New York | pages = 40–62 | isbn = 978-0-387-95136-2 }}</ref>


अंकगणित के लिए एल्गोरिदम भी प्राचीन मिस्र के गणित में पाए जाते हैं, जो कि Rhind गणितीय पपीरस लगभग 1550 ईसा पूर्व में डेटिंग करते हैं।<ref name="Springer Science & Business Media"/> 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]],<ref>{{cite web|url=http://www.math.wichita.edu/history/men/eratosthenes.html|title=Eratosthenes|publisher=Wichita State University: Department of Mathematics and Statistics|first=Courtney|last=Ast|access-date=February 27, 2015|archive-url=https://web.archive.org/web/20150227150653/http://www.math.wichita.edu/history/men/eratosthenes.html|archive-date=February 27, 2015|url-status=live}}</ref><ref नाम = cooke2005/>{{rp|Ch 9.2}} और यूक्लिडियन एल्गोरिथ्म, जिसे पहले यूक्लिड के तत्वों (सी। 300 ईसा पूर्व) में वर्णित किया गया था।<ref नाम = cooke2005/>{{rp|Ch 9.1}}
अंकगणित के लिए एल्गोरिथम प्राचीन मिस्र के गणित में भी पाए जाते हैं, जो लगभग 1550 ई.पू. बाद में प्राचीन हेलेनिस्टिक गणित ([[Hellenistic mathematics]]) में कलन विधि (एल्गोरिथ्म) का उपयोग किया गया।<ref name="Springer Science & Business Media"/> इरेटोस्थनीज की छलनी([[Sieve of Eratosthenes]]) के दो उदाहरण हैं, जिसका वर्णन निकोमाचस ([[Nicomachus]]) द्वारा अंकगणित के परिचय में किया गया था, यूक्लिडियन एल्गोरिथम (''[[Introduction to Arithmetic]])'', जिसे पहली बार यूक्लिड के तत्वों (सी. 300 ईसा पूर्व) में वर्णित किया गया था


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


=== संख्याओं के लिए स्थान धारकों के रूप में प्रतीकों का हेरफेर: बीजगणित ===
=== संख्याओं के लिए स्थान धारकों के रूप में प्रतीकों का हेरफेर: बीजगणित ===
मुहम्मद इब्न मसा अल-ख्वारिज़मी, एक फारसी गणितज्ञ, ने 9 वीं शताब्दी में अल-जबर लिखा था।अल्गोरिज़्म और एल्गोरिथ्म शब्द अल-ख्वारिज़मी नाम से प्राप्त होते हैं, जबकि बीजगणित शब्द अल-जबर पुस्तक से लिया गया है।यूरोप में, शब्द एल्गोरिथ्म का उपयोग मूल रूप से अल-ख्वारिज़मी द्वारा उपयोग किए जाने वाले नियमों और तकनीकों के सेटों को संदर्भित करने के लिए किया गया था, जो बीजगणितीय समीकरणों को हल करने के लिए, बाद में नियमों या तकनीकों के किसी भी सेट को संदर्भित करने के लिए सामान्यीकृत होने से पहले।<ref>{{cite book |last1=Chabert |first1=Jean-Luc |title=A History of Algorithms: From the Pebble to the Microchip |date=2012 |publisher=Springer Science & Business Media |isbn=9783642181924 |page=2}}</ref>यह अंततः Kalulus Ratiocinator (CA 1680) की Leibniz की धारणा में समाप्त हुआ:
मुहम्मद इब्न मूसा अल-ख्वारिज्मी, एक फारसी गणितज्ञ, उन्होंने 9वीं शताब्दी में अल-जबर लिखा था। शब्द "एल्गोरिज्म" और "कलन विधि (एल्गोरिथ्म)" अल ख्वारिज्मी नाम से प्राप्त हुए हैं, जबकि "बीजगणित" शब्द अल-जबर पुस्तक से लिया गया है। यूरोप में, शब्द "कलन विधि (एल्गोरिथ्म)" मूल रूप से नियमों और तकनीकों के सेट को संदर्भित करने के लिए इस्तेमाल किया गया था जिसका उपयोग अल-ख्वारिज्मी द्वारा बीजीय समीकरणों को हल करने के लिए किया जाता है, बाद में नियमों या तकनीकों के किसी भी सेट को संदर्भित करने के लिए सामान्यीकृत होने से पहले।<ref>{{cite book |last1=Chabert |first1=Jean-Luc |title=A History of Algorithms: From the Pebble to the Microchip |date=2012 |publisher=Springer Science & Business Media |isbn=9783642181924 |page=2}}</ref> यह अंततः लीबनिज़ की '''कैलकुलस रेशियोसिनेटर''' (सी. 1680) की धारणा में परिणत हुआ:
 
{{blockquote|अपने समय से डेढ़ सौ आगे, लाइबनिज ने तर्क के बीजगणित का प्रस्ताव रखा, एक बीजगणित जो तार्किक अवधारणाओं को तरीके से हेरफेर करने के नियमों को निर्दिष्ट करेगा कि साधारण बीजगणित संख्याओं में हेर-फेर के नियमों को निर्दिष्ट करता है.<ref>Davis 2000:18</ref>}}


{{blockquote|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.<ref>Davis 2000:18</ref>}}
=== क्रिप्टोग्राफिक कलन विधि (एल्गोरिथ्म) ===
एन्क्रिप्टेड कोड को समझने के लिए पहला '''क्रिप्टोग्राफ़िक कलन विधि (एल्गोरिथ्म)''' इसे 9वीं शताब्दी के अरब गणितज्ञ अल किंडी द्वारा ए मैनुस्क्रिप्ट ऑन डिक्रिप्शन क्रिप्टोग्राफ़िक संदेशों में विकसित किया गया था। उन्होंने आवृत्ति विश्लेषण द्वारा क्रिप्टोएनालिसिस का पहला विवरण दिया, जो सबसे पुराना कोडब्रेकिंग कलन विधि (एल्गोरिथ्म) था।।<ref name="Dooley">{{cite book |last1=Dooley |first1=John F. |title=A Brief History of Cryptology and Cryptographic Algorithms |date=2013 |publisher=Springer Science & Business Media |isbn=9783319016283 |pages=12–3}}</ref>


=== क्रिप्टोग्राफिक एल्गोरिदम ===
=== असतत स्थितिों के साथ यांत्रिक विरोधाभास ===
एन्क्रिप्टेड कोड को डिक्रिप्टेड कोड के लिए पहला क्रिप्टोग्राफिक एल्गोरिथ्म अल-किंडी द्वारा विकसित किया गया था, जो 9 वीं शताब्दी के अरब गणितज्ञ, क्रिप्टोग्राफिक संदेशों पर एक पांडुलिपि में एक पांडुलिपि में विकसित किया गया था।उन्होंने आवृत्ति विश्लेषण, जल्द से जल्द कोडब्रेकिंग एल्गोरिथ्म द्वारा क्रिप्टनालिसिस का पहला विवरण दिया।<ref name="Dooley">{{cite book |last1=Dooley |first1=John F. |title=A Brief History of Cryptology and Cryptographic Algorithms |date=2013 |publisher=Springer Science & Business Media |isbn=9783319016283 |pages=12–3}}</ref>
बोल्टर वजन से चलने वाली घड़ी के आविष्कार को "प्रमुख आविष्कार (मध्य युग में यूरोप का)" के रूप में श्रेय देते हैं। विशेष रूप से, कगार से पलायन जो हमें एक यांत्रिक घड़ी की टिक और टिक प्रदान करता है।<ref>Bolter 1984:24</ref> "सटीक स्वचालित मशीन"<ref>Bolter 1984:26</ref> ने 13 वीं शताब्दी में तुरंत "मैकेनिकल ऑटोमेटा" की शुरुआत की और अंत में 19वीं शताब्दी के मध्य में<ref>Bolter 1984:33–34, 204–206.</ref> चार्ल्स बैबेज और काउंटेस एडा लवलेस के अंतर इंजन और विश्लेषणात्मक इंजन "कम्प्यूटेशनल मशीनों" के लिए। लवलेस को कंप्यूटर बैबेज के विश्लेषणात्मक इंजन पर प्रसंस्करण के लिए एक कलन विधि (एल्गोरिथ्म) के पहले निर्माण का श्रेय दिया जाता है, पहला उपकरण केवल एक कैलकुलेटर के बजाय एक वास्तविक ट्यूरिंग पूर्ण कंप्यूटर माना जाता है और कभी-कभी इसे "इतिहास का पहला प्रोग्रामर" कहा जाता है, हालांकि बैबेज के दूसरे उपकरण का पूर्ण कार्यान्वयन उसके जीवनकाल के दशकों बाद तक महसूस नहीं किया जाएगा।


=== असतत राज्यों के साथ यांत्रिक विरोधाभास ===
लॉजिकल मशीन 1870 स्टेनली जेवन्स का "तार्किक अबेकस" और "तार्किक मशीन": तकनीकी समस्या बूलियन समीकरणों को कम करने की थी जब एक रूप में प्रस्तुत किया जाता है जिसे अब कर्णघ मानचित्र के रूप में जाना जाता है। जेवन्स (1880) पहले एक साधारण "अबेकस" का वर्णन करता है, जिसमें "पिनों से सुसज्जित लकड़ी की पर्चियां" बनाई गई हैं। ताकि [तार्किक] संयोजनों के किसी भी भाग या वर्ग को यंत्रवत् निकाला जा सके हाल ही में, हालांकि, मैंने सिस्टम को पूरी तरह से यांत्रिक रूप में कम कर दिया है, और इस प्रकार अनुमान की पूरी अप्रत्यक्ष प्रक्रिया को एक तार्किक मशीन कहा जा सकता है" उनकी मशीन "कुछ चलने योग्य लकड़ी की छड़" से सुसज्जित थी और "पैर में 21 चाबियां हैं जैसे पियानो इत्यादि..."। इस मशीन के साथ वह एक "न्यायवाद या किसी अन्य सरल तार्किक तर्क" का विश्लेषण कर सकता था।<ref>All quotes from W. Stanley Jevons 1880 ''Elementary Lessons in Logic: Deductive and Inductive'', Macmillan and Co., London and New York. Republished as a googlebook; cf Jevons 1880:199–201. Louis Couturat 1914 ''the Algebra of Logic'', The Open Court Publishing Company, Chicago and London. Republished as a googlebook; cf Couturat 1914:75–76 gives a few more details; he compares this to a typewriter as well as a piano. Jevons states that the account is to be found at January 20, 1870 ''The Proceedings of the Royal Society''.</ref>
घड़ी: बोल्टर वजन-चालित घड़ी के आविष्कार को प्रमुख आविष्कार के रूप में [मध्य युग में यूरोप] के रूप में क्रेडिट करता है, विशेष रूप से, कगार से बचने के लिए<ref>Bolter 1984:24</ref>यह हमें एक यांत्रिक घड़ी की टिक और टॉक प्रदान करता है।सटीक स्वचालित मशीन<ref>Bolter 1984:26</ref>13 वीं शताब्दी में शुरू होने वाले मैकेनिकल ऑटोमेटा के लिए तुरंत और अंत में कम्प्यूटेशनल मशीनों के लिए-अंतर इंजन और चार्ल्स बैबेज और काउंटेस एडा लवलेस के विश्लेषणात्मक इंजन, 19 वीं शताब्दी के मध्य में।<ref>Bolter 1984:33–34, 204–206.</ref>LoveLace को कंप्यूटर पर प्रसंस्करण के लिए एक एल्गोरिथ्म की पहली रचना के साथ श्रेय दिया जाता है-Babbage के विश्लेषणात्मक इंजन, पहले डिवाइस ने केवल एक कैलकुलेटर के बजाय एक वास्तविक ट्यूरिंग-पूर्ण कंप्यूटर माना जाता है-और कभी-कभी एक परिणाम के रूप में इतिहास का पहला प्रोग्रामर कहा जाता है, हालांकि ए। बैबेज के दूसरे डिवाइस के पूर्ण कार्यान्वयन को उसके जीवनकाल के दशकों बाद तक महसूस नहीं किया जाएगा।


तार्किक मशीनें 1870 - स्टेनली जेवॉन्स 'लॉजिकल एबाकस एंड लॉजिकल मशीन: तकनीकी समस्या बूलियन समीकरणों को कम करने के लिए थी, जब एक रूप में प्रस्तुत किया जाता है, जिसे अब कर्णघा मैप्स के रूप में जाना जाता है। Jevons (1880) ने पहले पिन के साथ सुसज्जित लकड़ी की पर्चियों का एक सरल abacus का वर्णन किया है, जिससे कि [तार्किक] संयोजनों के किसी भी भाग या वर्ग को यंत्रवत् रूप से बाहर निकाला जा सकता है ... हाल ही में, हालांकि, मैंने सिस्टम को कम कर दिया है पूरी तरह से यांत्रिक रूप, और इस प्रकार एक तार्किक मशीन कहा जा सकता है, जो कि एक तार्किक मशीन कहा जा सकता है, इस तरह की अप्रत्यक्ष प्रक्रिया को पूरा किया है, जो कुछ जंगम लकड़ी की छड़ से सुसज्जित है और पैर में 21 कुंजियाँ हैं जैसे कि पियानो [आदि].. इस मशीन के साथ वह एक syllogism या किसी अन्य सरल तार्किक तर्क का विश्लेषण कर सकता है।<ref>All quotes from W. Stanley Jevons 1880 ''Elementary Lessons in Logic: Deductive and Inductive'', Macmillan and Co., London and New York. Republished as a googlebook; cf Jevons 1880:199–201. Louis Couturat 1914 ''the Algebra of Logic'', The Open Court Publishing Company, Chicago and London. Republished as a googlebook; cf Couturat 1914:75–76 gives a few more details; he compares this to a typewriter as well as a piano. Jevons states that the account is to be found at January 20, 1870 ''The Proceedings of the Royal Society''.</ref>
इस मशीन को उन्होंने 1870 में रॉयल सोसाइटी के फेलो के सामने प्रदर्शित किया था।<ref>Jevons 1880:199–200</ref> एक अन्य तर्कशास्त्री जॉन वेन ने, हालांकि, अपने 1881 के प्रतीकात्मक तर्क में, इस प्रयास के लिए पीलिया से आंखें फेर लीं: "मेरे पास स्वयं की रुचि या महत्व का कोई उच्च अनुमान नहीं है तार्किक मशीन किसे कहते हैं?... मुझे ऐसा नहीं लगता है कि वर्तमान में ज्ञात या खोजे जाने की संभावना वाली कोई भी युक्ति वास्तव में तार्किक मशीनों के नाम के लायक है"; एल्गोरिथम अभिलक्षणन पर और देखें। लेकिन आगे नहीं बढ़ने के लिए उन्होंने भी "कुछ हद तक समान योजना प्रस्तुत की, मुझे लगता है, प्रो. जेवॉन के अबेकस के लिए... और फिर, प्रो। जेवन्स की तार्किक मशीन के अनुरूप, निम्नलिखित अंतर्विरोध का वर्णन किया जा सकता है। मैं इसे केवल एक तार्किक आरेख मशीन कहना पसंद करता हूं... लेकिन मुझे लगता है कि यह पूरी तरह से वह सब कुछ कर सकता है जिसकी किसी तार्किक मशीन से तर्कसंगत रूप से अपेक्षा की जा सकती है"।<ref>All quotes from John Venn 1881 ''Symbolic Logic'', Macmillan and Co., London. Republished as a googlebook. cf Venn 1881:120–125. The interested reader can find a deeper explanation in those pages.</ref>


यह मशीन उन्होंने 1870 में रॉयल सोसाइटी के साथियों के समक्ष प्रदर्शित की।<ref>Jevons 1880:199–200</ref>एक अन्य तर्कशास्त्री जॉन वेन, हालांकि, अपने 1881 के प्रतीकात्मक तर्क में, इस प्रयास के लिए एक पीलिया की आंख बदल गई: मेरे पास कभी -कभी तार्किक मशीनों के लिए रुचि या महत्व का कोई उच्च अनुमान नहीं है ... यह मुझे नहीं लगता है कि कोई भी नहीं है कि कोई भीवर्तमान में ज्ञात या खोजे जाने की संभावना वास्तव में तार्किक मशीनों के नाम के लायक है;एल्गोरिथ्म चरित्रों पर अधिक देखें।लेकिन आगे नहीं बढ़ने के लिए उन्होंने भी कुछ हद तक एक योजना प्रस्तुत की, मैं प्रो। जेवॉन के अबैकस ... [और] [ए] लाभ के लिए, प्रो। जेवोन्स की तार्किक मशीन के अनुरूप, निम्नलिखित विरोधाभास का वर्णन किया जा सकता है।मैं इसे केवल एक तार्किक-डायग्राम मशीन कहना पसंद करता हूं ... लेकिन मुझे लगता है कि यह बहुत पूरी तरह से कर सकता है जो किसी भी तार्किक मशीन से तर्कसंगत रूप से अपेक्षित हो सकता है।<ref>All quotes from John Venn 1881 ''Symbolic Logic'', Macmillan and Co., London. Republished as a googlebook. cf Venn 1881:120–125. The interested reader can find a deeper explanation in those pages.</ref>
जैक्वार्ड लूम, होलेरिथ पंच कार्ड, टेलीग्राफी और टेलीफोनी विद्युत यांत्रिक रिले: बेल और नेवेल (1971) इंगित करते हैं कि जैक्वार्ड लूम (1801), हॉलेरिथ कार्ड्स (पंच कार्ड, 1887) के अग्रदूत, और "टेलीफोन स्विचिंग प्रौद्योगिकियां" पहले कंप्यूटर के विकास के लिए अग्रणी एक पेड़ की जड़ें थीं।<ref>Bell and Newell diagram 1971:39, cf. Davis 2000</ref> 19वीं सदी के मध्य तक टेलीग्राफ, टेलीफोन का अग्रदूत, दुनिया भर में उपयोग में था, अक्षरों का असतत और अलग-अलग एन्कोडिंग "डॉट्स और डैश" के रूप में एक सामान्य ध्वनि है। 19वीं सदी के अंत तक टिकर टेप (c. 1870s) उपयोग में था, जैसा कि 1890 की अमेरिकी जनगणना में होलेरिथ कार्ड का उपयोग था। इसके बाद टेलीप्रिंटर (c. 1910) आया, जिसमें टेप पर बॉडॉट कोड के छिद्रित कागज का उपयोग किया गया था।


जैक्वार्ड लूम, होलेरिथ पंच कार्ड, टेलीग्राफी और टेलीफोनी - द इलेक्ट्रोमेकेनिकल रिले: बेल एंड न्यूवेल (1971) ने संकेत दिया कि जैक्वार्ड लूम (1801), अग्रदूत से होलरिथ कार्ड (पंच कार्ड, 1887), और टेलीफोन स्विचिंग प्रौद्योगिकियां ए की जड़ें थीं।पहले कंप्यूटर के विकास के लिए अग्रणी पेड़।<ref>Bell and Newell diagram 1971:39, cf. Davis 2000</ref>19 वीं शताब्दी के मध्य तक टेलीग्राफ, टेलीफोन का अग्रदूत, दुनिया भर में उपयोग में था, इसके असतत और पत्रों के अलग-अलग एन्कोडिंग के रूप में डॉट्स और एक सामान्य ध्वनि को डैश करता है।19 वीं शताब्दी के अंत तक टिकर टेप (सीए 1870) का उपयोग किया गया था, जैसा कि 1890 अमेरिकी जनगणना में होलरिथ कार्ड का उपयोग था।फिर टेप पर बॉडोट कोड के अपने छिद्रित-पेपर उपयोग के साथ टेलीप्रिंटर (सीए 1910) आया।
जॉर्ज स्टिबिट्ज़ (1937) के काम के पीछे इलेक्ट्रोमैकेनिकल रिले (1835 का आविष्कार) के टेलीफोन स्विचिंग नेटवर्क थे, डिजिटल एडिंग डिवाइस के आविष्कारक। जब उन्होंने बेल लेबोरेटरीज में काम किया, तो उन्होंने गियर के साथ मैकेनिकल कैलकुलेटर के "बोझ" उपयोग को देखा। 1937 की एक शाम वे अपने विचार को परखने के इरादे से घर गए... जब छेड़खानी खत्म हुई, स्टिबिट्ज़ ने एक बाइनरी एडिंग डिवाइस का निर्माण किया था"।<ref>*Melina Hill, Valley News Correspondent, ''A Tinkerer Gets a Place in History'', Valley News West Lebanon NH, Thursday, March 31, 1983, p. 13.</ref>


इलेक्ट्रोमैकेनिकल रिले के टेलीफोन-स्विचिंग नेटवर्क (1835 का आविष्कार किया गया) डिजिटल एडिंग डिवाइस के आविष्कारक जॉर्ज स्टाइबिट्ज़ (1937) के काम के पीछे था।जैसा कि उन्होंने बेल प्रयोगशालाओं में काम किया, उन्होंने गियर के साथ यांत्रिक कैलकुलेटर के बोझ के उपयोग को देखा।वह 1937 में एक शाम अपने विचार का परीक्षण करने का इरादा रखते हुए घर गया था ... जब टिंकरिंग खत्म हो गया था, स्टिबिट्ज़ ने एक बाइनरी एडिंग डिवाइस का निर्माण किया था।<ref>* Melina Hill, Valley News Correspondent, ''A Tinkerer Gets a Place in History'', Valley News West Lebanon NH, Thursday, March 31, 1983, p. 13.</ref>
गणितज्ञ मार्टिन डेविस इलेक्ट्रोमैकेनिकल रिले के विशेष महत्व को देखते हैं (इसके दो "बाइनरी स्टेट्स" खुले और बंद हैं):


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


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


लेकिन Heijenoort Frege (1879) देता है यह Kudos: Frege's शायद तर्क में लिखा गया सबसे महत्वपूर्ण एकल काम है।... जिसमें हम एक 'फॉर्मूला भाषा' देखते हैं, यह एक लिंगुआ चरित्र है, विशेष प्रतीकों के साथ लिखी गई भाषा, शुद्ध विचार के लिए, अर्थात्, बयानबाजी अलंकरणों से मुक्त ... विशिष्ट प्रतीकों से निर्मित जो निश्चित के अनुसार हेरफेर की जाती हैनियम ।<ref>van Heijenoort's commentary on Frege's ''Begriffsschrift, a formula language, modeled upon that of arithmetic, for pure thought'' in van Heijenoort 1967:1</ref>फ्रीज के काम को अल्फ्रेड नॉर्थ व्हाइटहेड और बर्ट्रेंड रसेल द्वारा उनके प्रिंसिपिया मैथेमेटिका (1910-1913) में और अधिक सरल और प्रवर्धित किया गया था।
लेकिन हाइजेनोर्ट फ्रेज (1879) को यह यश देता है: फ्रेज "शायद तर्क में लिखा गया अब तक का सबसे महत्वपूर्ण एकल कार्य है। जिसमें हम एक "'सूत्र भाषा' देखते हैं, यह एक लिंगुआ चरित्र है, विशेष प्रतीकों के साथ लिखी गई भाषा, "शुद्ध विचार के लिए", जो कि अलंकारिक अलंकरणों से मुक्त है जिसका निर्माण विशिष्ट प्रतीकों से किया गया है जिन्हें निश्चित नियमों के अनुसार हेरफेर किया जाता है"।<ref>van Heijenoort's commentary on Frege's ''Begriffsschrift, a formula language, modeled upon that of arithmetic, for pure thought'' in van Heijenoort 1967:1</ref> अल्फ्रेड नॉर्थ व्हाइटहेड और बर्ट्रेंड रसेल ने अपने प्रिंसिपिया मैथेमेटिका (1910-1913) में फ्रेज के काम को और सरल और प्रवर्धित किया।


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


प्रभावी गणना: 1928 में हिल्बर्ट द्वारा सटीक रूप से परिभाषित किए गए entscheidungsproblem को हल करने के प्रयास में, गणितज्ञों ने पहले यह परिभाषित करने के लिए निर्धारित किया कि एक प्रभावी विधि या प्रभावी गणना या प्रभावी गणना से क्या मतलब था (यानी, एक गणना जो सफल होगी)।तेजी से उत्तराधिकार में निम्नलिखित दिखाई दिए: अलोंजो चर्च, स्टीफन क्लेन और जे.बी. रोसेर के λ-Calculus<ref>cf. footnote in Alonzo Church 1936a in Davis 1965:90 and 1936b in Davis 1965:110</ref>जैक्स हर्ब्रांड (Cf. Gödel के प्रिंसटन लेक्चर 1934 के 1934 के लेक्चर) और बाद में क्लेन द्वारा बाद में सरलीकरण पर अभिनय करने वाले गोडेल के काम से सामान्य पुनरावृत्ति की एक बारीक सम्मान की परिभाषा।<ref>Kleene 1935–6 in Davis 1965:237ff, Kleene 1943 in Davis 1965:255ff</ref>चर्च का प्रमाण<ref>Church 1936 in Davis 1965:88ff</ref>यह कि entscheidungsproblem अनहोनी थी, एमिल पोस्ट की प्रभावी गणना की परिभाषा एक कार्यकर्ता के रूप में दिमाग से कमरों के अनुक्रम के माध्यम से बाएं या दाएं स्थानांतरित करने के निर्देशों की सूची का पालन करती है और जबकि एक कागज को चिह्नित या मिटा देती है या कागज का निरीक्षण करती है और हां-नो बनाती है।अगले निर्देश के बारे में निर्णय।<ref>cf. "Finite Combinatory Processes – formulation 1", Post 1936 in Davis 1965:289–290</ref>एलन ट्यूरिंग का प्रमाण है कि entscheidungsproblem उसके a- [स्वचालित-] मशीन के उपयोग से बेजोड़ था<ref>Turing 1936–37 in Davis 1965:116ff</ref>- एक मशीन के संदर्भ में प्रभावी विधि की जे। बार्कले रोसेर परिभाषा के बाद लगभग समान प्रभाव।<ref>Rosser 1939 in Davis 1965:226</ref>चर्च थीसिस के लिए एक अग्रदूत के क्लेन के प्रस्ताव को कि उन्होंने थीसिस कहा,<ref>Kleene 1943 in Davis 1965:273–274</ref>और कुछ साल बाद क्लेन ने अपनी थीसिस चर्च की थीसिस का नाम बदल दिया<ref>Kleene 1952:300, 317</ref>और ट्यूरिंग की थीसिस का प्रस्ताव।<ref>Kleene 1952:376</ref>
प्रभावी परिकलन क्षमता के अनुसार 1928 में हिल्बर्ट द्वारा सटीक रूप से परिभाषित इंटशेडुंगस समस्या (Entscheidungs problem) को हल करने के प्रयास में, गणितज्ञों ने सबसे पहले "प्रभावी विधि" या "प्रभावी गणना" या "प्रभावी गणना" (यानी, एक गणना जो सफल होगी) से क्या मतलब था, यह परिभाषित करने के बारे में निर्धारित किया। तेजी से उत्तराधिकार में निम्नलिखित दिखाई दिया: अलोंजो चर्च, स्टीफन क्लेन और जेबी रॉसर के -कैलकुलस<ref>cf. footnote in Alonzo Church 1936a in Davis 1965:90 and 1936b in Davis 1965:110</ref> जैक्स हेरब्रांड (cf. गोडेल के प्रिंसटन लेक्चर ऑफ 1934) और क्लेन द्वारा बाद के सरलीकरण के सुझावों पर गोडेल के काम से "सामान्य रिकर्सन" की एक अच्छी तरह से सम्मानित परिभाषा है।<ref>Kleene 1935–6 in Davis 1965:237ff, Kleene 1943 in Davis 1965:255ff</ref> चर्च का प्रमाण है कि इंटशेडुंगस समस्या (Entscheidungs problem) असाध्य था,<ref>Church 1936 in Davis 1965:88ff</ref> एमिल पोस्ट की प्रभावी गणना की परिभाषा एक कार्यकर्ता के रूप में बिना दिमाग के निर्देशों की एक सूची के बाद कमरे के एक क्रम के माध्यम से बाएं या दाएं स्थानांतरित करने के लिए और जब वहाँ या तो एक कागज को चिह्नित करें या मिटा दें या कागज का निरीक्षण करें और अगले निर्देश के बारे में हाँ या ना में निर्णय लें।<ref>cf. "Finite Combinatory Processes – formulation 1", Post 1936 in Davis 1965:289–290</ref> एलन ट्यूरिंग का सबूत है कि इंटशेडुंगस समस्या (Entscheidungs problem) उनकी "एक स्वचालित मशीन" के उपयोग से हल करने योग्य नहीं था।<ref>Turing 1936–37 in Davis 1965:116ff</ref> लगभग पोस्ट के "फॉर्मूलेशन" के समान, जे बार्कले रॉसर की "एक मशीन" के संदर्भ में "प्रभावी विधि" की परिभाषा।<ref>Rosser 1939 in Davis 1965:226</ref> क्लेन का "चर्च थीसिस" के अग्रदूत का प्रस्ताव जिसे उन्होंने "थीसिस " कहा,<ref>Kleene 1943 in Davis 1965:273–274</ref> और कुछ साल बाद क्लेन ने अपनी थीसिस का नाम बदलकर<ref>Kleene 1952:300, 317</ref> "चर्च ट्यूरिंग थीसिस" और "ट्यूरिंग की थीसिस" का प्रस्ताव रखा।<ref>Kleene 1952:376</ref>


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


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


: एक बॉक्स को बाहर किया जाना है और शुरुआती बिंदु कहा जाता है। ... एक विशिष्ट समस्या को प्रतीकात्मक रूप में बक्से की एक परिमित संख्या में दिया जाना है [यानी, इनपुट] एक स्ट्रोक के साथ चिह्नित किया जा रहा है। इसी तरह, उत्तर [यानी, आउटपुट] को चिह्नित बक्से के ऐसे कॉन्फ़िगरेशन द्वारा प्रतीकात्मक रूप में दिया जाना है ...
"एक सामान्य समस्या पर लागू निर्देशों का एक सेट प्रत्येक विशिष्ट समस्या पर लागू होने पर एक नियतात्मक प्रक्रिया स्थापित करता है।  यह प्रक्रिया तभी समाप्त होती है जब प्रकार (C) की दिशा की बात आती है।<ref>Turing 1936–37 in Davis 1965:289–290</ref> [यानी, STOP]" पोस्ट-ट्यूरिंग मशीन पर और देखे[[File:Alan Turing.jpg|thumb|200px|बेलेचले पार्क में एलन ट्यूरिंग की प्रतिमा]]
'''एलन ट्यूरिंग''' का काम<ref>Turing 1936 in Davis 1965, Turing 1939 in Davis 1965:160</ref> स्टिबिट्ज़ (1937) से पहले का था;  यह अज्ञात है कि क्या स्टिबिट्ज़ को ट्यूरिंग के काम के बारे में पता था। ट्यूरिंग के जीवनी लेखक का मानना ​​​​था कि ट्यूरिंग ने एक टाइपराइटर जैसे मॉडल का उपयोग एक युवा रुचि से प्राप्त किया है:  "एलन ने बचपन में '''टाइपराइटर''' का आविष्कार करने का सपना देखा था; ट्यूरिंग के पास एक टाइपराइटर था, और वह खुद से यह शुरुआत कर सकते थे कि एक टाइपराइटर को 'मैकेनिकल' कहने का क्या मतलब है"।<ref>Hodges, p.&nbsp;96</ref> मोर्स कोड, टेलीग्राफी, टिकर टेप मशीन और टेलेटाइपराइटर के समय के प्रचलन को देखते हुए, यह बहुत संभव है कि युवावस्था के दौरान ट्यूरिंग पर सभी का प्रभाव था।


: एक सामान्य समस्या के लिए लागू दिशाओं का एक सेट प्रत्येक विशिष्ट समस्या पर लागू होने पर एक नियतात्मक प्रक्रिया सेट करता है। यह प्रक्रिया तभी समाप्त हो जाती है जब यह प्रकार (c) [यानी, स्टॉप] की दिशा में आता है।<ref>Turing 1936–37 in Davis 1965:289–290</ref>पोस्ट -ट्यूरिंग मशीन पर और देखें
गणना के अपने मॉडल को ट्यूरिंग कहा जाता है जिसे अब ट्यूरिंग मशीन कहा जाता है, जैसा कि पोस्ट ने मानव कंप्यूटर के विश्लेषण के साथ किया था कि वह बुनियादी गतियों और "मन की अवस्थाओं" के एक साधारण सेट तक सीमित हो जाता है। लेकिन वह एक कदम आगे बढ़ता है और संख्याओं की गणना के मॉडल के रूप में एक मशीन बनाता है।<ref>Turing 1936–37:116</ref>
[[File:Alan Turing.jpg|thumb|200px|बेलेचले पार्क में एलन ट्यूरिंग की प्रतिमा]]
एलन ट्यूरिंग का काम<ref>Turing 1936 in Davis 1965, Turing 1939 in Davis 1965:160</ref>स्टिबिट्ज़ (1937) से पहले;यह अज्ञात है कि क्या स्टाइबिट्ज़ को ट्यूरिंग के काम के बारे में पता था।ट्यूरिंग के जीवनी लेखक का मानना था कि एक युवा रुचि से प्राप्त ट्यूरिंग के टाइपराइटर जैसे मॉडल का उपयोग: एलन ने एक लड़के के रूप में टाइपराइटर्स का आविष्कार करने का सपना देखा था;श्रीमती ट्यूरिंग के पास एक टाइपराइटर था, और वह अच्छी तरह से खुद से यह पूछकर शुरू कर सकता था कि एक टाइपराइटर 'मैकेनिकल' को कॉल करने का क्या मतलब था।<ref>Hodges, p.&nbsp;96</ref>मोर्स कोड, टेलीग्राफी, टिकर टेप मशीनों, और टेलेटिपविटर्स के समय प्रचलन को देखते हुए, यह काफी संभव है कि सभी अपने युवाओं के दौरान ट्यूरिंग पर प्रभाव डाल रहे थे।


Turing -His मॉडल की गणना को अब एक ट्यूरिंग मशीन कहा जाता है - Begins, जैसा कि पोस्ट किया गया था, एक मानव कंप्यूटर के विश्लेषण के साथ, जिसे वह बुनियादी गतियों और मन की राज्यों के एक साधारण सेट के लिए नीचे ले जाता है।लेकिन वह एक कदम आगे जारी रखता है और संख्याओं की गणना के मॉडल के रूप में एक मशीन बनाता है।<ref>Turing 1936–37:116</ref>
"कम्प्यूटिंग आम तौर पर कागज पर कुछ प्रतीकों को लिखकर किया जाता है। हम मान सकते हैं कि यह पेपर एक बच्चे की अंकगणित की किताब की तरह वर्गों में बांटा गया है... तब मुझे लगता है कि गणना एक आयामी कागज पर की जाती है, यानी, वर्गों में विभाजित एक टेप पर।  मैं यह भी मानूंगा कि मुद्रित किए जा सकने वाले प्रतीकों की संख्या सीमित है...


: कंप्यूटिंग आम तौर पर कागज पर कुछ प्रतीकों को लिखकर किया जाता है।हम मान सकते हैं कि यह पेपर एक बच्चे की अंकगणितीय पुस्तक की तरह वर्गों में विभाजित है ... मुझे लगता है कि गणना एक आयामी पेपर पर किया जाता है, अर्थात्, एक टेप पर वर्गों में विभाजित।मुझे यह भी लगता है कि जो प्रतीकों की संख्या छपी हो सकती है, वह परिमित है ...
"किसी भी क्षण कंप्यूटर का व्यवहार उसके द्वारा देखे जा रहे प्रतीकों से निर्धारित होता है, और उस समय उसकी "मन की स्थिति"। हम मान सकते हैं कि प्रतीकों या वर्गों की संख्या के लिए एक बाध्य बी है जिसे कंप्यूटर एक पल में देख सकता है। यदि वह और अधिक अवलोकन करना चाहता है, तो उसे क्रमिक प्रेक्षणों का उपयोग करना चाहिए। हम यह भी मानेंगे कि मन की अवस्थाओं की संख्या जिसे ध्यान में रखा जाना चाहिए वह सीमित है ... "आइए हम कल्पना करें कि कंप्यूटर द्वारा किए गए कार्यों को 'सरल संचालन' में विभाजित किया जाना है। जो इतने प्राथमिक हैं कि उन्हें और विभाजित करने की कल्पना करना आसान नहीं है।"<ref name="Turing 1936–37 in Davis 1965:136">Turing 1936–37 in Davis 1965:136</ref>


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


: आइए हम कल्पना करते हैं कि कंप्यूटर द्वारा किए गए संचालन को 'सरल संचालन' में विभाजित किया जाना है जो इतने प्राथमिक हैं कि उन्हें और अधिक विभाजित कल्पना करना आसान नहीं है।<ref name="Turing 1936–37 in Davis 1965:136">Turing 1936–37 in Davis 1965:136</ref>
"सरल संचालन में इसलिए शामिल होना चाहिए:


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


: अब हम इस कंप्यूटर का काम करने के लिए एक मशीन का निर्माण कर सकते हैं।<ref name="Turing 1936–37 in Davis 1965:136"/>
"(B) पहले देखे गए वर्गों में से एक के एल वर्गों के भीतर दूसरे वर्ग में देखे गए वर्गों में से एक का परिवर्तन।


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".<ref>Turing 1939 in Davis 1965:160</ref>


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


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


स्टीफन सी। क्लेन ने अपनी अब तक की प्रसिद्ध थीसिस के रूप में परिभाषित किया, जिसे मैं चर्च-ट्र्यूरिंग थीसिस के रूप में जाना जाता हूं। लेकिन उन्होंने निम्नलिखित संदर्भ में ऐसा किया (मूल में बोल्डफेस):
"(B) एक संभावित परिवर्तन (B) मनाया वर्गों के साथ, मन की स्थिति के संभावित परिवर्तन के साथ"
: 12. एल्गोरिथम सिद्धांत ... एक पूर्ण एल्गोरिथम सिद्धांत स्थापित करने में, हम जो करते हैं, वह एक प्रक्रिया का वर्णन करना है, जो स्वतंत्र चर के मूल्यों के प्रत्येक सेट के लिए प्रदर्शन योग्य है, जो प्रक्रिया आवश्यक रूप से समाप्त होती है और इस तरह से कि परिणाम से हम कर सकते हैं एक निश्चित उत्तर पढ़ें, हां या नहीं, प्रश्न के लिए, क्या विधेय मूल्य सही है? (क्लेन 1943: 273)
 
"अब हम इस कंप्यूटर का काम करने के लिए एक मशीन का निर्माण कर सकते हैं।"<ref name="Turing 1936–37 in Davis 1965:136" />
 
कुछ साल बाद, ट्यूरिंग ने अपने विश्लेषण (शोध प्रबंध (थीसिस), परिभाषा) को इस सशक्त अभिव्यक्ति के साथ विस्तारित किया:
:"एक फ़ंक्शन को "प्रभावी रूप से गणना योग्य" कहा जाता है यदि इसके मान किसी विशुद्ध यांत्रिक प्रक्रिया द्वारा ज्ञात किए जा सकते हैं। यद्यपि इस विचार की सहज समझ प्राप्त करना काफी आसान है, फिर भी कुछ और निश्चित, गणितीय अभिव्यंजक परिभाषा रखना वांछनीय है... [वह गोडेल, हेरब्रांड, क्लेन, चर्च, ट्यूरिंग और पोस्ट के संबंध में ऊपर प्रस्तुत परिभाषा के इतिहास पर बहुत चर्चा करता है] ... हम इस कथन को शाब्दिक रूप से ले सकते हैं, एक विशुद्ध रूप से यांत्रिक प्रक्रिया को समझते हुए जिसे एक मशीन द्वारा किया जा सकता है। इन मशीनों की संरचनाओं का एक निश्चित सामान्य रूप में गणितीय विवरण देना संभव है। इन विचारों का विकास लेखक की गणना योग्य कार्य की परिभाषा की ओर ले जाता है, और संगणनीयता की पहचान के लिए † प्रभावी गणना के साथ... "† हम "कम्प्यूटेबल फ़ंक्शन" अभिव्यक्ति का उपयोग मशीन द्वारा गणना योग्य फ़ंक्शन के लिए करेंगे,  और हम इन परिभाषाओं में से किसी एक के साथ विशेष पहचान के बिना "प्रभावी रूप से गणना योग्य" सहज ज्ञान युक्त विचार को संदर्भित करते हैं"।<ref>Turing 1939 in Davis 1965:160</ref>
 
=== जे.बी. रोसेर (1939) और एस.सी. क्लेन (1943)===
जे. बार्कले रॉसर ने एक 'प्रभावी गणितीय विधि' को निम्नलिखित तरीके से परिभाषित किया (इटैलिकाइज़ेशन जोड़ा गया): '''"प्रभावी विधि"''' का प्रयोग यहाँ प्रत्येक चरण में एक विधि के विशेष अर्थ में किया गया है जिनमें से वह ठीक-ठीक निर्धारित है और जो निश्चित रूप से चरणों की एक सीमित संख्या में उत्तर देगा। इसी विशेष अर्थ के साथ आज तक तीन अलग-अलग सटीक परिभाषाएँ दी गई हैं। [उनका फुटनोट #5; तुरंत नीचे चर्चा देखें]। इनमें से सबसे सरल स्थिति के लिए (पोस्ट और ट्यूरिंग के कारण) अनिवार्य रूप से कहता है समस्याओं के कुछ सेटों को हल करने का एक प्रभावी तरीका मौजूद है अगर कोई मशीन बना सकता है जो तब प्रश्न को सम्मिलित करने और (बाद में) उत्तर को पढ़ने से परे बिना किसी मानवीय हस्तक्षेप के सेट की किसी भी समस्या का समाधान करेगा। सभी तीन परिभाषाएँ समान हैं, इसलिए इससे कोई फ़र्क नहीं पड़ता कि किसका उपयोग किया जाता है। इसके अलावा, यह तथ्य कि तीनों समान हैं, किसी एक की शुद्धता के लिए एक बहुत मजबूत तर्क है।" (रॉसर 1939:225-226)
 
रॉसर का फुटनोट नंबर 5 (1) चर्च और क्लेन के काम और -परिभाषा की उनकी परिभाषा का संदर्भ देता है, विशेष रूप से, प्राथमिक संख्या सिद्धांत की अपनी एक अनसुलझी समस्या (1936) में चर्च द्वारा इसका उपयोग; (2) हेरब्रांड और गोडेल और उनके पुनरावर्तन का उपयोग, विशेष रूप से, गोडेल का अपने प्रसिद्ध पेपर ऑन फॉर्मली अनडिसीडेबल प्रपोज़िशन ऑफ़ प्रिंसिपिया मैथमैटिका एंड रिलेटेड सिस्टम्स I (1931) में उपयोग; और (3) पोस्ट (1936) और ट्यूरिंग (1936-37) उनकी गणना के तंत्र मॉडल में।
 
स्टीफन सी. क्लेन ने अपने अब तक के प्रसिद्ध "शोध प्रबंध (थीसिस)" के रूप में परिभाषित किया, जिसे चर्च ट्यूरिंग थीसिस के रूप में जाना जाता है। लेकिन उन्होंने इसे निम्नलिखित संदर्भ में किया (मूल में बोल्डफेस):
 
"12. '''कलन विधि (एल्गोरिथ्म) सिद्धांत'''... एक पूर्ण कलन विधि (एल्गोरिथ्म) सिद्धांत की स्थापना में, हम क्या करते हैं एक प्रक्रिया का वर्णन करने के लिए, स्वतंत्र चर के मूल्यों के प्रत्येक सेट के लिए प्रदर्शन योग्य, कौन सी प्रक्रिया अनिवार्य रूप से समाप्त हो जाती है और इस तरह से कि परिणाम से हम इस प्रश्न का एक निश्चित उत्तर "हां" या "नहीं" पढ़ सकते हैं, "क्या विधेय मान सत्य है?" (क्लेन 1943:273)


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


== यह भी देखें ==
== यह भी देखें ==
Line 620: Line 612:
{{Industrial and applied mathematics}}
{{Industrial and applied mathematics}}
{{Authority control}}
{{Authority control}}
[[Category: एल्गोरिदम | एल्गोरिदम ]]
[[Category: उदाहरण स्यूडोकोड के साथ लेख]]
[[Category: गणितीय तर्क]]
[[Category: सैद्धांतिक कंप्यूटर विज्ञान]]


[[Category: Machine Translated Page]]
[[Category:AC with 0 elements]]
[[Category:Articles with Curlie links]]
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:Articles with invalid date parameter in template]]
[[Category:Articles with short description]]
[[Category:CS1]]
[[Category:CS1 English-language sources (en)]]
[[Category:CS1 maint]]
[[Category:Exclude in print]]
[[Category:Interwiki category linking templates]]
[[Category:Interwiki link templates]]
[[Category:Machine Translated Page]]
[[Category:Missing redirects]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates that add a tracking category]]
[[Category:Templates used by AutoWikiBrowser|Cite web]]
[[Category:Templates using TemplateData]]
[[Category:Webarchive template wayback links]]
[[Category:Wikimedia Commons templates]]
[[Category:Wikipedia articles needing clarification from December 2020]]
[[Category:Wikipedia articles needing factual verification from July 2020]]
[[Category:उदाहरण स्यूडोकोड के साथ लेख]]
[[Category:एल्गोरिदम| एल्गोरिदम ]]
[[Category:गणितीय तर्क]]
[[Category:सैद्धांतिक कंप्यूटर विज्ञान]]

Latest revision as of 16:26, 27 September 2022

एक कलन विधि (एल्गोरिथ्म) (यूक्लिड कलन विधि (एल्गोरिथ्म)) का फ्लोचार्ट ए और बी नाम के स्थानों में दो नंबरों ए और बी के सबसे बड़े सामान्य भाजक (जी.सी.डी.) की गणना के लिए कलन विधि (एल्गोरिथ्म) दो छोरों में क्रमिक घटाव द्वारा आगे बढ़ता है: यदि परीक्षण बी yes ए पैदावार हां या सही है(अधिक सटीक रूप से, स्थान B में संख्या B स्थान A में संख्या A से अधिक या बराबर है A) तब, कलन विधि (एल्गोरिथ्म) B ← B - A को निर्दिष्ट करता है (जिसका अर्थ है संख्या B - A पुराने B को प्रतिस्थापित करता है)।इसी तरह, यदि a> b, तो a - a - B. प्रक्रिया समाप्त हो जाती है जब (b की सामग्री) 0 है, g.c.d.ए में (कलन विधि (एल्गोरिथ्म) स्कॉट 2009: 13 से प्राप्त कलन विधि (एल्गोरिथ्म); प्रतीकों और ड्राइंग शैली से तौसवोरथे 1977 से)।
नोट जी से एडा लवलेस का आरेख, पहला प्रकाशित कंप्यूटर कलन विधि (एल्गोरिथ्म)

गणित और कंप्यूटर विज्ञान में, कलन विधि (एल्गोरिथ्म) (/ˈælɡərɪðəm/ (listen)) परिशुद्ध निर्देशों का एक सीमित क्रम है, इसका उपयोग विशिष्ट समस्याओं को हल करने या गणना करने के लिए किया जाता है।[1] गणना और डाटा का विश्लेषण करने के लिए कलन विधि (एल्गोरिदम) का उपयोग विनिर्देशों के रूप में किया जाता है। अच्छी तरह तैयार की गई कलन विधि (एल्गोरिथ्म) स्वचालित कटौती कर सकती हैं (स्वचालित तर्क के रूप में संदर्भित) और हम विभिन्न मार्गों (स्वचालित निर्णय लेने के रूप में संदर्भित) के माध्यम से कोड निष्पादन की प्रक्रिया को आसानी से हल करने के लिए गणितीय और तार्किक परीक्षणों का उपयोग करते हैं। मशीनों के वर्णनकर्ता के रूप में मानवीय विशेषताओं का उपयोग अलंकारिक तरीकों से पहले से ही एलन ट्यूरिंग द्वारा शब्दों के साथ किया जा चुका था जैसे "स्मृति", "खोज" और "प्रोत्साहन"[2]

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

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

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

इतिहास

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

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

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

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

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

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

"इस एल्गोरिथम को वर्तमान कला कहा जाता है, जिसमें / हम ऐसे भारतीयों का आनंद लेते हैं जिनके पास दो बार पांच अंक हैं।"

जो अनुवाद करता है:

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

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

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

अनौपचारिक परिभाषा

अनौपचारिक परिभाषा कुछ इस प्रकार हो सकती है- "नियमों का एक सेट जो संचालन के अनुक्रम को सटीक रूप से परिभाषित करता है",[27][need quotation to verify] जिसमें सभी कंप्यूटर प्रोग्राम शामिल होंगे (कार्यक्रमों सहित जो संख्यात्मक गणना नहीं करते हैं), और (उदाहरण के लिए) कोई निर्धारित नौकरशाही प्रक्रिया[28] या कुक बुक रेसिपी इसके एक उदाहरण हो सकते हैं।[29]

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

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

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

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

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

जैसे कि y = m + n (यानी, दो मनमाना "इनपुट चर (वैरिएबल)" m और n जो आउटपुट y उत्पन्न करते हैं)

लेकिन इस धारणा को परिभाषित करने के लिए विभिन्न लेखकों के प्रयासों से संकेत मिलता है कि इस शब्द का अर्थ इससे कहीं अधिक है, कुछ के क्रम में (अतिरिक्त उदाहरण के लिए):

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

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

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

औपचारिककरण

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

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

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

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

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

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

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

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

कलन विधि (एल्गोरिथ्म) व्यक्त करना

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

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

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

1 उच्च-स्तरीय विवरण

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

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

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

कलन विधि (एल्गोरिथ्म) के विकास में विशिष्ट कदम:

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

कंप्यूटर कलन विधि (एल्गोरिथ्म)

7400 चिप
कैनोनिकल बोहम-जैकोपिनी संरचनाओं के फ्लोचार्ट उदाहरण: अनुक्रम (पृष्ठ को नीचे उतरने वाले आयताकार), जबकि-डू और इफ-तब-एल्स।तीन संरचनाएं आदिम सशर्त गोटो से बनी हैं (IF test THEN GOTO step xxx, हीरे के रूप में दिखाया गया है), बिना शर्त गोटो (आयत), विभिन्न असाइनमेंट ऑपरेटर (आयत), और पड़ाव (आयत)।असाइनमेंट-ब्लॉक के अंदर इन संरचनाओं के घोंसले के कारण जटिल आरेख (सीऍफ़ (cf) टॉउसवर्थ (Tausworthe) 1977: 100, 114) होते हैं।

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

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

चैतिन: "... एक कार्यक्रम 'सुरुचिपूर्ण' है, जिसके द्वारा मेरा मतलब है कि यह आउटपुट के उत्पादन के लिए सबसे छोटा संभव कार्यक्रम है जो यह करता है"[42]

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

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

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

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

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

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

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

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

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

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

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

उदाहरण

कलन विधि (एल्गोरिथ्म) उदाहरण

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

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

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

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

Algorithm Largest Number

Input: संख्याओं की एक सूची L

Output: सूची में सबसे बड़ी संख्या L.

If L.size = 0 return null largest ← L[0] for each item in L, do If item > largest, then largest ← item return largest

  • "←" denotes assignment. For instance, "largestitem" means that the value of largest changes to the value of item.
  • "return" terminates the algorithm and outputs the following value.

यूक्लिड की कलन विधि (एल्गोरिथ्म)

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

टी.एल. से यूक्लिड के कलन विधि (एल्गोरिथ्म) का उदाहरण-माप।हीथ (1908), अधिक विस्तार के साथ।यूक्लिड एक तीसरे माप से परे नहीं जाता है और कोई संख्यात्मक उदाहरण नहीं देता है।निकोमैचस 49 और 21 का उदाहरण देता है: मैं अधिक से कम घटाता हूं;28 छोड़ दिया गया है;तो फिर से मैं इसे उसी 21 से घटाता हूं (इसके लिए संभव है);7 बचा है;मैं इसे 21 से घटाता हूं, 14 छोड़ दिया जाता है;जिसमें से मैं फिर से 7 घटाना (इसके लिए संभव है);7 को छोड़ दिया गया है, लेकिन 7 को 7. से घटाया नहीं जा सकता है। हीथ टिप्पणियाँ कि अंतिम वाक्यांश उत्सुक है, लेकिन इसका अर्थ स्पष्ट रूप से पर्याप्त है, साथ ही 'एक और एक ही संख्या पर' समाप्त होने के बारे में वाक्यांश का अर्थ भी।(हीथ 1908: 300)।

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

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

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

1599 और 650 के लिए सबसे बड़ी आम भाजक को खोजने के लिए यूक्लिड के कलन विधि (एल्गोरिथ्म) की एक चित्रमय अभिव्यक्ति।<syntaxhighighlight lang = पाठ हाइलाइट = 1,5> 1599 = 650 × 2 + 299 650 = 299 × 2 + 52 299 = 52 × 5 + 39 52 = 39 × 1 + 13 39 = 13 × 3 + 0 </syntaxhighlight>

यूक्लिड के कलन विधि (एल्गोरिथ्म) के लिए कंप्यूटर भाषा

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

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

"यूक्लिड के कलन विधि (एल्गोरिथ्म) के लिए एक सुरुचिपूर्ण कार्यक्रम "

IneLegant एक घटाव-आधारित शेष-लूप के साथ कलन विधि (एल्गोरिथ्म) के Knuth के संस्करण का अनुवाद है, जो विभाजन के अपने उपयोग (या एक मापांक निर्देश) के उपयोग की जगह लेता है।नुथ 1973 से व्युत्पन्न: 2-4।दो नंबरों के आधार पर inelegant G.C.D की गणना कर सकता है।सुरुचिपूर्ण से कम चरणों में।

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

INPUT:

1 [Into two locations L and S put the numbers l and s that represent the two lengths]:
INPUT L, S
2 [Initialize R: make the remaining length r equal to the starting/initial/input length l]:                  R ← L1

E0: [Ensure rs.]

3 [Ensure the smaller of the two numbers is in S and the larger in R]:
IF R > S THEN
the contents of L is the larger number so skip over the exchange-steps 4, 5 and 6:
GOTO step 7
ELSE
swap the contents of R and S.
4 L ← R (this first step is redundant, but is useful for later discussion).
5 R ← S                                                          6 S ← L

E1: [Find remainder]: जब तक R में शेष लंबाई r, S में छोटी लंबाई s से कम न हो, बार-बार S में माप संख्या s को R में शेष लंबाई r से घटाएं।

7 IF S > R THEN
done measuring so
GOTO 10
ELSE
measure again,
8 R ← R − S
9 [Remainder-loop]:                                                           GOTO 7.

E2: [Is the remainder zero?]: या तो (i) अंतिम उपाय सटीक था, R में शेषफल शून्य है, और प्रोग्राम रुक सकता है, या (ii) एल्गोरिथम जारी रहना चाहिए: अंतिम माप ने R में शेषफल S में मापने की संख्या से कम छोड़ दिया।

10 IF R = 0 THEN
done so
GOTO step 15
ELSE                                                                     CONTINUE TO step 11,

E3: [Interchange s and r]: यूक्लिड के कलन विधि (एल्गोरिथ्म) का नट। शेष r का उपयोग यह मापने के लिए करें कि पहले छोटी संख्या s क्या थी; एल एक अस्थायी स्थान के रूप में कार्य करता है।

11 L ← R
12 R ← S
13 S ← L
14 [Repeat the measuring process]:                                           GOTO 7

OUTPUT:

15 [Done. S contains the greatest common divisor]:                          PRINT S

DONE:

16 HALT, END, STOP.

यूक्लिड के कलन विधि (एल्गोरिथ्म) के लिए एक सुरुचिपूर्ण कार्यक्रम

यूक्लिड के एल्गोरिथम के निम्नलिखित संस्करण के लिए केवल छह मुख्य निर्देशों की आवश्यकता है जो "इनलेगेंट" द्वारा तेरह को करने के लिए आवश्यक हैं; इससे भी बदतर, "सुरुचिपूर्ण" के लिए अधिक प्रकार के निर्देशों की आवश्यकता होती है। "सुरुचिपूर्ण" का फ़्लोचार्ट इस लेख के शीर्ष पर पाया जा सकता है। (असंरचित) मूल भाषा में, चरणों को क्रमांकित किया जाता है, और निर्देश LET [ ] = [ ] असाइनमेंट निर्देश का प्रतीक है। <syntaxhighighlight lang = cbmbas>

   5 REM Euclid's algorithm for greatest common divisor                                                  6 PRINT "Type two integers greater than 0"
  10 INPUT A,B
  20 IF B=0 THEN GOTO 80
  30 IF A > B THEN GOTO 60
  40 LET B=B-A
  50 GOTO 20
  60 LET A=A-B
  70 GOTO 20
  80 PRINT A                                                                          90 END

"एलिगेंट" कैसे काम करता है: बाहरी "यूक्लिड लूप" के स्थान पर, "एलिगेंट" दो "को-लूप" के बीच आगे और पीछे शिफ्ट हो जाता है, A> B लूप जो A ← A - B, और A B ≤ A लूप की गणना करता है और जो B ← B - A की गणना करता है। यह एक साथ काम करता है क्योंकि, जब अंत में मिन्यूएंड M सबट्रेंड S से कम या उसके बराबर होता है (अंतर = मिन्यूएंड - सबट्रेंड), तो ऐसी स्थिति में मिन्यूएंड s बन सकता है (नई माप लंबाई) और सबट्रेंड R (मापी जाने वाली लंबाई) बन सकता है; दूसरे शब्दों में घटाएं जाने का यह "अर्थ" आपस में बदल सकता है।

निम्नलिखित संस्करण का उपयोग C-परिवार की प्रोग्रामिंग भाषाओं के साथ किया जा सकता है: C-परिवार से प्रोग्रामिंग भाषाएं:

// 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;                                                                   }

यूक्लिड एल्गोरिथम का परीक्षण

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

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

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

यूक्लिड कलन विधि (एल्गोरिथ्म) को मापने और सुधारना

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

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

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

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

एल्गोरिथम विश्लेषण

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

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

औपचारिक बनाम अनुभवजन्य

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

अनुभवजन्य परीक्षण उपयोगी है क्योंकि यह अप्रत्याशित अंतःक्रियाओं को उजागर कर सकता है जो प्रदर्शन को प्रभावित करते हैं। प्रोग्राम ऑप्टिमाइजेशन (Programming Optimization) के बाद किसी एल्गोरिथम में संभावित सुधारों से पहले/बाद में तुलना करने के लिए बेंचमार्क का उपयोग किया जा सकता है। अनुभवजन्य परीक्षण औपचारिक विश्लेषण की जगह नहीं ले सकते, हालांकि, और निष्पक्ष तरीके से प्रदर्शन करने के लिए तुच्छ नहीं हैं।[71]

निष्पादन दक्षता

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

वर्गीकरण

कलन विधि (एल्गोरिथ्म) को वर्गीकृत करने के कई तरीके हैं, जिनमें से प्रत्येक की अपनी खूबियां हैं।

कार्यान्वयन द्वारा

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

int gcd(int A, int B) {
    if (B == 0)
        return A;
    else if (A > B)
        return gcd(A-B,B);
    else
        return gcd(A,B-A);
}
उपरोक्त फ़्लोचार्ट (above flowchart) से यूक्लिड के कलन विधि (एल्गोरिथ्म) का पुनरावर्ती सी (C) कार्यान्वयन
प्रत्यावर्तन
एक पुनरावर्ती कलन विधि (एल्गोरिथ्म) वह है जो एक निश्चित स्थिति (जिसे टर्मिनेशन कंडीशन के रूप में भी जाना जाता है) से मेल खाने तक बार-बार खुद को इनवॉइस (संदर्भित करता है) करता है, जो कार्यात्मक प्रोग्रामिंग के लिए एक सामान्य विधि है। पुनरावृत्त कलन विधि (एल्गोरिथ्म) दी गई समस्याओं को हल करने के लिए लूप और कभी-कभी अतिरिक्त डेटा संरचनाओं जैसे स्टैक जैसे दोहराव वाले निर्माणों का उपयोग करते हैं। कुछ समस्याएं एक कार्यान्वयन या दूसरे के लिए स्वाभाविक रूप से अनुकूल हैं। उदाहरण के लिए, हनोई के टावरों को पुनरावर्ती कार्यान्वयन का उपयोग करके अच्छी तरह से समझा जाता है। प्रत्येक पुनरावर्ती संस्करण में एक समकक्ष (लेकिन संभवतः अधिक या कम जटिल) पुनरावृत्त संस्करण होता है, और इसके विपरीत।
तार्किक
एक कलन विधि (एल्गोरिथ्म) को नियंत्रित तार्किक कटौती के रूप में देखा जा सकता है। इस धारणा को इस प्रकार व्यक्त किया जा सकता है: एल्गोरिथम = तर्क + नियंत्रण[74] तर्क घटक उन अभिगृहीतों को व्यक्त करता है जिनका उपयोग गणना में किया जा सकता है और नियंत्रण घटक उस तरीके को निर्धारित करता है जिसमें कटौती को स्वयंसिद्धों पर लागू किया जाता है। यह तर्क प्रोग्रामिंग प्रतिमान का आधार है। शुद्ध तर्क प्रोग्रामिंग भाषाओं में, नियंत्रण घटक तय होता है और कलन विधि (एल्गोरिथ्म) केवल तर्क घटक की आपूर्ति करके निर्दिष्ट किया जाता है। इस दृष्टिकोण की अपील सुरुचिपूर्ण शब्दार्थ है: अभिगृहीतों में परिवर्तन एल्गोरिथम में एक सुपरिभाषित परिवर्तन उत्पन्न करता है।
धारावाहिक, समानांतर या वितरित
कलन विधि (एल्गोरिथ्म) की चर्चा आमतौर पर इस धारणा के साथ की जाती है कि कंप्यूटर एक समय में एक एल्गोरिथम के एक निर्देश को निष्पादित करते हैं। उन कंप्यूटरों को कभी-कभी सीरियल कंप्यूटर कहा जाता है। समानांतर कलन विधि (एल्गोरिथ्म) या वितरित कलन विधि (एल्गोरिथ्म) के विपरीत, ऐसे वातावरण के लिए डिज़ाइन किए गए कलन विधि (एल्गोरिथ्म) को सीरियल कलन विधि (एल्गोरिथ्म) कहा जाता है। समानांतर कलन विधि (एल्गोरिथ्म) कंप्यूटर आर्किटेक्चर का लाभ उठाते हैं जहां एक ही समय में कई प्रोसेसर एक समस्या पर काम कर सकते हैं, जबकि वितरित कलन विधि (एल्गोरिथ्म) एक कंप्यूटर नेटवर्क से जुड़ी कई मशीनों का उपयोग करते हैं। समानांतर या वितरित कलन विधि (एल्गोरिथ्म) समस्या को अधिक सममित या विषम उपसमस्याओं में विभाजित करते हैं और परिणामों को एक साथ वापस एकत्र करते हैं। ऐसे कलन विधि (एल्गोरिथ्म) में संसाधन की खपत न केवल प्रत्येक प्रोसेसर पर प्रोसेसर चक्र है, बल्कि प्रोसेसर के बीच संचार ओवरहेड भी है। कुछ छँटाई कलन विधि (एल्गोरिथ्म) को कुशलतापूर्वक समानांतर किया जा सकता है, लेकिन उनका संचार ओवरहेड महंगा है। पुनरावृत्त कलन विधि (एल्गोरिथ्म) आम तौर पर समानांतर होते हैं। कुछ समस्याओं में समानांतर कलन विधि (एल्गोरिथ्म) नहीं होते हैं और उन्हें स्वाभाविक रूप से धारावाहिक समस्याएं कहा जाता है।
नियतात्मक या गैर-नियतात्मक
नियतात्मक कलन विधि (एल्गोरिथ्म) एल्गोरिथम के हर चरण पर सटीक निर्णय के साथ समस्या का समाधान करते हैं जबकि गैर नियतात्मक कलन विधि (एल्गोरिथ्म) अनुमान के माध्यम से समस्याओं का समाधान करते हैं, हालांकि विशिष्ट अनुमान अनुमानों के उपयोग के माध्यम से अधिक सटीक होते हैं।
सटीक या अनुमानित
जबकि कई कलन विधि (एल्गोरिथ्म) एक सटीक समाधान तक पहुंचते हैं, सन्निकटन कलन विधि (एल्गोरिथ्म) एक ऐसा सन्निकटन चाहते हैं जो वास्तविक समाधान के करीब हो। नियतात्मक या यादृच्छिक रणनीति का उपयोग करके सन्निकटन तक पहुँचा जा सकता है। इस तरह के कलन विधि (एल्गोरिथ्म) का कई कठिन समस्याओं के लिए व्यावहारिक मूल्य है अनुमानित एल्गोरिथम के उदाहरणों में से एक है नॅप्सैक समस्या, जहां दी गई वस्तुओं का एक सेट है। इसका लक्ष्य अधिकतम कुल मूल्य प्राप्त करने के लिए नैपसैक पैक करना है। प्रत्येक वस्तु का कुछ वजन और मूल्य होता है। कुल भार जो वहन किया जा सकता है, कुछ निश्चित संख्या एक्स (X) से अधिक नहीं है। इसलिए, समाधान को वस्तुओं के वजन के साथ-साथ उनके मूल्य पर भी विचार करना चाहिए।[75]
मात्रा का कलन विधि (एल्गोरिथ्म)
वे क्वांटम गणना के यथार्थवादी मॉडल पर चलते हैं। शब्द आमतौर पर उन कलन विधि (एल्गोरिथ्म) के लिए उपयोग किया जाता है जो स्वाभाविक रूप से क्वांटम लगते हैं, या क्वांटम कंप्यूटिंग की कुछ आवश्यक विशेषता का उपयोग करते हैं जैसे क्वांटम सुपरपोजिशन या क्वांटम उलझाव।

डिजाइन प्रतिमान द्वारा

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

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

अनुकूलन समस्याएं

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

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

अध्ययन के क्षेत्र द्वारा

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

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

जटिलता द्वारा

कलन विधि (एल्गोरिथ्म) को समय की मात्रा द्वारा वर्गीकृत किया जा सकता है उन्हें अपने इनपुट आकार की तुलना में पूरा करने की आवश्यकता है:

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

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

निरंतर कलन विधि (एल्गोरिथ्म)

"कलन विधि (एल्गोरिथ्म)" शब्द पर लागू होने पर विशेषण "निरंतर" का अर्थ हो सकता है:

  • डेटा पर काम करने वाला एक कलन विधि (एल्गोरिथ्म) जो निरंतर मात्रा का प्रतिनिधित्व करता है, भले ही यह डेटा असतत अनुमानों द्वारा दर्शाया गया हो ऐसे कलन विधि (एल्गोरिथ्म) का संख्यात्मक विश्लेषण में अध्ययन किया जाता है; या
  • एक विभेदक समीकरण के रूप में एक कलन विधि (एल्गोरिथ्म) जो एनालॉग कंप्यूटर पर चलने वाले डेटा पर लगातार काम करता है।[79]

विधिक कारक

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

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

इतिहास: कलन विधि (एल्गोरिथ्म) की धारणा का विकास

प्राचीन निकट पूर्व

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

अंकगणित के लिए एल्गोरिथम प्राचीन मिस्र के गणित में भी पाए जाते हैं, जो लगभग 1550 ई.पू. बाद में प्राचीन हेलेनिस्टिक गणित (Hellenistic mathematics) में कलन विधि (एल्गोरिथ्म) का उपयोग किया गया।[11] इरेटोस्थनीज की छलनी(Sieve of Eratosthenes) के दो उदाहरण हैं, जिसका वर्णन निकोमाचस (Nicomachus) द्वारा अंकगणित के परिचय में किया गया था, यूक्लिडियन एल्गोरिथम (Introduction to Arithmetic), जिसे पहली बार यूक्लिड के तत्वों (सी. 300 ईसा पूर्व) में वर्णित किया गया था

असतत और अलग -अलग प्रतीक

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

संख्याओं के लिए स्थान धारकों के रूप में प्रतीकों का हेरफेर: बीजगणित

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

अपने समय से डेढ़ सौ आगे, लाइबनिज ने तर्क के बीजगणित का प्रस्ताव रखा, एक बीजगणित जो तार्किक अवधारणाओं को तरीके से हेरफेर करने के नियमों को निर्दिष्ट करेगा कि साधारण बीजगणित संख्याओं में हेर-फेर के नियमों को निर्दिष्ट करता है.[83]

क्रिप्टोग्राफिक कलन विधि (एल्गोरिथ्म)

एन्क्रिप्टेड कोड को समझने के लिए पहला क्रिप्टोग्राफ़िक कलन विधि (एल्गोरिथ्म) इसे 9वीं शताब्दी के अरब गणितज्ञ अल किंडी द्वारा ए मैनुस्क्रिप्ट ऑन डिक्रिप्शन क्रिप्टोग्राफ़िक संदेशों में विकसित किया गया था। उन्होंने आवृत्ति विश्लेषण द्वारा क्रिप्टोएनालिसिस का पहला विवरण दिया, जो सबसे पुराना कोडब्रेकिंग कलन विधि (एल्गोरिथ्म) था।।[13]

असतत स्थितिों के साथ यांत्रिक विरोधाभास

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

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

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

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

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

गणितज्ञ मार्टिन डेविस इलेक्ट्रोमैकेनिकल रिले के विशेष महत्व को देखते हैं (इसके दो "बाइनरी स्टेट्स" खुले और बंद हैं):

यह केवल 1930 के दशक में विद्युत रिले का उपयोग करने वाले इलेक्ट्रोमैकेनिकल कैलकुलेटर के विकास के साथ था, बैबेज ने जिस दायरे की कल्पना की थी, उसमें मशीनों का निर्माण किया गया था।"[92]

गणित 19 वीं शताब्दी के दौरान 20 वीं शताब्दी के मध्य तक

प्रतीक और नियम के अनुसार तेजी से उत्तराधिकार के रूप में, जॉर्ज बूले (1847, 1854), गॉटलोब फ्रेगे (1879) और ग्यूसेप पीनो (1888-1889) के गणित ने अंकगणित को नियमों द्वारा हेरफेर किए गए प्रतीकों के अनुक्रम को कम कर दिया। पिनो के अंकगणित के सिद्धांत के अनुसार, एक नई विधि द्वारा प्रस्तुत (1888) "एक प्रतीकात्मक भाषा में गणित के स्वयंसिद्धीकरण का पहला प्रयास" था।[93]

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

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

प्रभावी परिकलन क्षमता के अनुसार 1928 में हिल्बर्ट द्वारा सटीक रूप से परिभाषित इंटशेडुंगस समस्या (Entscheidungs problem) को हल करने के प्रयास में, गणितज्ञों ने सबसे पहले "प्रभावी विधि" या "प्रभावी गणना" या "प्रभावी गणना" (यानी, एक गणना जो सफल होगी) से क्या मतलब था, यह परिभाषित करने के बारे में निर्धारित किया। तेजी से उत्तराधिकार में निम्नलिखित दिखाई दिया: अलोंजो चर्च, स्टीफन क्लेन और जेबी रॉसर के -कैलकुलस[96] जैक्स हेरब्रांड (cf. गोडेल के प्रिंसटन लेक्चर ऑफ 1934) और क्लेन द्वारा बाद के सरलीकरण के सुझावों पर गोडेल के काम से "सामान्य रिकर्सन" की एक अच्छी तरह से सम्मानित परिभाषा है।[97] चर्च का प्रमाण है कि इंटशेडुंगस समस्या (Entscheidungs problem) असाध्य था,[98] एमिल पोस्ट की प्रभावी गणना की परिभाषा एक कार्यकर्ता के रूप में बिना दिमाग के निर्देशों की एक सूची के बाद कमरे के एक क्रम के माध्यम से बाएं या दाएं स्थानांतरित करने के लिए और जब वहाँ या तो एक कागज को चिह्नित करें या मिटा दें या कागज का निरीक्षण करें और अगले निर्देश के बारे में हाँ या ना में निर्णय लें।[99] एलन ट्यूरिंग का सबूत है कि इंटशेडुंगस समस्या (Entscheidungs problem) उनकी "एक स्वचालित मशीन" के उपयोग से हल करने योग्य नहीं था।[100] लगभग पोस्ट के "फॉर्मूलेशन" के समान, जे बार्कले रॉसर की "एक मशीन" के संदर्भ में "प्रभावी विधि" की परिभाषा।[101] क्लेन का "चर्च थीसिस" के अग्रदूत का प्रस्ताव जिसे उन्होंने "थीसिस " कहा,[102] और कुछ साल बाद क्लेन ने अपनी थीसिस का नाम बदलकर[103] "चर्च ट्यूरिंग थीसिस" और "ट्यूरिंग की थीसिस" का प्रस्ताव रखा।[104]

एमिल पोस्ट (1936) और एलन ट्यूरिंग (1936–37, 1939)

एमिल पोस्ट (1936) ने "कंप्यूटर" (मनुष्य) की क्रियाओं का वर्णन इस प्रकार किया है:

"... दो अवधारणाएं शामिल हैं: एक प्रतीक स्थान का जिसमें समस्या से उत्तर की ओर ले जाने का कार्य किया जाना है, और दिशाओं का एक निश्चित अपरिवर्तनीय सेट।

उसका प्रतीक स्थान होगा।

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

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

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

बेलेचले पार्क में एलन ट्यूरिंग की प्रतिमा

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

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

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

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

ट्यूरिंग की कमी से निम्नलिखित पैदावार होती है:

"सरल संचालन में इसलिए शामिल होना चाहिए:

"(A) देखे गए वर्गों में से एक पर प्रतीक का परिवर्तन

"(B) पहले देखे गए वर्गों में से एक के एल वर्गों के भीतर दूसरे वर्ग में देखे गए वर्गों में से एक का परिवर्तन।

"यह हो सकता है कि इनमें से कुछ परिवर्तन अनिवार्य रूप से मन की स्थिति में बदलाव का आह्वान करते हैं।

इसलिए, सबसे सामान्य एकल ऑपरेशन को निम्नलिखित में से एक माना जाना चाहिए:

"(A) एक संभावित परिवर्तन (A) एक साथ मन की स्थिति के संभावित परिवर्तन के साथ प्रतीक का।

"(B) एक संभावित परिवर्तन (B) मनाया वर्गों के साथ, मन की स्थिति के संभावित परिवर्तन के साथ"

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

कुछ साल बाद, ट्यूरिंग ने अपने विश्लेषण (शोध प्रबंध (थीसिस), परिभाषा) को इस सशक्त अभिव्यक्ति के साथ विस्तारित किया:

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

जे.बी. रोसेर (1939) और एस.सी. क्लेन (1943)

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

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

स्टीफन सी. क्लेन ने अपने अब तक के प्रसिद्ध "शोध प्रबंध (थीसिस)" के रूप में परिभाषित किया, जिसे चर्च ट्यूरिंग थीसिस के रूप में जाना जाता है। लेकिन उन्होंने इसे निम्नलिखित संदर्भ में किया (मूल में बोल्डफेस):

"12. कलन विधि (एल्गोरिथ्म) सिद्धांत... एक पूर्ण कलन विधि (एल्गोरिथ्म) सिद्धांत की स्थापना में, हम क्या करते हैं एक प्रक्रिया का वर्णन करने के लिए, स्वतंत्र चर के मूल्यों के प्रत्येक सेट के लिए प्रदर्शन योग्य, कौन सी प्रक्रिया अनिवार्य रूप से समाप्त हो जाती है और इस तरह से कि परिणाम से हम इस प्रश्न का एक निश्चित उत्तर "हां" या "नहीं" पढ़ सकते हैं, "क्या विधेय मान सत्य है?" (क्लेन 1943:273)

इतिहास 1950 के बाद

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

यह भी देखें

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

टिप्पणियाँ

  1. "Definition of ALGORITHM". Merriam-Webster Online Dictionary (in English). Archived from the original on February 14, 2020. Retrieved 2019-11-14.
  2. Blair, Ann, Duguid, Paul, Goeing, Anja-Silvia and Grafton, Anthony. Information: A Historical Companion, Princeton: Princeton University Press, 2021. p. 247
  3. David A. Grossman, Ophir Frieder, Information Retrieval: Algorithms and Heuristics, 2nd edition, 2004, ISBN 1402030045
  4. "Any classical mathematical algorithm, for example, can be described in a finite number of English words" (Rogers 1987:2).
  5. "an algorithm is a procedure for computing a function (with respect to some chosen notation for integers) ... this limitation (to numerical functions) results in no loss of generality", (Rogers 1987:1).
  6. Well defined with respect to the agent that executes the algorithm: "There is a computing agent, usually human, which can react to the instructions and carry out the computations" (Rogers 1987:2).
  7. "An algorithm has zero or more inputs, i.e., quantities which are given to it initially before the algorithm begins" (Knuth 1973:5).
  8. "A procedure which has all the characteristics of an algorithm except that it possibly lacks finiteness may be called a 'computational method'" (Knuth 1973:5).
  9. "An algorithm has one or more outputs, i.e. quantities which have a specified relation to the inputs" (Knuth 1973:5).
  10. Whether or not a process with random interior processes (not including the input) is an algorithm is debatable. Rogers opines that: "a computation is carried out in a discrete stepwise fashion, without the use of continuous methods or analogue devices ... carried forward deterministically, without resort to random methods or devices, e.g., dice" (Rogers 1987:2).
  11. 11.0 11.1 11.2 Chabert, Jean-Luc (2012). A History of Algorithms: From the Pebble to the Microchip. Springer Science & Business Media. pp. 7–8. ISBN 9783642181924.
  12. Cooke, Roger L. (2005). The History of Mathematics: A Brief Course. John Wiley & Sons. ISBN 978-1-118-46029-0.
  13. 13.0 13.1 Dooley, John F. (2013). A Brief History of Cryptology and Cryptographic Algorithms. Springer Science & Business Media. pp. 12–3. ISBN 9783319016283.
  14. "Al-Khwarizmi biography". www-history.mcs.st-andrews.ac.uk. Archived from the original on August 2, 2019. Retrieved May 3, 2017.
  15. "Etymology of algorithm". Chambers Dictionary. Archived from the original on March 31, 2019. Retrieved December 13, 2016.
  16. Hogendijk, Jan P. (1998). "al-Khwarzimi". Pythagoras. 38 (2): 4–5. Archived from the original on April 12, 2009.
  17. Oaks, Jeffrey A. "Was al-Khwarizmi an applied algebraist?". University of Indianapolis. Archived from the original on July 18, 2011. Retrieved May 30, 2008.
  18. Brezina, Corona (2006). Al-Khwarizmi: The Inventor Of Algebra. The Rosen Publishing Group. ISBN 978-1-4042-0513-0.
  19. Foremost mathematical texts in history Archived June 9, 2011, at the Wayback Machine, according to Carl B. Boyer.
  20. "algorismic", The Free Dictionary, archived from the original on December 21, 2019, retrieved 2019-11-14
  21. Oxford English Dictionary, Third Edition, 2012 s.v.
  22. Sriram, M. S. (2005). "Algorithms in Indian Mathematics". In Emch, Gerard G.; Sridharan, R.; Srinivas, M. D. (eds.). Contributions to the History of Indian Mathematics (in English). Springer. p. 153. ISBN 978-93-86279-25-5.
  23. Mehri, Bahman (2017). "From Al-Khwarizmi to Algorithm". Olympiads in Informatics. 11 (2): 71–74. doi:10.15388/ioi.2017.special.11.
  24. "Abu Jafar Muhammad ibn Musa al-Khwarizmi". members.peak.org. Archived from the original on August 21, 2019. Retrieved 2019-11-14.
  25. Kleene 1943 in Davis 1965:274
  26. Rosser 1939 in Davis 1965:225
  27. Stone 1973:4
  28. Simanowski, Roberto (2018). The Death Algorithm and Other Digital Dilemmas. Untimely Meditations. Vol. 14. Translated by Chase, Jefferson. Cambridge, Massachusetts: MIT Press. p. 147. ISBN 9780262536370. Archived from the original on December 22, 2019. Retrieved 27 May 2019. [...] the next level of abstraction of central bureaucracy: globally operating algorithms.
  29. Dietrich, Eric (1999). "Algorithm". In Wilson, Robert Andrew; Keil, Frank C. (eds.). The MIT Encyclopedia of the Cognitive Sciences. MIT Cognet library. Cambridge, Massachusetts: MIT Press (published 2001). p. 11. ISBN 9780262731447. Retrieved 22 July 2020. An algorithm is a recipe, method, or technique for doing something.
  30. Stone simply requires that "it must terminate in a finite number of steps" (Stone 1973:7–8).
  31. Boolos and Jeffrey 1974,1999:19
  32. Knuth 1973:7 states: "In practice we not only want algorithms, we want good algorithms ... one criterion of goodness is the length of time taken to perform the algorithm ... other criteria are the adaptability of the algorithm to computers, its simplicity, and elegance, etc."
  33. cf Stone 1972:5
  34. cf Stone 1973:6
  35. Stone 1973:7–8 states that there must be, "...a procedure that a robot [i.e., computer] can follow in order to determine precisely how to obey the instruction". Stone adds finiteness of the process, and definiteness (having no ambiguity in the instructions) to this definition.
  36. Knuth, loc. cit
  37. Minsky 1967, p. 105
  38. Gurevich 2000:1, 3
  39. Sipser 2006:157
  40. Goodrich, Michael T.; Tamassia, Roberto (2002), Algorithm Design: Foundations, Analysis, and Internet Examples, John Wiley & Sons, Inc., ISBN 978-0-471-38365-9, archived from the original on April 28, 2015, retrieved June 14, 2018
  41. Knuth 1973:7
  42. Chaitin 2005:32
  43. Rogers 1987:1–2
  44. In his essay "Calculations by Man and Machine: Conceptual Analysis" Seig 2002:390 credits this distinction to Robin Gandy, cf Wilfred Seig, et al., 2002 Reflections on the foundations of mathematics: Essays in honor of Solomon Feferman, Association for Symbolic Logic, A.K. Peters Ltd, Natick, MA.
  45. cf Gandy 1980:126, Robin Gandy Church's Thesis and Principles for Mechanisms appearing on pp. 123–148 in J. Barwise et al. 1980 The Kleene Symposium, North-Holland Publishing Company.
  46. A "robot": "A computer is a robot that performs any task that can be described as a sequence of instructions." cf Stone 1972:3
  47. Lambek's "abacus" is a "countably infinite number of locations (holes, wires etc.) together with an unlimited supply of counters (pebbles, beads, etc.). The locations are distinguishable, the counters are not". The holes have unlimited capacity, and standing by is an agent who understands and is able to carry out the list of instructions" (Lambek 1961:295). Lambek references Melzak who defines his Q-machine as "an indefinitely large number of locations ... an indefinitely large supply of counters distributed among these locations, a program, and an operator whose sole purpose is to carry out the program" (Melzak 1961:283). B-B-J (loc. cit.) add the stipulation that the holes are "capable of holding any number of stones" (p. 46). Both Melzak and Lambek appear in The Canadian Mathematical Bulletin, vol. 4, no. 3, September 1961.
  48. If no confusion results, the word "counters" can be dropped, and a location can be said to contain a single "number".
  49. "We say that an instruction is effective if there is a procedure that the robot can follow in order to determine precisely how to obey the instruction." (Stone 1972:6)
  50. cf Minsky 1967: Chapter 11 "Computer models" and Chapter 14 "Very Simple Bases for Computability" pp. 255–281, in particular,
  51. cf Knuth 1973:3.
  52. But always preceded by IF-THEN to avoid improper subtraction.
  53. Knuth 1973:4
  54. Stone 1972:5. Methods for extracting roots are not trivial: see Methods of computing square roots.
  55. Leeuwen, Jan (1990). Handbook of Theoretical Computer Science: Algorithms and complexity. Volume A. Elsevier. p. 85. ISBN 978-0-444-88071-0.
  56. John G. Kemeny and Thomas E. Kurtz 1985 Back to Basic: The History, Corruption, and Future of the Language, Addison-Wesley Publishing Company, Inc. Reading, MA, ISBN 0-201-13433-0.
  57. Tausworthe 1977:101
  58. Tausworthe 1977:142
  59. Knuth 1973 section 1.2.1, expanded by Tausworthe 1977 at pages 100ff and Chapter 9.1
  60. cf Tausworthe 1977
  61. Heath 1908:300; Hawking's Dover 2005 edition derives from Heath.
  62. " 'Let CD, measuring BF, leave FA less than itself.' This is a neat abbreviation for saying, measure along BA successive lengths equal to CD until a point F is reached such that the length FA remaining is less than CD; in other words, let BF be the largest exact multiple of CD contained in BA" (Heath 1908:297)
  63. For modern treatments using division in the algorithm, see Hardy and Wright 1979:180, Knuth 1973:2 (Volume 1), plus more discussion of Euclid's algorithm in Knuth 1969:293–297 (Volume 2).
  64. Euclid covers this question in his Proposition 1.
  65. "Euclid's Elements, Book VII, Proposition 2". Aleph0.clarku.edu. Archived from the original on May 24, 2012. Retrieved May 20, 2012.
  66. While this notion is in widespread use, it cannot be defined precisely.
  67. Knuth 1973:13–18. He credits "the formulation of algorithm-proving in terms of assertions and induction" to R W. Floyd, Peter Naur, C.A.R. Hoare, H.H. Goldstine and J. von Neumann. Tausworth 1977 borrows Knuth's Euclid example and extends Knuth's method in section 9.1 Formal Proofs (pp. 288–298).
  68. Tausworthe 1997:294
  69. cf Knuth 1973:7 (Vol. I), and his more-detailed analyses on pp. 1969:294–313 (Vol II).
  70. Breakdown occurs when an algorithm tries to compact itself. Success would solve the Halting problem.
  71. Kriegel, Hans-Peter; Schubert, Erich; Zimek, Arthur (2016). "The (black) art of run-time evaluation: Are we comparing algorithms or implementations?". Knowledge and Information Systems. 52 (2): 341–378. doi:10.1007/s10115-016-1004-2. ISSN 0219-1377. S2CID 40772241.
  72. Gillian Conahan (January 2013). "Better Math Makes Faster Data Networks". discovermagazine.com. Archived from the original on May 13, 2014. Retrieved May 13, 2014.
  73. Haitham Hassanieh, Piotr Indyk, Dina Katabi, and Eric Price, "ACM-SIAM Symposium On Discrete Algorithms (SODA) Archived July 4, 2013, at the Wayback Machine, Kyoto, January 2012. See also the sFFT Web Page Archived February 21, 2012, at the Wayback Machine.
  74. Kowalski 1979
  75. Kellerer, Hans; Pferschy, Ulrich; Pisinger, David (2004). Knapsack Problems | Hans Kellerer | Springer (in English). Springer. doi:10.1007/978-3-540-24777-7. ISBN 978-3-540-40286-2. Archived from the original on October 18, 2017. Retrieved September 19, 2017.
  76. Carroll, Sue; Daughtrey, Taz (July 4, 2007). Fundamental Concepts for the Software Quality Engineer. American Society for Quality. pp. 282 et seq. ISBN 978-0-87389-720-4.
  77. For instance, the volume of a convex polytope (described using a membership oracle) can be approximated to high accuracy by a randomized polynomial time algorithm, but not by a deterministic one: see Dyer, Martin; Frieze, Alan; Kannan, Ravi (January 1991), "A Random Polynomial-time Algorithm for Approximating the Volume of Convex Bodies", J. ACM, 38 (1): 1–17, CiteSeerX 10.1.1.145.4600, doi:10.1145/102782.102783, S2CID 13268711.
  78. George B. Dantzig and Mukund N. Thapa. 2003. Linear Programming 2: Theory and Extensions. Springer-Verlag.
  79. Tsypkin (1971). Adaptation and learning in automatic systems. Academic Press. p. 54. ISBN 978-0-08-095582-7.
  80. Knuth, Donald E. (1972). "Ancient Babylonian Algorithms" (PDF). Commun. ACM. 15 (7): 671–677. doi:10.1145/361454.361514. ISSN 0001-0782. S2CID 7829945. Archived from the original (PDF) on 2012-12-24.
  81. Aaboe, Asger (2001), Episodes from the Early History of Astronomy, New York: Springer, pp. 40–62, ISBN 978-0-387-95136-2
  82. Chabert, Jean-Luc (2012). A History of Algorithms: From the Pebble to the Microchip. Springer Science & Business Media. p. 2. ISBN 9783642181924.
  83. Davis 2000:18
  84. Bolter 1984:24
  85. Bolter 1984:26
  86. Bolter 1984:33–34, 204–206.
  87. All quotes from W. Stanley Jevons 1880 Elementary Lessons in Logic: Deductive and Inductive, Macmillan and Co., London and New York. Republished as a googlebook; cf Jevons 1880:199–201. Louis Couturat 1914 the Algebra of Logic, The Open Court Publishing Company, Chicago and London. Republished as a googlebook; cf Couturat 1914:75–76 gives a few more details; he compares this to a typewriter as well as a piano. Jevons states that the account is to be found at January 20, 1870 The Proceedings of the Royal Society.
  88. Jevons 1880:199–200
  89. All quotes from John Venn 1881 Symbolic Logic, Macmillan and Co., London. Republished as a googlebook. cf Venn 1881:120–125. The interested reader can find a deeper explanation in those pages.
  90. Bell and Newell diagram 1971:39, cf. Davis 2000
  91. *Melina Hill, Valley News Correspondent, A Tinkerer Gets a Place in History, Valley News West Lebanon NH, Thursday, March 31, 1983, p. 13.
  92. Davis 2000:14
  93. van Heijenoort 1967:81ff
  94. van Heijenoort's commentary on Frege's Begriffsschrift, a formula language, modeled upon that of arithmetic, for pure thought in van Heijenoort 1967:1
  95. Dixon 1906, cf. Kleene 1952:36–40
  96. cf. footnote in Alonzo Church 1936a in Davis 1965:90 and 1936b in Davis 1965:110
  97. Kleene 1935–6 in Davis 1965:237ff, Kleene 1943 in Davis 1965:255ff
  98. Church 1936 in Davis 1965:88ff
  99. cf. "Finite Combinatory Processes – formulation 1", Post 1936 in Davis 1965:289–290
  100. Turing 1936–37 in Davis 1965:116ff
  101. Rosser 1939 in Davis 1965:226
  102. Kleene 1943 in Davis 1965:273–274
  103. Kleene 1952:300, 317
  104. Kleene 1952:376
  105. Turing 1936–37 in Davis 1965:289–290
  106. Turing 1936 in Davis 1965, Turing 1939 in Davis 1965:160
  107. Hodges, p. 96
  108. Turing 1936–37:116
  109. 109.0 109.1 Turing 1936–37 in Davis 1965:136
  110. Turing 1939 in Davis 1965:160

ग्रन्थसूची

अग्रिम पठन

बाहरी संबंध

Algorithm repositories