2009-07-24 18 views
11

मैं कंप्यूटर अनुप्रयोग 2210 (डेटा संरचनाएं) अगले सेमेस्टर ले रहा हूँ और मैं गर्मियों सेमेस्टर कि ऑनलाइन पोस्ट किया जाता है के लिए होमवर्क कर रहा हूँ कम से कम। अब तक, मुझे असाइनमेंट करने में कोई समस्या नहीं है। नीचे असाइनमेंट 4 पर एक नज़र डालें, और देखें कि क्या आप मुझे इस बात का संकेत दे सकते हैं कि इसे कैसे पहुंचाया जाए। कृपया एक पूर्ण एल्गोरिदम प्रदान न करें, केवल एक दृष्टिकोण। धन्यवाद!क्रमबद्ध सरणी, जबकि "लागत"

ए 'costed तरह "एक एल्गोरिथ्म जिसमें मूल्यों का एक अनुक्रम आरोही क्रम में व्यवस्थित किया जाना चाहिए है। क्रमशः अनुक्रम एक उचित क्रम में दो मानों की स्थिति को एक दूसरे में स्थानांतरित करके किया जाता है। प्रत्येक इंटरचेंज एक लागत उत्पन्न करता है, जिसे इंटरचेंज में शामिल दो मूल्यों के योग के रूप में गणना की जाती है। कुल इस प्रकार की लागत इंटरचेंजों की लागत का योग है।

उदाहरण के लिए, मान लें कि अनुक्रम {3, 2, 1} था। इंटरचेंज से एक संभव श्रृंखला

Interchange 1: {3, 1, 2} interchange cost = 0 
Interchange 2: {1, 3, 2} interchange cost = 4 
Interchange 3: {1, 2, 3} interchange cost = 5, 
given a total cost of 9 

आप एक प्रोग्राम है जो संख्या के विशिष्ट क्रम की व्यवस्था करने के लिए कम से कम लागत निर्धारित करता है लिखने के लिए कर रहे हैं।

संपादित करें: प्रोफेसर ब्रूट फोर्सिंग की अनुमति नहीं देता है।

+0

क्या आपको केवल आसन्न मूल्यों का आदान-प्रदान करने की अनुमति है? – Bubblewrap

+0

नहीं, किसी भी तत्व को इंटरचेंज किया जा सकता है। – dacman

+0

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

उत्तर

8

आप अपने प्रोफेसर आश्चर्यचकित करने के लिए चाहते हैं, आप Simulated Annealing इस्तेमाल कर सकते हैं। फिर फिर, यदि आप इसे प्रबंधित करते हैं, तो आप शायद कुछ पाठ्यक्रम छोड़ सकते हैं :)। ध्यान दें कि यह एल्गोरिदम केवल अनुमानित उत्तर देगा।

अन्यथा: एक Backtracking एल्गोरिथ्म प्रयास करें, या Branch and Bound। इन दोनों को इष्टतम उत्तर मिल जाएगा।

+4

ओह, आदमी, एनीलिंग! :-) उन लोगों के लिए जो नहीं जानते हैं, एनीलिंग धातु की प्रक्रिया के लिए उपयोग की जाने वाली भौतिक प्रक्रिया के आधार पर एल्गोरिदम का एक परिवार है! उस से कोई कूलर नहीं मिल सकता है! या, बल्कि, गर्म! :-) –

+0

धन्यवाद आदमी, ऐसा लगता है कि मुझे क्या चाहिए! – dacman

+3

एक _probabilistic_ एक एल्गोरिदमिक प्रश्न का उत्तर? वास्तव में? – rmmh

1

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

-1

एक ही इनपुट डेटा पर अलग सॉर्टिंग एल्गोरिदम का प्रयास करें और न्यूनतम प्रिंट करें।

+1

यह एक इष्टतम समाधान का उत्पादन नहीं करेगा। – AlbertoPL

1

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

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

3

आपका मतलब क्या है "ब्रूट फोर्सिंग?" क्या आपका मतलब है "सभी संभावित संयोजनों को आजमाएं और सबसे सस्ता चुनें?" बस जाँच रहा हूँ।

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

ऐसा करने के लिए मेरी पसंदीदा भाषा प्रोलॉग होगी लेकिन मैं अजीब हूं।

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

यदि आप जिस तरह से जाना चाहते हैं, तो आप संबंधित जेनेटिक एल्गोरिदम भी कोशिश कर सकते हैं।

1

विवरण

मुझे लगता है कि यह करने के लिए सबसे सस्ता तरीका स्वैप करने के लिए आइटम है कि इसके स्थान में अंतर्गत आता है के साथ सबसे सस्ता गलत मद है। मेरा मानना ​​है कि यह सबसे महंगी चीज़ों को सिर्फ एक बार स्थानांतरित करके लागत कम कर देता है। यदि एन-तत्व हैं जो जगह से बाहर हैं, तो एन-1 * लागत की लागत पर, कम से कम आइटम की लागत पर, अन्य सभी जगहों की लागत पर, उन्हें एन-1 स्वैप पर रखा जाएगा।

यदि वैश्विक रूप से सबसे सस्ता तत्व गुमराह नहीं किया गया है और इस सबसे सस्ता और सबसे सस्ता गलत स्थान के बीच फैलाव काफी बड़ा है, तो सबसे सस्ता व्यक्ति अपने सबसे सस्ता स्थान पर सबसे सस्ता स्थानांतरित कर सकता है। लागत तब एन-1 * सबसे सस्ता + जगह से बाहर की लागत + जगह से सस्ती जगह की लागत है।

उदाहरण

[4,1,2,3], इस एल्गोरिथ्म आदान-प्रदान (1,2) का उत्पादन करने के लिए:

[4,2,1,3] 

और फिर स्वैप (3,1) के उत्पादन के लिए :

[4,2,3,1] 

और फिर स्वैप (4,1) के उत्पादन के लिए:

[1,2,3,4] 

ध्यान दें कि प्रत्येक गलत जगह [2,3,4] में केवल एक बार स्थानांतरित हो जाती है और सबसे कम लागत वाली वस्तु के साथ बदल जाती है।

कोड

ओह: "कृपया एक पूरा एल्गोरिथ्म प्रदान नहीं करते हैं, बस एक दृष्टिकोण।" मेरा कोड हटा दिया।

+1

यह दृष्टिकोण इनपुट के लिए विफल रहता है: [1,8,9,7,6] - न्यूनतम 41 – dacman

+0

स्वैप: (1, 6), (1, 9), (1, 7), (1, 8) , (1, 6)। लागत: 41. हाँ, मुझे यह संभावना माना जाता है कि यदि कम से कम महंगी जगह पहले से ही मौजूद थी और इसके बीच एक बड़ा फैलाव था और अगले सबसे महंगे, तो समाधान उपरोक्त हो सकता था, लेकिन मैं साथ नहीं आया एक परीक्षण मामला धन्यवाद, और मैं इस पर वापस जाऊंगा। – hughdbrown

0

केवल आप इसे पाने के प्रयास में यह पूरी तरह से समझ में नहीं आता है।

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

मुझे इस तरह की चीजों को हल करना अच्छा लगता है।

0

इस समस्या को कुछ एसीएम प्रतियोगिताओं में सिली सॉर्ट समस्या के रूप में भी जाना जाता है। पर का उपयोग करके & पर विजय लें।

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