2009-02-21 15 views
17

सॉफ़्टवेयर में किसी समस्या का सामना करते समय मुझे आमतौर पर एक समाधान दिखाई देता है। बेशक, क्या मैं देख रहा हूँ आम तौर पर कुछ हद तक बंद है, और मैं हमेशा बैठ जाओ और डिजाइन (वैसे, मैं आमतौर पर पर्याप्त डिजाइन नहीं है) की जरूरत है, लेकिन मैं एक निश्चित अंतर्ज्ञान तुरंत मिलता है।एल्गोरिदम अंतर्ज्ञान कैसे विकसित करें?

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

मैं समुदाय को पढ़ना चाहता हूं कि क्या पढ़ना है और एल्गोरिदम लिखने के लिए कौन सी परियोजनाएं बेहतर होंगी।

उत्तर

8

+1 जो कोई भी करने के लिए कहा अनुभव सबसे अच्छा शिक्षक है।

कई ऑनलाइन पोर्टल हैं जिनमें बहुत सारी प्रोग्रामिंग समस्याएं हैं, जिन्हें आप अपने स्वयं के समाधान जमा कर सकते हैं, और एक स्वचालित पास/असफल संकेत प्राप्त कर सकते हैं।

  1. http://www.spoj.pl/
  2. http://uva.onlinejudge.org/
  3. http://www.topcoder.com/tc
  4. http://code.google.com/codejam/contests.html
  5. http://projecteuler.net/

USACO training site प्रशिक्षण कार्यक्रम सभी संयुक्त राज्य अमेरिका कंप्यूटिंग कि ओलंपियाड में भाग लेने वालों के माध्यम से जाना है। यह चरण-दर-चरण चला जाता है, जैसे आप जाते हैं, अधिक से अधिक जटिल एल्गोरिदम प्रस्तुत करते हैं।

7

स्टीव येग उसकी दोषारोपण की one में "The Algorithm Design Manual" करने के लिए भेजा (इस सवाल के साथ Algorithmic composition। ठीक है, लगभग कुछ भी नहीं लेना देना नहीं है)। मैंने इसे खुद नहीं देखा है, लेकिन ऐसा लगता है कि यह सिर्फ उनके विवरण से टिकट है।

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

+0

+1। यह बहुत दिलचस्प लग रहा है। – cletus

5

समस्या डोमेन

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

अपघटन और मानचित्रण

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

मॉडल

मॉडल समाधान, अपने सिर में कम से कम, और यह के माध्यम से चलना है, तो इसे सही ढंग से काम करता है देखने के लिए। आवश्यकतानुसार समायोजित करें (ऊपर अपघटन और मैपिंग देखें)।

रचना/इंटरफेस

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

अनुभव

अनुभव निश्चित रूप से, सबसे अच्छा शिक्षक है, लेकिन समस्याओं और समाधान के विभिन्न प्रकार के बारे में पढ़ भी उपयोगी होगा। कुछ प्रसिद्ध एल्गोरिदम और उनके अनुप्रयोग का अध्ययन करना भी बहुत उपयोगी है, उदा। Dijkstra, Bresenham, Unification, और निश्चित रूप से, graph theory

9

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

0

मुझे यकीन नहीं है कि अंतर्ज्ञान को खेती की जा सकती है, लेकिन मुझे लगता है कि मुझे पता है कि आप क्या पूछ रहे हैं। भविष्य में समस्याओं के लिए आपके द्वारा सुलझाने वाली अधिक समस्याएं, आपके पास जितनी अधिक जानकारी और अनुभव है। तो, मैं बस अभ्यास करता हूँ। प्रोग्रामिंग असली दुनिया अनुप्रयोगों का अभ्यास करें और आप बहुत सारी समस्याओं में भाग लेते हैं। कभी-कभी, पहेली को हल करना भी बहुत शैक्षिक हो सकता है।

0

मैं जब मैं एक जटिल समस्या को देख रहा हूँ शारीरिक analogues खोजने की कोशिश। पुस्तक संदर्भ के लिए

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