2009-09-29 23 views
34

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

क्या आपके पास समान चिंताएं हैं या क्या आपके पास इस पर कोई विचार है? मैं उन्हें सुनना चाहता हूं।

सभी को धन्यवाद, अग्रिम में।

पीएस 1: मैं कहना चाहता हूं कि मुझे पहले से ही प्रोग्रामिंग और प्रोग्राम कैसे करना है (हालांकि मैं शौकिया स्तर पर हूं :-)) और मैं सिर्फ विशिष्ट मुद्दे पर सुधार करना चाहता हूं, इसे सीखना शुरू नहीं करना

पीएस 2: मुझे लगता है कि यह भविष्य के संदर्भ के लिए एक उपयोगी विषय है इसलिए मैंने समुदाय विकी बॉक्स की जांच की।

उत्तर

23

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

समस्या डेटाबेस और ऑनलाइन न्यायाधीशों का उपयोग इस साइट की तरह करें, http://uva.onlinejudge.org/index.php, जिसमें सामान्य एल्गोरिदम से संबंधित सैकड़ों समस्याएं हैं। और उनमें से किसी को हल करने के लिए आपको एक विशेषज्ञ प्रोग्रामर होने की आवश्यकता नहीं है। आपको तर्क और गणित के साथ एक अच्छी क्षमता है। वहां, आप सबसे सरल लोगों से सबसे चुनौतीपूर्ण समस्याओं को पा सकते हैं। उनमें से ज्यादातर प्रोग्रामिंग मैराथन से आते हैं।

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

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

43

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

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

और इसी तरह। रोज रोज। समय के सभी।

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

इसे गंभीर सोच के लिए आसानी से गलत किया जा सकता है लेकिन समाधानों को समझने और सुधारने के प्रयासों के बजाय, अपने स्वयं के समाधानों पर सवाल पूछने के बारे में अधिक जानकारी है।

+8

+1 - यदि आप यह सही करते हैं तो यह आपके मित्र और प्रियजनों की परेशानियों के लिए स्वचालित हो जाता है। =) –

+0

मुझे यह समाधान बहुत पसंद है। – deeb

+2

@Erik: इंजेक्शन मोल्डिंग कंपनी में काम करने की तरह, और फिर यह महसूस करना कि * टेबल पर कोई और नहीं * प्लास्टिक का कांटा पर एक्जेक्टर पिन में रूचि रखता है। –

3

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

यह एक अच्छी शुरुआत है, लेकिन मुझे लगता है कि सबसे अच्छा तरीका जानने के लिए और एल्गोरिथम ज्ञान को लागू करने

  1. अच्छा एल्गोरिदम है कि वर्तमान में रुचि के क्षेत्र के लिए मौजूद हैं के बारे में जानें
  2. अन्य देखकर आप अपने ज्ञान का विस्तार है कि क्षेत्रों; उदाहरण के लिए, जेनेटिक विश्लेषण पर काम करते समय किस प्रकार के एल्गोरिदम आवश्यक हैं? रन-ऑफ क्षमता निर्धारित करने के लिए सबसे अच्छा तरीका क्या है क्योंकि यह बाढ़ से संबंधित है?
  3. अन्य डोमेन में समस्याओं के बारे में पढ़ें और एल्गोरिदम का उपयोग करने का प्रयास करें जो यह देखने के लिए परिचित हैं कि वे फिट हैं या नहीं। यदि वे समस्या को तोड़ने की कोशिश नहीं करते हैं और देखें कि आप अपने स्वयं के एल्गोरिदम के साथ आ सकते हैं।
+0

गेम प्रोग्रामिंग सामान्य एल्गोरिदमिक सोच में सहायता के कारणों की काफी विस्तृत श्रृंखला है। ** 1। ** व्यापक रूप से समस्या डोमेन बोलना बड़ा है, आम तौर पर केवल कल्पना से ही सीमित है, किसी विशिष्ट उद्योग का सामना करने वाली समस्याओं के लिए नहीं। ** 2। ** इष्टतम समाधान नियमित रूप से मांगे जाते हैं, बजाय एक अच्छा होना (यानी, काम पूरा करना आमतौर पर पर्याप्त नहीं होता है, इसे बहुत तेज़ किया जाता है आमतौर पर एक आवश्यकता होती है।) ** 3। ** आपका सहकर्मी इस क्षेत्र में प्रतिस्पर्धी होंगे और आप व्यवसाय या एंटरप्राइज़ ऐप्स की विशिष्ट रेखा लिखने वाले किसी व्यक्ति से अधिक "व्यायाम" सीखेंगे। – ocodo

9

पोलिया की "हाउ टू सॉल्व इट" गणितीय समस्याओं को हल करने और सबूत करने के बारे में सोचने के लिए एक महान पुस्तक है, और मैं इसे सुलझाने वाले किसी भी व्यक्ति के लिए अनुशंसा करता हूं।

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

और यह सब पढ़ने के साथ, निश्चित रूप से अभ्यास अभ्यास अभ्यास

+0

अरे, अभ्यास अच्छा है! मैंने एक ही समय में एक ही जवाब पोस्ट किया। वे कहते हैं कि महान दिमाग एक जैसे सोचते हैं, है ना? (आप जानते हैं, तो मध्यम दर्जे का करें^_ ^) – weiji

5

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

आपके मामले में, परियोजना यूलर में समस्याओं का प्रयास करने के बारे में कैसे? http://projecteuler.net

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

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

+0

"एल्गोरिदम के बारे में बहुत सारी अलग-अलग गुण हैं जो" अच्छा "एल्गोरिदम का गठन करने की अधिक समझ ले सकते हैं" - वास्तव में बहुत से नहीं। ** 1 ** गति, ** 2 **। सबसे कम संसाधन उपयोग, ** 3 **। लालित्य, ** 4 ** चिंता। - दूसरे शब्दों में ... * तंग * – ocodo

6

आपको जी पोलिया द्वारा Mathematics and Plausible Reasoning देखें। यह एक दुर्लभ गणित पुस्तक है, जो वास्तव में गणितीय खोज बनाने में शामिल विचार प्रक्रिया से संबंधित है। मुझे लगता है कि यह वही विचार प्रक्रिया है जो एल्गोरिदम के साथ आने में शामिल है।

1

SICP/Structure and Interpretation of Computer Programs पढ़ें और सभी समस्याओं का समाधान करें; फिर The Art of Computer Programming (सभी खंड) पढ़ें, जब आप जाते हैं तो सभी अभ्यासों को काम करते हैं; फिर Project Euler पर सभी समस्याओं के माध्यम से काम करें।

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

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

0

ठीक है, तो योग करने के लिए सुझाव:

इस क्षमता में सुधार करने के लिए सबसे प्रभावी तरीका समस्या को हल करने possible.Either असली दुनिया की समस्याओं (जैसे लिफ्ट "एल्गोरिथ्म" के रूप में जो पहले से ही सुझाव दिया है के रूप में के रूप में अक्सर है) या सीएलआरएस जैसी किताबों से अभ्यास (महान, मेरे पास पहले से ही इसका स्वामित्व है :-))। लेकिन मुझे गणित के बारे में टिप्पणियां नहीं मिलीं और मुझे नहीं पता कि क्या मानना ​​है (यदि आप सहमत हैं या नहीं)।: -

लिंक बहुत अच्छे थे। मैं निश्चित रूप से उनका उपयोग करूँगा। मुझे यह भी लगता है कि यह राष्ट्रीय/अंतर्राष्ट्रीय सूचना विज्ञान प्रतियोगिताओं से समस्याओं को हल करने या गणितज्ञ को प्रमेय सिद्ध करने के तरीके को पढ़ने के लिए एक अच्छा अभ्यास होगा।

फिर से धन्यवाद। अधिक सुझाव देने के लिए स्वतंत्र रहें, हालांकि मैं पहले से उल्लिखित समाधान से संतुष्ट हूं।

+0

गणित के बहुत सारे (वास्तव में, वास्तव में कड़ी मेहनत) आर्ट ऑफ कंप्यूटर प्रोग्रामिंग (ऊपर उल्लिखित) में शामिल है। एसआईसीपी में कुछ गणित भी है, हालांकि टीएओसीपी में गणित जितना मुश्किल नहीं है। – les2

1

मैं निमल निसानके (एडिसन वेस्ले) द्वारा "परिचय वैज्ञानिक और सेट्स कंप्यूटर वैज्ञानिकों" पुस्तक की सिफारिश कर सकता हूं। फोकस सेट सिद्धांत, भविष्यवाणी तर्क आदि पर केंद्रित है। मूल रूप से यदि आप करेंगे तो कोड में समस्याओं को हल करने के गणित। अच्छी चीजें और काम करना मुश्किल नहीं है।

गुड लक ... केविन

+0

तो आपको लगता है कि गणित तर्क प्रोग्रामिंग के लिए सबसे प्रासंगिक गणित क्षेत्र है? –

2

कुछ और पढ़ने लायक (किसी विशेष क्रम में) किताबें:

  • अहा! इनसाइट (मार्टिन गार्डनर)
  • प्रोग्रामिंग मोती का कोई भी किताबें (जॉन बेंटले)
  • कंक्रीट गणित (ग्राहम, नुथ, और Patashnik)
  • एक संचार के गणितीय सिद्धांत (क्लाउड शान्नोन)
बेशक

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

4

मैं तुम्हारे लिए इस मार्ग का सुझाव देते हैं:

1.First एक भाषा के प्राथमिक भागों सीखते हैं।

2. फिर कुछ बुनियादी गणित के बारे में जानें।

3. शीर्षकोडर div2 आसान समस्याओं के लिए ऊपर जाएं।आमतौर पर यदि आप 250 अंक स्कोर नहीं कर सकते हैं। किसी भी दिन में, इसका मतलब है कि आपको बहुत सारी अभ्यास की ज़रूरत है, अभ्यास करना जारी रखें।

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

5. अब मैराथन में जाएं, अगर आप इसे जल्दी से हल नहीं कर सकते हैं तो निराश न हों। रात भर में सुधार नहीं होगा, आपको धैर्यपूर्वक कड़ी मेहनत करनी होगी।

6. अब से चरण 5 जारी रखें और आप एक बेहतर प्रोग्रामर होंगे।

+0

टॉपकोडर एक अच्छा विचार है :) –

1

ग्रेट परियोजना यूलर में समस्याओं का प्रयास करने के बारे में कैसे? http://projecteuler.net

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

संबंधित मुद्दे