एक प्रोग्रामर के लिए यह जानना कितना महत्वपूर्ण है कि मेमोरी से क्विकसॉर्ट / मर्जसेट एल्गोरिदम को कैसे लागू किया जाए? [बन्द है]


58

मैं अपने नोट्स की समीक्षा कर रहा था और विभिन्न छँटाई एल्गोरिदम के कार्यान्वयन में ठोकर खाई।

जैसा कि मैंने क्विकसॉर्ट और मर्जसॉर्ट के कार्यान्वयन की भावना बनाने का प्रयास किया, यह मेरे लिए हुआ कि यद्यपि मैं एक जीवित के लिए प्रोग्रामिंग करता हूं और अपने आप को सभ्य मानता हूं कि मैं क्या करता हूं, मेरे पास अपने एल्गोरिदम को लागू करने के लिए न तो फोटोग्राफिक मेमोरी और न ही सरासर ब्रेनपावर है। मेरे नोट्स पर निर्भर। मुझे याद आया कि उनमें से कुछ एल्गोरिदम स्थिर हैं और कुछ नहीं हैं। कुछ को पूरा होने में O (nlog (n)) या O (n ^ 2) समय लगता है। कुछ दूसरों की तुलना में अधिक स्मृति का उपयोग करते हैं ...

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


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

1
नीचे दिए गए अच्छे उत्तरों के अलावा, यह भी ध्यान दें कि कई कंपनियों को (1) ऐसे एल्गोरिदम की जटिलता का पता होना चाहिए, (2) उन्हें ब्लैकबोर्ड पर लागू करने में धाराप्रवाह होना चाहिए।
साकिन

3
मुझे यकीन है कि Google के बार-बार ऑफ़लाइन होने की वजह से इन अल्गों को याद रखना महत्वपूर्ण है। : ओ
ली जेम्स

आपको उनके प्रदर्शन, उपयोग के मामलों आदि को जानने की आवश्यकता है, यह जानते हुए कि उन्हें दिल से कैसे लागू किया जाए, कुछ ऐसा है जो केवल तकनीकी कंपनियों द्वारा साक्षात्कार में आवश्यक है।
साकिस

@ पीटरबर, मैं असहमत हूं। Google को 'सर्वश्रेष्ठ प्रदर्शन सॉर्टिंग एल्गोरिथ्म' के लिए 'मर्ज़ॉर्ट्स' और 'क्विकसॉर्ट' के बारे में जानने की ज़रूरत नहीं है
hyankov

जवाबों:


117

आइए अल्बर्ट से पूछें और देखें कि उन्हें इस विषय पर क्या कहना है:

"मुझे सब कुछ जानने की ज़रूरत नहीं है, मुझे सिर्फ यह जानने की ज़रूरत है कि इसे कहाँ खोजना है, जब मुझे इसकी आवश्यकता है"

- अल्बर्ट आइंस्टीन , paraphrased

आमीन, ब्रदर अल्बर्ट, आमीन।

एक बार जब आप किसी विशेष अनुशासन (आवश्यक, खोज, जो भी हो) में आवश्यक एल्गोरिदम का एक अच्छा सर्वेक्षण कर लेते हैं, तो आप कार्यान्वयन विवरण के बारे में तब तक भूल सकते हैं जब तक आपको वास्तव में अहंकार की आवश्यकता नहीं होती है, जिस स्थिति में आप इसे देखते हैं या इसका उपयोग करते हैं उपहास कर रहा है। 25 साल पहले मैंने B * -trees का उपयोग करके एक प्रमुख खोज प्रणाली का निर्माण किया था, लेकिन आज मुझे उन्हें अच्छी तरह से उपयोग करने के लिए RTFM की आवश्यकता होगी।



9
कैसे इस सवाल का जवाब देता है? उन्होंने कहा कि "मुझे सब पता है की जरूरत नहीं है", उन्होंने किया नहीं कहते हैं कि "मैं कुछ भी जानने की जरूरत नहीं है"। कुछ कौशल मौलिक होते हैं, और पूरा सवाल इस बारे में था कि किसी विशेष जानकारी का संबंध मौलिक कौशल की श्रेणी से है या नहीं।
कोनराड रुडोल्फ

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

3
@ लॉरी: मुझे लगता है कि मैं बहुत से प्रोग्रामर को एल्गोरिदम के विवरणों के बारे में जानता हूं- निम्न स्तर के कार्यान्वयन विस्तार के कटोरे में नीचे रहें। सच कहूँ - मुझे परवाह नहीं है कि मैं पुस्तकालय की दिनचर्या का किस प्रकार उपयोग कर रहा हूँ - जहाँ तक मेरा संबंध है, यह पिक्सी डस्ट और परियों का उपयोग कर सकता है। डॉक्स नौकरशाही का आकार घटाने के लिए ओ () को बताएगा।
मटनज़

2
@mnnz: आपके "O () साइज़िंग" के लिए कुछ हद तक एक फॉलोअप है। एक बात जो मैंने सीखी, वह यह थी कि एक बड़े डेटासेट के साथ संदर्भ का बुरा इलाका पूरी तरह से ओ () को अभिभूत कर सकता है। आपके पास एक ऐसा अहंकार हो सकता है O(n log n), लेकिन अगर आपको बहुत अधिक कैश मिस हो जाता है या (भगवान न करे) आप डिस्क को हिट करते हैं, तो यह n log nएक शौकीन स्मृति होगी।
पीटर रोवेल

49
  1. यह वास्तव में याद रखने की बात नहीं है। यह डिवाइड और विजय जैसे एल्गोरिदम के सामान्य वर्गों को गहराई से समझने की बात है। यदि आप वास्तव में विभाजन को समझते हैं और जीतते हैं, तो आपको क्विकर को याद करने की आवश्यकता नहीं है। आप इसे आवश्यकतानुसार मौके पर पुनः प्राप्त कर सकते हैं। इसके अलावा, वास्तविक भुगतान भी अपने दम पर क्विकसर्ट को फिर से प्राप्त करने में सक्षम नहीं है, यह है कि आप पहचान सकते हैं जब एक नई समस्या एक विभाजन और जीत समाधान के लिए उत्तरदायी है।

  2. सभी प्रोग्रामिंग नौकरियां समान नहीं हैं। कुछ नौकरियों को एल्गोरिदम का गहन ज्ञान चाहिए, कुछ को ऐसे लोगों की ज़रूरत होती है जो टाइप थ्योरी को समझते हैं, और कुछ को ऐसे लोगों की ज़रूरत होती है जो डेटा को वेब फॉर्म से निकालकर डेटाबेस में ले जा सकें। कुछ नौकरियों को एक बार में उन सभी कौशल की आवश्यकता होती है। आप किस तरह की नौकरी करना चाहते हैं?


5
मुझे नहीं लगता कि क्विकॉर्ट को याद किए बिना क्विकॉर्ट को समझना संभव है। यह एक जटिल और रहस्यमय बात नहीं है, यह केवल दो सामान्य विचार संयुक्त है। यही बात मर्ज-सॉर्ट पर लागू होती है, लेकिन वहां आपके पास सिर्फ एक विचार है: P
drxzcl

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

2
@ डायपर, निश्चित रूप से आप jest! मैं अपने स्वयं के अनुभव से जानता हूं कि मुझे अपनी पहली नौकरी के लिए TROFF मैक्रो को सिकोड़ने वाली रैप सॉफ्टवेयर कंपनी के लिए जो ज्ञान और कौशल की आवश्यकता थी, वह उन लोगों से बहुत अलग है, जिन्हें मैं एक कम्प्यूटेशनल बायोलॉजी लैब में अपनी वर्तमान नौकरी के लिए आवश्यक हूं।
चार्ल्स ई। ग्रांट

@ CharlesE.Grant अधिकांश समय इंटरवीयर यह जाँच नहीं करता है कि क्या आपको कौशल मिला है जिसे आपको अपना काम करने की आवश्यकता है (मुझे अंतिम जावास्क्रिप्ट / सीएसएस प्रश्न याद नहीं है जो मुझसे पूछा गया था और मैं वेबैप करता हूं)।
8

10

मुझे लगता है कि केवल एक बार आपको यह याद रखने की ज़रूरत है कि नौकरी के लिए आवेदन करते समय आपको मौके पर जवाब देने के लिए और बाहर के अन्य संसाधनों के साथ आना होगा।

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

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


6

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

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

सारांश में, यह जानना हमेशा बेहतर होता है कि आप क्या खोज रहे हैं और संदर्भ कहाँ हैं - जो आपको स्रोत तक पहुंचाएगा।


5

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

यह वास्तव में समस्या नहीं है कि क्या आप इसे देख सकते हैं या क्या आप इसे Google कर सकते हैं, यह है कि क्या प्रोग्रामर इन समस्याओं को हल करने की तकनीक को समझता है और अन्य स्थितियों पर लागू करने में सक्षम है।


3

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

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

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


2

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

छंटाई

  • किसी प्रकार की छँटाई एल्गोरिथ्म का स्केच।
  • एल्गोरिदम को सॉर्ट करने के कुछ उदाहरणों को सूचीबद्ध करें।
  • विभिन्न प्रदर्शन विशेषताओं के साथ दो प्रकारों की तुलना / विपरीत करें।
  • यदि वे स्मृति उपयोग का उल्लेख नहीं करते हैं, तो इसके बारे में पूछें।

खोज कर

  • आप जितने खोज एल्गोरिदम का नाम ले सकते हैं।
  • दो खोज एल्गोरिदम की तुलना / इसके विपरीत।
  • रैखिक खोज के अलावा किसी भी खोज को स्केच करें।

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


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