एक ही उद्देश्य से काम करने वाले विभिन्न एल्गोरिदम / डेटा संरचनाओं को सीखने के क्या कारण हैं?


91

मैं इस सवाल के बारे में सोच रहा था क्योंकि मैं एक स्नातक छात्र था। यह एक सामान्य प्रश्न है लेकिन मैं नीचे दिए गए उदाहरणों से विस्तार करूंगा।

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

डेटा संरचनाओं के लिए - उदाहरण के लिए, ढेर - द्विआधारी ढेर, द्विपद ढेर और फाइबोनैचि ढेर हैं, जिसमें फिबोनाची ढेर सबसे अच्छा समग्र जटिलता है।

जो मुझे भ्रमित करता है वह है: क्या कोई कारण है कि हमें उन सभी को जानने की आवश्यकता है? क्यों न केवल सीखें और सबसे अच्छी जटिलता से परिचित हों?

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


17
जैसा कि मैं हमेशा कहता हूं: ये (आमतौर पर) कोई "सर्वश्रेष्ठ" नहीं है। एक बार जब आप स्पष्ट रूप से परिभाषित करते हैं कि आप "बेहतर" से क्या मतलब है, तो उत्तर स्पष्ट हो जाता है।
राफेल

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

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

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

1
हमने वास्तव में एक StackExchange साइट का प्रस्ताव किया है जो विशेष रूप से CS शिक्षा के प्रश्नों में मदद करता है। यहाँ हमारा समर्थन करें: area51.stackexchange.com/proposals/92460/…
vk2015

जवाबों:


121

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

चलो एक उदाहरण के रूप में छँटाई करते हैं, क्योंकि हर कोई मानक सॉर्ट एल्गोरिदम से परिचित है।

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

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

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

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

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

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


7
महान उदाहरणों के साथ शानदार जवाब! यहां तक कि बुलबुला पास नहीं पता था कि असली दुनिया में अपनी व्यावहारिक उपयोग है ...
शोले

1
@ गेम का मुझे खेल व्यवसाय में बहुत अनुभव नहीं है, लेकिन उपरोक्त सभी डिग्री अलग-अलग हैं। (जाहिर है, एल्गोरिदम, डेटा संरचनाएं, और गणित जो आपको गेम की आवश्यकता है, संभवतः डेटाबेस या बायोइनफॉरमैटिक्स के लिए आवश्यक उन लोगों से अलग हैं या आपके पास क्या हैं।) यदि मैं आप थे, तो मैं यहां जाऊंगा और देखना शुरू करूंगा: हस्तनिर्मित। org इसके अलावा, यह gamedev.stackexchange.com
छद्म नाम

1
कैशे दक्षता एक बड़ा कारक है जो भारी मात्रा में खोजा जाता है (Google "मेमोरी वॉल")।
राफेल

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

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

51

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

कुछ उदाहरण:

  • मेरिजॉर्ट स्थिर है जहां क्विकसॉर्ट नहीं है।
  • बाइनरी सर्च ट्री आपको इन-ऑर्डर इटरेशन देते हैं, हैशटेबल्स नहीं।
  • बेलमैन-फोर्ड नेगेटिव एज वेट से निपट सकते हैं, दिजाकस्ट्रा नहीं कर सकते।

बनाने के लिए भी विचारशील विचार हैं:

  • सरल तरीकों से पहले अधिक शामिल समाधान को समझना कितना आसान है? (AVL के पेड़ (और उनके विश्लेषण) बिना BSTs; दीनिक बिना Ford-Fulkerson; ...;
  • क्या आप एक ही सिद्धांत और पैटर्न देखते हैं जब आप कई समाधानों के संपर्क में आने की तुलना में समस्या के प्रति केवल एक समाधान के संपर्क में होते हैं?
  • क्या समस्या के प्रति केवल एक समाधान के लिए पर्याप्त प्रशिक्षण (महारत की ओर) प्रदान करता है?
  • क्या आपको पता होना चाहिए कि कौन से समाधान पाए गए हैं (ताकि आपको पहिया को ओवर-ओवर से रोकने से रोका जा सके)?
  • जब प्रति समस्या केवल एक समाधान के सामने आती है, तो क्या आप जंगली में पाए जाने वाले अन्य समाधानों को समझेंगे (जैसे, वास्तविक दुनिया की प्रोग्रामिंग लाइब्रेरी में)?

  1. यह कुछ ऐसा है जिसे हम प्रोग्रामर प्रकारों से बहुत कुछ देखते हैं जिनके पास अपने निपटान में एक समृद्ध सीएस टूलबॉक्स नहीं है।

4
दिवालिएपन युक्तियों को शामिल करने के लिए +1! कई परिमेय (विशेषकर दूसरा और तीसरा) से संबंधित, यह देखते हुए कि एल्गोरिदम और डेटा संरचनाएं कैसे विकसित और अनुकूलित होती हैं जो विकास और अनुकूलन तकनीकों और व्यापार की समझ (केवल "क्या" नहीं बल्कि "कैसे" और "क्यों" सीखती हैं) )।
पॉल ए। क्लेटन

2
एक आगे विचार है कि है का विश्लेषण करने के विभिन्न विकल्प शायद असामान्य सेटिंग्स के लिए विश्लेषण नए एल्गोरिदम के लिए उपयोगी उपकरणों के उदाहरण प्रदान करता है।
वॉनब्रांड

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

1
@vonbrand हाँ। मैं समझ सकता हूं कि किसी एल्गोरिथम वर्ग पर टूलबॉक्स-आयाम में रुचि रखने वाले किसी व्यक्ति को उस कारण से झांसा देना होगा, हालांकि।
राफेल

7

में असली दुनिया , कुछ बिंदु पर आप सॉफ्टवेयर है कि अन्य लोगों की एक टीम द्वारा लिखा गया है पर काम कर होने की संभावना है। आपके जन्म से पहले इस सॉफ्टवेयर में से कुछ लिखे गए होंगे!

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

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

यह वही है जो किसी ऐसे व्यक्ति के साथ सेट करता है जिसने कंप्यूटर विज्ञान का अध्ययन किया है, इसके अलावा जिसने अभी-अभी प्रोग्राम करना सीखा है। अधिकांश नौकरियों में मैंने काम किया है, कंप्यूटर विज्ञान का अध्ययन करते समय ऐसा समय आया है कि मैं एक ऐसी समस्या को हल कर सकता हूं जो "पुस्तकों से सीखा" प्रोग्रामर नहीं कर सकता था, लेकिन 95% समय मैंने पाया कि कंप्यूटर विज्ञान का अध्ययन करने से मुझे कोई फायदा नहीं हुआ। अन्य अनुभवी प्रोग्रामर पर


जब तक आप जिन चीजों को हल करने की कोशिश कर रहे हैं, उनमें से 95% मशीन लर्निंग से संबंधित नहीं हैं। मैं यह नहीं देख सकता कि वास्तविक एमएल समस्याओं का सामना करने के लिए सामान्य प्रोग्रामर के पास किसी भी तरह का प्रयास करने का सही मौका कैसे हो सकता है।
पिनोच्चियो

3
लक्ष्य: 5% से बेहतर दर के साथ नौकरी प्राप्त करें।
राफेल

याद रखें कि CS का अध्ययन एल्गोरिदम और डेटा संरचनाओं के बारे में ज्ञान इकट्ठा करने का एक शानदार तरीका है। कोडिंग है कोडर के लिए - सबसे अच्छा व्यवसाय।
ग्रेबियर

5

कई लोगों ने सही उल्लेख किया है कि अक्सर कोई भी सबसे अच्छा एल्गोरिथ्म नहीं होता है - यह स्थिति पर निर्भर करता है।

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


5
यह उत्तर केवल पुराने वाले बिंदुओं को दोहराता है।
राफेल

1

बहुत सारे महान जवाब, बस मुझे लगता है कि कुछ याद आ रही है, हालांकि राफेल के जवाब में कुछ हद तक इसका उल्लेख है।

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

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