एल्गोरिथ्म प्रोग्रामिंग के लिए सी पर अजगर का जिक्र


16

मैं थोड़ा एल्गोरिदम का अध्ययन कर रहा हूं और SPOJ.pl TopCoder आदि साइटों को देख रहा हूं। मैंने देखा है कि प्रोग्रामर आमतौर पर अधिकांश एल्गोरिथम प्रोग्रामिंग प्रतियोगिताओं के लिए C या C ++ पसंद करते हैं।

अब मुझे कुछ परेशानी हो रही है। मैं सी और पायथन दोनों को जानता हूं और जब मैं एक कोड लिखने की कोशिश कर रहा हूं तो मुझे लगता है कि अधिकांश एल्गोरिदम के लिए सी पर पायथन को प्राथमिकता दी जाएगी। हर बार जब मैं सीआई में एक कोड लिखने के लिए बैठ जाता हूं तो लगभग 15 मिनट के बाद छोड़ देता हूं क्योंकि मुझे यह बहुत बोझिल लगता है और अजगर के लिए आगे बढ़ना पड़ता है। मैट्रिसेस पॉइंटर्स को पास करना वगैरह बेकार लगने लगा है कि मैं वास्तव में एल्गोरिथम के बारे में सोचने के लिए उपयोग कर सकता हूं।

अब मुझे पता है और बहुत से लोगों से सुना है कि सी एक बहुत महत्वपूर्ण भाषा है और बहुत सारे प्रोग्रामर की रोटी और मक्खन है।

जो मैं जानना चाहता था कि क्या मेरे इस दृष्टिकोण में कोई कमी / परिणाम / नुकसान आदि हैं।

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


मैं उन लोगों से सुनना पसंद करूँगा, जिन्होंने इन भाषाओं का उद्योग में उपयोग किया है / और बड़े सॉफ्टवेयर / लाइब्रेरी आदि विकसित करना चाहते हैं।


यह विषय इस चर्चा के लिंक के बिना पूरा नहीं होगा lukeplant.me.uk/blog/posts/…
permeakra

11
@permeakra: यह सिर्फ एक शेख़ी है, मूल रूप से यह कहना कि हास्केल और पायथन सीखना आपको अन्य भाषाओं में बेहतर नहीं बनाता है क्योंकि वे अन्य भाषाएँ चूसते हैं।
रॉबर्ट हार्वे

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


यह एक गैर-एल्गोरिदमिक प्रोग्रामिंग का एक सा देखना दिलचस्प होगा , जो भी यह बात है।
SK-तर्क

जवाबों:


14

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

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

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

क्या आप अन्य भाषाओं में उन कौशलों को सीख सकते हैं? ज़रूर, लेकिन C गलत होने पर इसे और अधिक स्पष्ट करके मदद करता है।

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


1
"वे उन अभिलक्षणों के आदी हो गए हैं जो उन्हें प्रदान किए गए हैं।" क्या यह मान लिया जाता है कि मैंने C से पहले अजगर सीखा और इसलिए उन पंक्तियों के साथ अनुकूलन या कुछ करने में असमर्थ हूं?
ffledgling

10

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

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


तो मूल रूप से शोधकर्ताओं और सॉफ्टवेयर इंजीनियरों का एक डिजाइनर शिल्प-आदमी संबंध है? और उद्योग में दोनों प्रकार के लोगों के उपयोग के बारे में क्या?
ffledgling

9
मुझे लगता है कि takeaway यह है कि पायथन में एक एल्गोरिथ्म कोडिंग, और फिर सी में एक अधिक परिष्कृत कार्यान्वयन लिखना, एक बिल्कुल स्वीकार्य परिदृश्य है।
रॉबर्ट हार्वे

या "साइथन में भर्ती"?
एंडोलिथ

10

SPOJ.pl को ध्यान में रखते हुए, ACM प्रतियोगिता और सभी समान प्रतियोगिताओं में तेजी से काम करने वाले कोड के उत्पादन पर ध्यान केंद्रित किया जाता है जो प्रतियोगिता के ठीक बाद फेंक दिया जाएगा। TopCoder ऐसा करता है, लेकिन कुछ हद तक (कोड कम से कम OO- डिज़ाइन स्तर पर ठीक से व्यवस्थित है)।

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

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

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

जैसा कि पहले ही सुझाव दिया गया है, आप हमेशा पायथन कार्यान्वयन को सी कार्यान्वयन के साथ स्वैप कर सकते हैं यदि पायथन बहुत धीमा हो जाता है। लेकिन यह शायद एक विशाल परियोजना में 2-3 बार होगा, इसलिए सी में शुरू करना समय की बर्बादी हो सकती है, जब तक कि यह आपकी पसंद की भाषा नहीं है (और आपने संकेत दिया है कि यह नहीं है)।


1
यदि कोई वास्तविक गणित गहन अनुप्रयोग लिख रहा था तो कोई निश्चित रूप से C या C ++ का चयन करेगा (किसी भी व्याख्या की गई भाषा पर भारी प्रदर्शन बढ़ने के कारण 'C / C ++' जैसी कोई चीज नहीं है)। मैंने कुछ साल पहले टॉपकोडर को देखा था, और मुझे याद है कि बहुत सी सी + + को याद करना चाहता था, जो मेमोरी को लीक कर देता था, क्योंकि कंटेस्टेंट्स को लीक जैसे मामूली विवरणों की परवाह नहीं थी। मैं प्रभावित नहीं था।
जिम में टेक्सास

संक्षेप में मेरी बात। यह प्राथमिकताओं का सवाल है: टॉपकोडर्स मेमोरी लीक की परवाह नहीं करते हैं, क्योंकि कर्नेल को उनके बाद भी साफ करना है; यदि वे समय बचाते हैं तो वे न तो बुरे व्यवहारों और न ही विरोधी प्रतिमानों की परवाह करते हैं।
K.Steff

2
आपका अंतिम पैराग्राफ सुनहरे नियम का प्रतीक है: "इसे काम करो, फिर इसे जल्दी करो"।
कार्सन63000

9

TopCoder के एक लंबे समय के सदस्य और SPOJ के एक सामयिक उपयोगकर्ता के रूप में मैं आपको बता सकता हूं कि प्रतियोगिताओं में अन्य भाषाओं पर C / C ++ पसंद करने का एक प्रमुख कारण इसकी कच्ची गति है। जब आपके प्रोग्राम का निष्पादन समयबद्ध हो जाता है, तो आपके द्वारा प्राप्त की जा सकने वाली "सबसे तेज़" भाषा को चुनने का भारी दबाव होता है, क्योंकि यह आपके एल्गोरिथ्म को कोड करने के मामले में आपको अधिक सुस्त बनाता है। टीसी में मेरी प्रगति जावा से C # से C ++ तक चली गई।

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

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


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

@ एयोस मैं पायथन के लिए नहीं बोल सकता क्योंकि मैंने इसे टीसी या एसपीओजे के संदर्भ में कभी इस्तेमाल नहीं किया, लेकिन सी # और जावा पर सी ++ का लाभ केवल कभी-कभी महत्वपूर्ण होता है, और तब भी यह अत्यधिक महत्वपूर्ण नहीं है। मैं केवल एक मामले को याद कर सकता हूं जब एक एल्गोरिथ्म का सीधा पोर्ट जिसे C ++ से C # में कोड किया गया है, एक टाइमआउट के साथ विफल हो गया है, लेकिन यह एक अभ्यास कक्ष में था। अधिकांश समय, सही एल्गोरिथ्म की खोज एकमात्र ऐसी चीज है जो सफल और असफल सबमिशन के बीच अंतर करती है।
dasblinkenlight

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

5

हर बार जब मैं सीआई में एक कोड लिखने के लिए बैठ जाता हूं तो लगभग 15 मिनट के बाद छोड़ देता हूं क्योंकि मुझे यह बहुत बोझिल लगता है और अजगर के लिए आगे बढ़ना पड़ता है।

यह उत्पादकता लाभ सामान्य कारण है कि सी और सी ++ नौकरियों में काफी कमी आई है।

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

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

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

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


3
"सी और सी ++ नौकरियों में काफी कमी आई है"। है ना? यह नीले रंग से बाहर लगता है, जैसा कि मैं विपरीत प्रवृत्ति देखता हूं। -1 जब तक आप उस बयान के लिए एक स्रोत बता सकते हैं।

3

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


क्या आप एक हिपस्टर या कुछ और हैं? यहां आपका पीबीआर है। मेरे? मैं अच्छा नहीं होगा।
थॉमस एडिंग

2

C / C ++ की तुलना में "उच्च" स्तर की भाषाओं में प्रोग्रामिंग करते समय आप क्या याद कर रहे होंगे कि कंप्यूटर कैसे काम कर रहा है। आप एम्बेडेड सिस्टम, ऑपरेटिव सिस्टम और हार्डवेयर ड्राइवर जैसी चीजों को विकसित करने में सक्षम नहीं होंगे। सी जानने में भी कोडांतरक सीखने में मदद मिलती है।

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


प्रश्न स्पष्ट रूप से एल्गोरिदम के बारे में था, न कि करीब-से-धातु पहलुओं के बारे में।
कोनराड रुडोल्फ

@KonradRudolph ठीक है, लेकिन हार्डवेयर ड्राइवरों को लिखना एल्गोरिदम से सबसे अधिक निकटता से संबंधित है। उदाहरण के लिए, एनालॉग-टू-डिजिटल कनवर्टर के लिए ड्राइवर लिखते समय, आपको डिजिटल फ़िल्टर विकसित करना होगा और शायद किसी प्रकार की कतार या प्राथमिकता प्रणाली भी। और फिर अपने ड्राइवर के ऊपर एक एपीआई। यह एक "ऑब्जेक्ट" या "अमूर्त डेटा प्रकार" लिखने के समान है।

@ लुंडिन वास्तविक दुनिया के परिदृश्य में नुकसान का उल्लेख करने के लिए धन्यवाद।
ffledgling

1

यदि कभी कोई प्रश्न 'बिग ओ नोटेशन' के बारे में जाता है और आप कोशिश करते हैं और मापते हैं, तो यह पायथन में करना कठिन हो सकता है जब तक कि आप बहुत कुछ नहीं जानते कि अजगर चीजों को कैसे लागू करता है, उदाहरण के लिए पायथन सूची एक लिंक की गई सूची नहीं है ; अजगर सॉर्ट टिमर्ट है; निश्चित समय पर इकट्ठा होता है अजगर का कचरा ...

मुझे हमेशा एक सी प्रोग्राम को कनेक्ट करने में आसान लगता है जो प्रोसेसर पर होने की संभावना है, लेकिन यहां तक ​​कि प्रोसेसर कैशिंग भी है; ओएस का समय-टुकड़ा करना; संकलक अनुकूलन आदि जो मेरे अंतर्ज्ञान को प्रभावित कर सकते हैं।

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

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

मुझे लगता है कि उन दोनों (और अन्य भाषाओं) का उपयोग करना सबसे अच्छा होगा, जब तक कि आपको उनके ट्रेड-ऑफ के लिए एक महसूस न हो। मैं खुद एक अच्छा सी कोडर था, लेकिन अब बहुत कम मूल सी कोड लिखता हूं, हालांकि मुझे अभी भी अपने काम में (और कभी-कभी डीबग) सी कोड पढ़ना है। हालांकि मैं पायथन को पसंद करता हूं, लेकिन मैं जानता हूं और अभी भी पर्ल और ऑक (और sed और grep और सॉर्ट और Tcl और C और ...) का उपयोग करता हूं।


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

1

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

for (i <- 1 to 100; j <- 2 until 100;
     k <- 1 to 2; if i != j) {
     //...
}

इसके अलावा वे समारोह प्रोग्रामिंग रूबी के / अजगर के समान शस्त्रागार है map, filter, reduceआदि के रूप में तेजी से नहीं है बार-बार दोहराना या पूंछ कॉल प्रत्यावर्तन, लेकिन यह अभी भी बहुत तेजी से पूरी तरह से गतिशील पटकथा भाषाओं के रूप में तो।


1

मैं उन लोगों से सुनना पसंद करूँगा, जिन्होंने इन भाषाओं का उद्योग में उपयोग किया है / और बड़े सॉफ्टवेयर / लाइब्रेरी आदि विकसित करना चाहते हैं।

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

लाइब्रेरी को C ++ में बनाया गया है क्योंकि C ++ इस लाइब्रेरी की विशिष्ट आवश्यकताओं के लिए और सामान्य रूप से एल्गोरिदम लाइब्रेरी के लिए लगभग सही है। अगर मुझे एक अन्य एल्गोरिदम पुस्तकालय विकसित करना था और भाषा की पसंद मेरी थी, तो मैं लगभग निश्चित रूप से फिर से सी ++ चुनूंगा।

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

उस ने कहा, सरल एल्गोरिथम डूडल और पहेलियों के लिए, मैं लगभग हमेशा पायथन का उपयोग करता हूं (मुख्यतः क्योंकि हाँ, यह लगभग छद्म कोड की तरह पढ़ता है), जब तक कि मैं विशेष रूप से यह कोशिश नहीं करना चाहता कि सी ++ में सबसे अच्छी समस्या कैसे बनाई जाए। अब तक, मैंने SPOJ या TopCoder की कई समस्याओं का समाधान नहीं किया है, इसलिए मुझे नहीं पता कि क्या प्रदर्शन वास्तव में इतना महत्वपूर्ण है कि एक तेज भाषा का उपयोग करना महत्वपूर्ण है।

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

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