2010-03-23 14 views
11

मान लीजिए कि मेरे पास 10 अंक हैं। मैं प्रत्येक बिंदु के बीच की दूरी जानता हूँ।एल्गोरिदम: सभी बिंदुओं के बीच सबसे छोटा रास्ता

मुझे सभी बिंदुओं के माध्यम से गुजरने वाले सबसे कम संभव मार्ग को खोजने की आवश्यकता है।

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

परमिटेशन ठीक काम करते हैं, लेकिन वे बहुत संसाधन-महंगे हैं।

इस समस्या को देखने के लिए आप मुझे क्या एल्गोरिदम सलाह दे सकते हैं? या उपर्युक्त एल्गोरिदम के साथ ऐसा करने का एक दस्तावेज तरीका है?

+1

यदि केवल 10 अंक हैं, तो यह केवल 3,628,800 क्रमपरिवर्तन है। यह बहुत महंगा नहीं है। क्या आप इनमें से बहुत कुछ करने की उम्मीद कर रहे हैं? –

+0

10 अंक एक उदाहरण था। हमें एक ऐसी स्क्रिप्ट लिखनी है जो किसी भी अंक को ले सकती है। – Jeroen

उत्तर

24

travelling salesman problem पर एक नज़र डालें।

आप heuristic solutions में से कुछ को देखना चाहते हैं। वे आपको 100% सटीक परिणाम देने में सक्षम नहीं हो सकते हैं, लेकिन अक्सर वे उचित समय में अच्छे पर्याप्त समाधान (इष्टतम समाधान से 2 से 3% दूर) के साथ आ सकते हैं।

+0

आप रैखिक समय में 2 एमएसटी से कम की गारंटी दे सकते हैं। –

+0

यात्रा करने वाला विक्रेता ऐसा लगता है कि मुझे इस अंतर के साथ क्या चाहिए कि यह एक बंद सर्किट नहीं है। हेरिस्टिक समाधानों पर एक नज़र डालेंगे। Tnx! – Jeroen

6

यह स्पष्ट रूप से Travelling Salesman problem है। विशेष रूप से N=10 के लिए, आप या तो O(N!) बेवकूफ एल्गोरिदम का प्रयास कर सकते हैं, या Dynamic Programming का उपयोग कर, आप इसे व्यापार स्थान द्वारा O(n^2 2^n) पर घटा सकते हैं।

इसके अलावा, चूंकि यह एक एनपी-हार्ड समस्या है, आप केवल सामान्य चेतावनी के अनुसार अनुमानित या हेरिस्टिक के लिए आशा कर सकते हैं।

2

जैसा कि अन्य ने उल्लेख किया है, यह टीएसपी का एक उदाहरण है। मुझे लगता है कि जॉर्जिया टेक में विकसित Concord वर्तमान अत्याधुनिक सॉल्वर है। यह कुछ सेकंड के भीतर 10,000 अंकों के ऊपर संभाल सकता है। इसमें एक एपीआई भी है जो काम करना आसान है।

0

मुझे लगता है कि यह आपके लिए क्या देख रहे हैं, वास्तव में:

Floyd Warshall

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

"पथ पुनर्निर्माण" उप-अनुभाग में यह डेटा पथ को बताता है जिसे आपको "पथ" को स्टोर करने की आवश्यकता होगी (वास्तव में आप केवल अगले नोड को स्टोर करने के लिए स्टोर करते हैं और फिर आवश्यक रूप से आवश्यक पथ को फिर से स्थापित करते हैं)।

+0

वास्तव में ओपी ने एफडब्ल्यू का उल्लेख किया है और यह स्पष्ट रूप से नहीं है कि वह क्या मांग रहा है। – ziggystar

+1

ओपी ने इसका उल्लेख किया हो सकता है लेकिन इसका मतलब यह नहीं है कि वह पथ पुनर्निर्माण के बारे में जानता था, जो उपरोक्त टिप्पणी जोड़ता है। –

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