क्या एक सक्षम प्रोग्रामर को अपने सबसे छोटे पथ एल्गोरिथम के साथ आने में सक्षम होना चाहिए?


58

मैं एक कंप्यूटर प्रोग्रामर के रूप में अपनी क्षमता पर विश्वास का संकट झेल रहा हूं।

कल मैंने एक ग्राफ के लिए अपने स्वयं के सबसे छोटे पथ एल्गोरिथम के साथ आने की कोशिश की और कुछ घंटों के बाद मैंने बस तौलिया में फेंक दिया और डीजकस्ट्रा के एल्गोरिथ्म को सीखा।

क्या इस तरह की चीज एक अच्छे प्रोग्रामर को एक-दो घंटे में "पुष्ट" करने में सक्षम होनी चाहिए या क्या मैं अवास्तविक हूं?

ओह ठीक है, कम से कम मैं बबल सॉर्ट को पुन: स्थापित करने में सक्षम था: डी


7
किसी व्यक्ति ने 20 वर्षों के लिए यूआई किया है, शायद कम समय में किसी अन्य डोमेन से किसी समस्या का समाधान खोजने में मुश्किल होगा।
कोडर

38
एसई साइटों पर बहुत समय बिताने से सभी को विश्वास होता है कि मुझे विश्वास है! (ऐसा नहीं है कि एक बुरी बात है)। जीवन में खुशी, जो है उसे स्वीकार करने और उसे बदलने की इच्छा के बीच सही संतुलन पा रहा है।
ट्रोजननाम

2
मैं इसे अपने आप को पुन: स्थापित नहीं कर सका, लेकिन मैं यह याद रखने की कोशिश करता हूं कि यह कैसे काम करता है। सुनिश्चित करें कि आप इस एनीमेशन को समझते हैं: upload.wikimedia.org/wikipedia/commons/2/23/…
Job

6
@ ब्रायन स्थानीय प्रतिभा की त्रासदी। आप शायद ही कभी भी किसी भी चीज़ में सर्वश्रेष्ठ हो सकते हैं।
री मियासाका

7
एक अच्छा कंप्यूटर वैज्ञानिक लेकिन जरूरी नहीं कि वह एक कंप्यूटर प्रोग्रामर या सॉफ्टवेयर इंजीनियर ही हो
नील मैकगिगन

जवाबों:


118

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

मुझे संदेह है कि दिज्क्स्त्र कुछ घंटों में सबसे छोटे पथ एल्गोरिथम के साथ आया था, इसलिए यह निर्धारित करने के लिए उपयोग करने के लिए कि वास्तव में उच्च मानक जैसा लगता है कि क्या कोई 'अच्छा प्रोग्रामर' है


25
@Nakilon - प्रोग्रामर जो मौजूदा समाधानों को नजरअंदाज करते हैं, वे केवल अपना समय बर्बाद कर रहे हैं, और यदि वे अपना समय बर्बाद नहीं कर रहे हैं, तो वे एक बुरा समाधान बना रहे हैं। देखें: हर कोई अपनी पासवर्ड हैशिंग योजना बनाम bcrypt बना रहा है
मोनिका

10
@GSto: विकिपीडिया के अनुसार, दिक्क्स्ट्रा एक घंटे से भी कम समय में एल्गोरिदम के साथ आया: 20 मिनट, विकिपीडिया पर पहले नोट के लिए
रिकॉर्डिंग

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

19
@woliveirajr - खैर, मुझे यकीन है कि न्यूटन को गति के नियमों के साथ आने में उतना ही समय लगा। पहले इसके बारे में 20 साल तक सोचने के बाद।
रूक

6
@Nakilon - हाँ इसीलिए हर कोई C में सब कुछ लिखता है, क्योंकि अन्यथा आप सिर्फ एक कोडर हैं, किसी और की उच्च-स्तरीय भाषा का उपयोग करते हुए। ओह रुको, मेरा मतलब विधानसभा है, अन्यथा आप किसी और की निम्न-स्तरीय भाषा का उपयोग कर रहे हैं। ओह रुको, मेरा मतलब है कि बिजली के सर्किट को बदलने के लिए स्विपिंग स्विच, अन्यथा आप किसी और के इंस्ट्रक्शन सेट का उपयोग कर रहे हैं। या आप जानते हैं, आप पहले से ही इसका उपयोग कर सकते हैं और कुछ नया बनाने पर काम कर सकते हैं । जब आप कुछ नया आविष्कार कर सकते हैं, तो डायजेस्ट्रा के एल्गोरिथ्म का फिर से आविष्कार करने में समय क्यों बर्बाद करें, इसका उपयोग करने वाले प्रोग्राम की तरह?
मोनिका

54

क्या इस तरह की चीज एक अच्छे प्रोग्रामर को एक-दो घंटे में "पुष्ट" करने में सक्षम होनी चाहिए या क्या मैं अवास्तविक हूं?

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

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

आप शायद कुछ सामान की कोशिश करने और विचार को कुछ समय देने के बाद किसी तरह का सबसे छोटा रास्ता एल्गोरिदम प्राप्त कर सकते हैं। लेकिन निराश मत हो कि अगर कुछ घंटे लगते हैं, या कुछ दिन भी। यह पूरी तरह से ठीक है और सामान्य है।

(कैविएट: ठीक है, आपको समस्या को कुछ घंटों के शीर्ष पर लाने के लिए बाध्य करने में सक्षम होना चाहिए, लेकिन यह कार्यशील एल्गोरिथ्म को काफी छोटे ग्राफ़ पर भी प्राप्त नहीं करेगा।)


56
चिंता मत करो, अगर जानवर बल काम नहीं कर रहे हैं, तो आप इसका पर्याप्त उपयोग नहीं कर रहे हैं।
रॉबी

2
सैद्धांतिक सीएस और प्रोग्रामिंग के बीच अंतर को दूर करने के लिए +1। प्रोग्रामिंग वास्तविक दुनिया की समस्या को हल करने वाला है, और प्रोग्रामिंग का समर्थन करने के लिए सैद्धांतिक सीएस है। हालांकि अधिकांश लोगों की रोजमर्रा की प्रोग्रामिंग में सैद्धांतिक सीएस 100% आवश्यक नहीं है।
फिल

17

क्या इस तरह की चीज एक अच्छे प्रोग्रामर को एक-दो घंटे में "पुष्ट" करने में सक्षम होनी चाहिए या क्या मैं अवास्तविक हूं?

निश्चित रूप से अवास्तविक। कुछ ही घंटों में लोग एल्गोरिदम के साथ "सामने नहीं" आते हैं। इसमें बहुत मेहनत और काम लगता है। इस ब्लॉग को उद्धृत करने के लिए :

प्रोग्रामिंग पर्ल में, बेंटले, डोनाल्ड नुथ के हवाले से कहते हैं, "जबकि पहली बाइनरी खोज 1946 में प्रकाशित हुई थी, पहली बाइनरी खोज जो n के सभी मूल्यों के लिए सही ढंग से काम करती है, वह 1962 तक प्रकट नहीं हुई थी।"

और बेंटले का संस्करण बड़े सेट के लिए लागू होने पर भी समस्याग्रस्त था।

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


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

8
@ रीचर्ड - टिप्पणी थी "प्रोग्रामिंग पर्ल में, बेंटले कहता है .." नुथ ने पहली बार यह कहा था, लेकिन मेरा स्रोत प्रोग्रामिंग मोती है, न कि TAoCP, इसलिए मैंने वही लिखा जो बेंटले ने लिखा था। मैंने यह दावा नहीं किया कि बेंटले प्रवर्तक है - मैंने केवल पुस्तक में कही गई बातों को उद्धृत किया है। पुस्तकों में सामग्री का एक बड़ा हिस्सा लेखकों द्वारा खुद का आविष्कार नहीं किया गया था, इसलिए मैं नहीं देखता कि आप इसे इस तरह क्यों देखेंगे।
ब्लैकजैक

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

3
@ रिचर्ड - मैंने जो उद्धरण सूचीबद्ध किया है वह सीधे ब्लॉग से है, जो सीधे पुस्तक से उद्धृत करता है (शाब्दिक रूप से, मुझे लगता है कि यह पहले संस्करण का पृष्ठ 57 है)। यदि आपके पास वक्तव्य के साथ यह बहुत अधिक समस्या है, तो ब्लॉग के लेखक से संपर्क करें और उसे इसे बदल दें।
ब्लैकजैक

1
@ रीचर्ड और ब्लैकजैक: आप दोनों सही हैं, लेकिन मूल लेखक का अभिप्राय कथन के प्रति विश्वसनीयता और संदर्भ जोड़ता है। मेरा संपादन पर्याप्त होना चाहिए।
स्टीवन एवर्स

9

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

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

एक अच्छा प्रोग्रामर एल्गोरिथ्म के पीछे के तर्क को समझने में सक्षम होना चाहिए, और यह अन्य एल्गोरिदम की तुलना में बेहतर या बदतर (या उस विशेष समस्या के लिए बस अपर्याप्त) क्यों समान समस्या को हल करने का प्रयास करता है।

(s) उसे यह भी पता होना चाहिए कि क्या यह वास्तव में उस विशेष समस्या को हल करने का सबसे अच्छा तरीका है।

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


6

यह मुझे कुछ याद दिलाता है जो मैंने "सॉफ्टवेयर इंजीनियरिंग" (जिसे मैं प्रोग्रामिंग कहूंगा) और अन्य इंजीनियरिंग विषयों के बीच अंतर के बारे में पढ़ा था। यह सोचने के लिए आओ, मुझे लगता है कि यह मूल डिज़ाइन पैटर्न पुस्तक थी। मुझे यकीन है कि यहाँ कोई इसे अपने सिर के ऊपर से निकाल सकता है।

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

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

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


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

वहाँ है - अनुशासित हालांकि, अगर आपका प्रतिष्ठा पुनर्गणना हो जाता है आप के लिए 1. नीचे वापस आ जाएँगे
ChrisF

हां, यह बिल्कुल मेरी बात है ... मैं उस बिंदु IMO में अनुशासन से ऊपर और परे जाऊंगा। यदि मैं अपने उत्तर को हटाने से पहले एक टिप्पणी में बदल देता हूं , तो मैं यह सब कर सकता हूं ... मैं किसी भी विलोपन के लिए UberDisciplined नामक एक नया बैज सुझाता हूं जिसके कारण आप ब्रांड के नए उपयोगकर्ता की स्थिति में लौट सकते हैं। :)
कीथ लेटेने

3

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

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

अधिक प्रसिद्ध, आइंस्टीन, जो आपको लगता है कि गाँठ सिद्धांत में एक विशेषज्ञ होगा, अपने स्वयं के जूते को टाई नहीं कर सकता था जब तक कि वह लगभग दस साल का नहीं था।

संभावना अच्छी है कि आपने अनजाने में कई चीजों को फिर से बनाया है जो कई अन्य लोगों ने कभी नहीं सोचा होगा कि यह उनके लिए स्पष्ट रूप से सिखाया नहीं गया है।


3

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

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

बेशक, दूसरों द्वारा किए गए समाधानों की जांच करना और खोजना भी काम करता है, लेकिन उस बिंदु का चरम एक आदमी है जो खुद के बारे में नहीं सोचता है और जिनके कार्यक्रम Google खोजों का एक संग्रह हैं।

मुझे लगता है कि मैं वास्तव में चाहता हूँ की तुलना में कठोर लग रहा है, लेकिन मेरी बात यह है: मैं एक प्रोग्रामर से अपेक्षा करूंगा कि वह एक समस्या के समाधान के लिए पर्याप्त रचनात्मक हो, भले ही समाधान छोटी गाड़ी या गड़बड़ हो।


इसलिए, आपके मामले में वापस आ रहा है, मुझे नहीं लगता कि आपको दिजाकस्ट्रा के एल्गोरिथ्म के साथ आना चाहिए, लेकिन अगर आपके पास कई संभावनाओं को आज़माने के लिए एक एल्गोरिथ्म लिखने की क्षमता है और एक अनंत लूप पर समाप्त हुए बिना सबसे छोटा रास्ता ढूंढना है, तब आपको मेरी स्वीकृति मिल गई है।

(BTW मेरा अनुमोदन एक मुफ्त कार वॉश कूपन के रूप में महत्व के एक ही क्रम में मायने रखता है।)


3
मैं मानता हूं कि हां, एक सक्षम प्रोग्रामर को बबल सॉर्ट या इसके समकक्ष आने में सक्षम होना चाहिए। यह वास्तव में इसे लागू करने और इसे बेहतर ढंग से समझने के लिए शायद इसे लागू करने के लिए समय का एक उत्पादक उपयोग हो सकता है। लेकिन मुझे लगता है कि यह कहने की आवश्यकता है कि कोई भी सक्षम प्रोग्रामर तब नहीं जाएगा और वास्तव में इसका उपयोग उत्पादन कोड में करेगा। ऐसा करने से आपके ग्राहक अगले साल वापस आते हैं और शिकायत करते हैं कि, अब उनके पास प्रक्रिया करने के लिए और अधिक डेटा है, आपके O (n!) एल्गोरिथ्म को पूरा होने में ब्रह्मांड की दोगुनी उम्र लगेगी ...
थॉमस पैडरन-मैक्कार्थी

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

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

2

हाँ, उसे / उसे चाहिए।

यह बबल सॉर्ट का नैतिक समकक्ष हो सकता है, लेकिन मुझे लगता है कि एक अच्छा प्रोग्रामर कम से कम कुछ के साथ आने में सक्षम होना चाहिए जो काम करता है, हालांकि यह अक्षम हो सकता है।

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

बेशक, कई प्रोग्रामिंग कार्य बहुत कम कठिन हैं और हर किसी को ऐसी कठिन समस्याओं से निपटने में सक्षम होने की आवश्यकता नहीं है। लेकिन आप चाहते हैं कि आपकी टीम में कोई ऐसा व्यक्ति हो, जिसके पास कुछ जटिल परियोजना विशिष्ट समस्याएं हों, जहां आप पिछले वैज्ञानिक अनुसंधान के भार पर भरोसा नहीं कर सकते।


1

चिंता मत करो

एक पर्ल प्रोग्रामर के रूप में, मैं पहिया को सुदृढ़ करने के बारे में कभी नहीं हूं । वह CPAN का काम है। यदि एक सरल, अच्छी तरह से समर्थित एल्गोरिदम या मॉड्यूल है, तो हम इसका उपयोग करते हैं। यदि कोई अच्छा मॉड्यूल नहीं है, तो हम पहिया का आविष्कार करते हैं। यह पर्ल के बारे में सबसे बड़ी चीजों में से एक है।

तो मैं जो कह रहा हूं वह यह है:

  1. मैं पहिया को सुदृढ़ करने की अनुशंसा नहीं करता लेकिन जब आप करते हैं ...
  2. पूरी तरह से इसे सुदृढ़ करने की कोशिश न करें और ...
  3. अगर आप ऐसा नहीं कर सकते तो चिंता न करें। इसलिए हमारे पास एक प्रोग्रामिंग समुदाय है :-)।

यह सुदृढ़ीकरण के बारे में नहीं है यह सामान्य रूप से समस्याओं को हल करने के बारे में है। यदि आप अपने दम पर चीजों का आविष्कार करने की कोशिश नहीं करते हैं तो आप कभी भी सुधार नहीं करेंगे।
Nils

0

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


0

क्या इस तरह की चीज एक अच्छे प्रोग्रामर को एक-दो घंटे में "पुष्ट" करने में सक्षम होनी चाहिए या क्या मैं अवास्तविक हूं?

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

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

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

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


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

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

हालांकि समय-समय पर हमले आदि निश्चित रूप से एक वैध चिंता है (और केवल क्रिप्टोग्राफी में नहीं), मैं तर्क देता हूं कि इस तरह के कार्यान्वयन की संवेदनशीलता का इसकी शुद्धता पर कोई प्रभाव नहीं पड़ता है । और कई हैं, क्रिप्टोग्राफी तरीके से बेईमानी करने के कई तरीके सिर्फ समय पर हमलों को सक्षम करने से अधिक हैं। ब्रूस श्नेयर अपनी डॉगहाउस श्रृंखला चलाते थे ; मैंने हाल ही में इसमें कुछ भी नहीं देखा है, लेकिन वहाँ बहुत सावधानी के उदाहरण हैं। google.com/search?q=site%3Aschneier.com+%22the+doghouse%22
CVn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.