टीएसपी के लिए हेल्ड-कार्प एल्गोरिदम की समय जटिलता


9

जब मैंने माइकल हेल्ड और रिचर्ड एम। कार्प द्वारा " ए डायनेमिक प्रोग्रामिंग अप्रोच टू सीक्वेंसिंग प्रॉब्लम्स " देखा, तो मैं निम्नलिखित प्रश्न के साथ आया: टीएसपी के लिए उनके एल्गोरिथ्म की जटिलता क्यों है (k=2n1k(k1)(n1k))+(n1) (पृष्ठ -1 199), मेरा मतलब है कि वे कारक k को कहाँ लेते हैं k? अगर मुझे सही तरह से समझ में आया कि k1 मतलब है शहरों के प्रत्येक सबसेट के लिए परिवर्धन की संख्या। फिर क्यों प्रत्येक जोड़ ऑपरेशन को अज्ञात के साथ k संचालन किया जाता है? मुझे लगता है कि यह किसी भी तरह न्यूनतम लेने के लिए जुड़ा हुआ है, लेकिन न्यूनतम कंप्यूटिंग को ऐसे कई कार्यों की आवश्यकता नहीं लगती है।

हेल्ड और कार्प द्वारा डायनेमिक प्रोग्रामिंग एल्गोरिथ्म और स्वतंत्र रूप से बेलमैन निम्नानुसार चलता है: प्रत्येक जोड़ी (S,ci) , जिसका अर्थ है एक रास्ता सी 1 से c1 , एस के सभी तत्व Sऔर ci कम्प्यूट पर समाप्त

OPT[S,ci]=min{OPT[S{ci},cj]+d(cj,ci):cjS{ci}},

जहाँ d(cj,ci) अर्थ है शहरों के बीच की दूरी cj और ci । फिर पेपर k से सूत्र kमें S का आकार होता है S

जवाबों:


5

नीचे दिए गए परिशिष्ट k(k1) शर्तों को स्पष्ट करते हुए:

इसलिए, यदि आप अभिव्यक्ति की शर्तों की जांच करते हैं, तो आप कल्पना कर सकते हैं (जैसा कि सादृश्य है) टर्म सभी बाइनरी स्ट्रिंग्स की गणना है जिसमें 1 की पहली स्थिति में 1 है। दूसरे शब्दों में, हम बाइनरी स्ट्रिंग में प्रत्येक स्थिति का चयन करते हैं कि क्या समस्या में शहरों में से एक सही उपसमुच्चय पर हम विचार कर रहे हैं। तो, 5 शहरों के लिए, 10101 सबसेट {1,3,5} से मेल खाती है।(n1k)kn

इस प्रकार, {1, ..., } के सभी उप-भागों में गणना करने के लिए , हम बस प्रत्येक बाइनरी सबसेट (यानी बाइनरी स्ट्रिंग्स के माध्यम से) का आकार = 2 (यानी आकार बाइनरी स्ट्रिंग्स की गिनती करते हैं, जिसमें दो 1 होते हैं) की गणना करते हैं, फिर आकार = 3, फिर आकार = 4, ... फिर आकार = एन। (ध्यान दें कि आकार = 1 सबसेट में केवल पहला शहर होना चाहिए, और इस तरह यह अपनी आंशिक दूरी की गणना करने के लिए अप्रासंगिक है, क्योंकि सबसेट में 1 -> अन्य सभी शहरों की दूरी -> 1 बिल्कुल 0. है।)nn

के साथ प्रत्येक सबसेट पर शहरों, हम अप करने के लिए विचार करने के लिए है उम्मीदवार इष्टतम, आंशिक पथ। विशेष रूप से, इष्टतम, कुल पथ दिए गए सबसेट के माध्यम से गर्भधारण कर सकता है और पहले शहर को छोड़कर, के शहरों में से किसी पर समाप्त हो सकता है। फिर, ऐसे प्रत्येक उम्मीदवार उप-पथ के लिए, हम उस बिंदु तक इष्टतम दौरे की गणना करते हैं, जो पिछले, आकार = उप-पथों में से किसी के साथ-साथ उस उप-पथ के लिए टर्मिनल शहर से दूरी से अधिक है। वर्तमान उम्मीदवार उप-पथ के लिए टर्मिनल शहर। यह ऐसी तुलना करता है जो हमें अवश्य करनी चाहिए। मेरे शब्द, और बीच विसंगतिkk1k1k1(k1)(k2)(k1)(k2)k(k1)लिंक किए गए विश्लेषण में शब्द एक उल्लेखनीय अंतर है (मैं एक अलग सीमा पर योग करूंगा, मेरी परिभाषा को देखते हुए उन्होंने किया था)। बहुत कम से कम, हालांकि, यह उस शब्द के द्विघात-क्रम जटिलता को चित्रित करना चाहिए।k


कितना दिलचस्प है - मैंने अभी कुछ मिनट पहले C ++ में इस सटीक एल्गोरिथ्म को कोडिंग किया था। (इसलिए शुद्ध सिद्धांत से स्पर्शरेखा को थोड़ा व्यावहारिक चर्चा में क्षमा करें। :))

इसमें समय और स्थान है - कम से कम मेरे कार्यान्वयन के तहत। व्यावहारिक रूप से हालांकि, जब आपकी अंतरिक्ष की आवश्यकताएं तेजी से बढ़ती हैं, तो वे समय की आवश्यकताओं की तुलना में अधिक दर्दनाक हो जाते हैं। उदाहरण के लिए, मेरे पीसी पर (4 जीबी रैम के साथ), मैं 24 शहरों के साथ उदाहरणों को हल कर सकता हूं - इससे अधिक कोई भी, और मैं मेमोरी से बाहर चला जाता हूं।O(2nn2)O(2nn)

बेशक, मैं सिर्फ एक बुरा प्रोग्रामर हो सकता हूं, और आप अभ्यास में मुझसे बेहतर कर सकते हैं। :)

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

इसके अलावा, अगर मेरी व्याख्या पर्याप्त नहीं थी, तो यहां वज़ीरानी ( पीडीएफ ) के कुछ अच्छे व्याख्यान नोट हैं । टीएसपी की चर्चा के लिए पी। 188 तक स्क्रॉल करें, जिसमें हेल्ड-कार्प का विश्लेषण भी शामिल है।


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

2
Bjorklund एल्गोरिथ्म को लागू करने का समय :)
सुरेश वेंकट

@ सुरेश: अच्छा विचार है!
डैनियल एपोन

@ डैनियल एपॉन, कृपया, "आंशिक, इष्टतम दूरी" की गणना करते समय हमें तुलना की आवश्यकता क्यों है?
ऑलेक्ज़ेंडर बॉन्डारेंको

@ ऑलेक्ज़ेंडर: ज़रूर, मैं इसे अपने जवाब के शीर्ष पर जोड़ दूंगा।
डैनियल अपॉन

0

मुख्य नोट

यह ध्यान रखना महत्वपूर्ण है कि हम
" और के लिए इष्टतम पथ की दूरी combination of k cities"
लेकिन
" combination of k cities और के लिए इष्टतम पथ की दूरी" की गणना नहीं करते हैं end-point city from this combination
इसे समझने में निम्नलिखित सूत्र में पहले दो गुणकों के अर्थ के साथ मदद मिलेगी।

प्रथम चरण

पहले चरण में परिचालन की संख्या है:

k>=2(n1k1)choose city combinationof size = k1(k1)choose city to be the lastfrom k1 citiesin chosen combination((n1)(k1))choose citythat is not in chosen combinationto add to path

राशि में सुपरस्क्रिप्ट का गुम होना for all k>=2 that is valid for binomial coefficient। तो अंतिम वैध राशि शून्य अवधि के लिए नहीं होगीk=n1

(n1n2)(n2)1
इसका अर्थ है कि हमारा योग पहले शहर से जुड़ने के लिए शहर के अंतिम विकल्पों पर कब्जा नहीं करता है। वहांn1पहले शहर से जुड़ने वाले शहर इसलिए अंत में हम इस शब्द को जोड़ देंगे।

सूत्र को उस रूप में परिणत करने दें जो आप प्रदान करते हैं जो कि Held-Karp Wikipedia पृष्ठ पर भी है ।

k>=2(n1k1)(k1)((n1)(k1))=k>=2(n1)!(k1)!(nk)!(k1)(nk)=k>=2(n1)!k!(n1k)!k(k1)=k>=2(n1k)k(k1)
द्विपद गुणांक में हेर-फेर होता है:
k>=2(n1k)k(k1)=k>=2(n1)!k!(n1k)!k(k1)=k>=2(n3)!(k2)!(n3(k2))!(n1)(n2)=(n1)(n2)k>=2(n3k2)=(n1)(n2)2n3
तो पहले चरण में संचालन की संख्या है (n1)(n2)2n3+(n1)

दूसरा चरण

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

प्रत्येक इष्टतम पथ के लिए " combination of k cities और " के लिए end-point city from this combinationहमने दूसरे-से-अंतिम शहर को बचाया है।

इष्टतम पथ को पीछे करने के लिए हमें " combination of k cities और के लिए end-point city from this combination" दूसरे शहर के अंतिम डेटा को वापस करने के लिए कुछ डेटा संरचना से पूछना होगा । तो इस डेटा संरचना की तरह कुछ होना चाहिए
Map<combination of k cities, Map<last city, second-to-last city>>combination of k citiesउदाहरण के लिए, हम इंडेक्स का उपयोग कर सकते हैं binary_string[city id]=1 if city id is in combination। इसलिए हमें combination of k citiesसंयोजन की पहचान करने और हमारे डेटा संरचना को अनुक्रमित करने के सभी तत्वों को देखने की आवश्यकता है । यह हमें दूसरे चरण के लिए संचालन की संख्या प्रदान करता है:

k>=2n1k=(n)(n1)21

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