एक एल्गोरिथ्म क्या है?


12

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

"विकल्पों में से एक" मुझे इसे समझना है, यह है कि इसका मतलब है कि कुछ किया जाना चाहिए, जिसे छद्मकोड में एक सूची के रूप में लिखा जा सकता है।

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

(मैं स्टाकेवरफ्लो पर नहीं बल्कि यहाँ पूछना चाहता था, क्योंकि यह एक विशेष समस्या / भाषा के बारे में नहीं है, साथ ही मुझे लगता है कि यहाँ के अधिकांश लोगों को 'क्यों' पता है, या कम से कम उत्तर यहाँ अधिक विस्तृत हैं, बजाय स्टैकवॉर्टर के जहां यह अलग है, मुझे खेद है अगर मुझे वहां से पूछना चाहिए)


5
गूगल? विकी? google.com/search?q=algorithm
मैगलो

1
@ अपाला: मुझे नहीं लगता कि वे सीमाएँ लागू होती हैं।
जोश के

2
@ अपाला: परिमित , ज्ञात नहीं ।
जोश के

2
@ जोनाथन: "शब्द जिन्हें मुझे देखना है"? कौनसे शब्द? विशिष्ट होना । यह साइट जादू नहीं है। हम आपको नहीं जानते। हम नहीं जानते कि आप क्या पढ़ते हैं। हम नहीं जानते कि आपको क्या उलझन है। कृपया विशिष्ट रहें ।
एस.लॉट

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

जवाबों:


19

एक एल्गोरिथ्म एक फ़ंक्शन की गणना (या एक प्रक्रिया को निष्पादित करने) के लिए अच्छी तरह से परिभाषित निर्देशों का एक सीमित अनुक्रम है जो एक अच्छी तरह से परिभाषित समाप्त होने की स्थिति में समाप्त होता है।


1
+1। "परिमित, अच्छी तरह से परिभाषित और प्रभावी" विकिपीडिया प्रविष्टि में तीन मानदंड हैं। आप तीनों यहां भी हैं।
एस.लॉट

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

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

@ जॉन ऑस्किलेशन न्यूटन-रफसन में नियमित रूप से पता लगा सकते हैं।
अपाला

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

15

यह वास्तव में एक बहुत ही रोचक प्रश्न है, और वास्तव में अभी भी एक खुला शोध प्रश्न है।

एल्गोरिथ्म थ्योरी के दिग्गजों में से एक यूरी गुरेविच वर्तमान में Microsoft की सामुदायिक वेबसाइट Channel9 पर एक वीडियो व्याख्यान श्रृंखला दे रहे हैं:

जैसा कि आप देख सकते हैं, आपका बहुत ही प्रश्न वास्तव में दूसरे व्याख्यान का शीर्षक है। हालाँकि, मेरा सुझाव है कि आप इन तीनों को देखें।

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


2
लिंक के लिए धन्यवाद। आप पाठ में निम्नलिखित पर ध्यान देंगे जो पहले वीडियो के साथ आता है, एक एल्गोरिथ्म की परिभाषा के एक भाग के रूप में: "अंतिम रूप से अंतिम रूप से समाप्त होने की स्थिति में"। समाप्ति एक एल्गोरिथ्म की परिभाषा का एक अनिवार्य हिस्सा है। इसीलिए ऑपरेटिंग सिस्टम और नॉन-टर्मिनेटिंग सर्वर एल्गोरिदम नहीं हैं।
22

4

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

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


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

@ JörgWMittag लेकिन एक OS या एक वेब सर्वर "एक एल्गोरिथ्म" है? मुझे लगता है कि वे नहीं हैं - वे एल्गोरिदम का उपयोग करके अपने डोमेन के उपप्रोब्लेम्स को हल कर सकते हैं - और हर मामले में, उन्हें निश्चित रूप से एक अंतिम परिणाम की आवश्यकता है - लेकिन उनके पास ऐसे भाग भी हैं जो एल्गोरिदम नहीं हैं, और एक पूरे के रूप में वे ' टी एल्गोरिदम। (यह ऐसा है जैसा आपने एक अन्य टिप्पणी में कहा है - ओएस और वेब सर्वर प्रोग्राम हैं, लेकिन जरूरी नहीं कि एल्गोरिदम )।
एंड्रेस एफ।

2

एल्गोरिथ्म समस्या-समाधान के लिए उपयोग किए जाने वाले नियमों या प्रक्रिया (एक गणना में) का एक सेट है। असल में, एक समस्या है, आप एक समाधान चाहते हैं, और इस समाधान की प्रक्रिया एक एल्गोरिथ्म है। एक एल्गोरिथ्म में एक समाधान तक पहुंचने के लिए नियमों / प्रक्रिया का एक सीमित सेट होता है।

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

मुझे नहीं पता कि क्या आपके सवाल का जवाब है।


मुझे यह शब्द सेट पसंद नहीं है क्योंकि इसका मतलब "ऑर्डर नहीं किया गया" है। मैं "अनुक्रम", या गणित क्षेत्र में रहने के लिए घटना को तरजीह देना पसंद करूंगा
बेंजामिन

@ Ubiquité, सेट का मतलब जरूरी नहीं कि "ऑर्डर नहीं किया गया" हो। आप इच्छित ऑर्डर में एक सेट को वर्गीकृत कर सकते हैं (उदाहरण के लिए एक यादृच्छिक क्रम)। फिर भी, "सेट" शब्द की लोगों की व्याख्या की वजह से इसे कम करने की आवश्यकता नहीं है। साथ ही, आपके पास एक कंपाउंड सेट हो सकता है, जो सेट का एक समूह है, जो एल्गोरिदम का भी हिस्सा है। 4. "सेट" कुछ भी हो सकता है, जब तक कि इसका उचित रूप से एक समस्या के एल्गोरिदम समाधान के रूप में उपयोग किया जाता है।
बुहके सिंडी

मैं नीचे नहीं था!
बेंजामिन

क्षमा करें, मेरा मतलब आपको नीचता पर दोष देना नहीं था। डाउनवॉटर को डाउनवोट के लिए स्पष्ट रूप से कारण प्रदान करना चाहिए।
बुहाके सिंडी

1

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


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

@ Jörg, अच्छी तरह से OS कई परिणाम देता है, जो एक साथ लिया जाता है, अनुप्रयोगों को सिस्टम सेवाएं प्रदान करने का समग्र परिणाम उत्पन्न करता है।
थॉमसमैक्लोड

@ JörgWMittag जैसा कि मैंने आपसे अन्य टिप्पणियों में कहा, आपके अवलोकन का एक निष्कर्ष यह होगा कि एक ऑपरेटिंग सिस्टम वास्तव में एक एल्गोरिथ्म नहीं है;)
एंड्रेस एफ।

1

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

यह सबसे कुशलता से बनाया गया है कि इसे अंतरिक्ष और समय की एक सीमित मात्रा के भीतर व्यक्त किया जा सकता है। हम इसे किसी भी प्रोग्रामिंग भाषा में लागू कर सकते हैं।

एक एल्गोरिथ्म के गुण: निम्नलिखित एक एल्गोरिथ्म के मुख्य गुण हैं: -

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


0

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


0

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


0

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

क्या आप निम्नलिखित में से किसी एक / सभी को एक एल्गोरिथम मानेंगे?

  1. एक फ़ंक्शन जो 20 वर्षों की अवधि में ऋण की ब्याज दर की गणना करता है
  2. व्यावसायिक तर्क जो यह जांचता है कि सभी जानकारी ऋण आवेदन पर दर्ज की गई है या नहीं
  3. एक finderफ़ंक्शन जो ग्राहक ऑब्जेक्ट के लिए डेटाबेस पर सवाल उठाता है
  4. एक "हेल्पर" फ़ंक्शन जो साफ़ करता है और डेटा-प्रविष्टि को प्रारूपित करता है
  5. एक फ़ंक्शन जो XML फ़ाइल को पार्स करता है और व्यावसायिक ऑब्जेक्ट्स के लिए डेटा मैप करता है
  6. एक वर्ग जो इनपुट लेता है और उन्हें एक पाठ फ़ाइल में लिखता है

0

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


0

एल्गोरिथ्म अच्छी तरह से परिभाषित चरणों का एक क्रम है जो परिमित समय में परिणाम उत्पन्न करता है।

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

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

परिणाम: एक अंतिम स्थिति या मूल्य। यह पहले से अनुमान लगाने योग्य नहीं है, लेकिन कुछ शर्तों को पूरा करने के लिए एक निश्चित अंत होना चाहिए। इसका मतलब यह है कि एक ऑपरेटिंग सिस्टम एक एल्गोरिथ्म नहीं है, हालांकि यह उनमें से बहुत सारे का उपयोग करता है।

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

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


-1

अगर मुझे एक सामान्य परिभाषा देनी थी, तो मैं कहूंगा कि एक एल्गोरिथ्म एक कंप्यूटिंग समस्या को हल करने के लिए एक फॉर्मूला है जो कि अधिक जटिल है, और स्पष्ट / ब्रूट बल समाधान की तुलना में अधिक कुशल है।

इसके अलावा, यह नोट करना महत्वपूर्ण है कि एल्गोरिथ्म कोई विशिष्ट स्रोत कोड नहीं है; यह गणना ही है। अन्य बातों के अलावा, इसका मतलब है कि कोई भी ट्यूरिंग-पूर्ण भाषा किसी भी एल्गोरिथ्म को लागू कर सकती है जिसे कोई अन्य ट्यूरिंग-पूर्ण भाषा लागू कर सकती है।


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

-1 "एल्गोरिथम" एक अच्छी तरह से परिभाषित गणितीय शब्द है।
अपलाला

1
@ अपाला तो क्या आप इसे स्पष्टता के लिए पुनर्परिभाषित करने से रोकते हैं या, इसके सार की बेहतर समझ है? "निर्देशों के एक सेट" के रूप में एल्गोरिथ्म मेरे लिए लगभग कुछ भी नहीं कहता है।
मोजुबा

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

1
एक जानवर बल खोज एक एल्गोरिथ्म है। यह आमतौर पर एक सुंदर एल्गोरिथ्म नहीं है, और आम तौर पर लिखने लायक नहीं है। मैं जानवर बल को छोड़कर कोई वास्तविक उपयोगिता नहीं देखता, और कई मामलों में यह स्पष्ट नहीं है कि "जानवर बल से बेहतर" वास्तव में क्या मतलब है।
डेविड थॉर्नले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.