आपको एक सूची या वेक्टर या जो भी हो, 3-टुपल्स का एक गुच्छा या जो कुछ भी, जहां पहली दो चीजें तार हैं, और तीसरी चीज एक संख्या के रूप में दी गई है। तार शहर हैं, और संख्या उनके बीच की दूरी है। टपल में शहरों का क्रम मनमाना है (अर्थात यह कोई मायने नहीं रखता जो पहले आता है और जो दूसरा आता है) क्योंकि यह एक ही दूरी है। साथ ही, जुड़े हुए प्रत्येक जोड़े के लिए बिल्कुल एक टपल है। सभी शहर आपस में जुड़े हुए नहीं हो सकते हैं। इसके अलावा, दूरी हमेशा सकारात्मक होती है (नहीं0
)। आपको इन स्थितियों की जांच करने की आवश्यकता नहीं है, आप मान सकते हैं कि इनपुट अच्छी तरह से बनेगा। आपका काम एक चक्रीय अनुक्रम में शहरों को वापस करना है, जैसे कि, यदि आप किसी एक शहर से शुरू करते हैं, और उसी शहर में वापस अनुक्रम में जाते हैं, तो शहरों के बीच की कुल दूरी न्यूनतम होगी (बिल्कुल और सभी में मामलों।) आप मान सकते हैं कि एक समाधान मौजूद है। उदाहरण के लिए, हम कहते हैं कि आप दिए गए हैं
[("New York", "Detroit", 2.2), ("New York", "Dillsburg", 3.7), ("Hong Kong", "Dillsburg", 4), ("Hong Kong", "Detroit", 4), ("Dillsburg", "Detroit", 9000.1), ("New York", "Hong Kong", 9000.01)]
आप निम्न में से कोई भी आउटपुट कर सकते हैं (लेकिन आपको केवल एक आउटपुट की आवश्यकता है):
["Detroit","Hong Kong","Dillsburg","New York"]
["Hong Kong","Dillsburg","New York","Detroit"]
["Dillsburg","New York","Detroit","Hong Kong"]
["New York","Detroit","Hong Kong","Dillsburg"]
["Dillsburg","Hong Kong","Detroit","New York"]
["New York","Dillsburg","Hong Kong","Detroit"]
["Detroit","New York","Dillsburg","Hong Kong"]
["Hong Kong","Detroit","New York","Dillsburg"]
क्योंकि यह सबसे छोटी यात्रा है: 13.9
लेकिन नहीं
["Dillburg","Detroit","New York","Hong Kong"]
क्योंकि यह सबसे छोटा नहीं है।
En.wikipedia.org/wiki/Travelling_salesman_problem देखें
स्कोरिंग
यहां यह दिलचस्प हो जाता है। आपके पास जितने वर्ण हैं, और फिर उन्हें सबसे खराब स्थिति वाले ओ-नोटेशन फॉर्मूले में प्लग करें। उदाहरण के लिए, मान लें कि आप एक ब्रूट फोर्स प्रोग्राम लिखते हैं जो 42 अक्षर का है। हम सभी जानते हैं, सबसे खराब स्थिति है n!
जहां n
शहरों की संख्या है। 42! = 140500611775287989854314260624451156993636384000000, ताकि आपका स्कोर हो। सबसे कम स्कोर जीतता है ।
नोट: मैंने इसे बाद में भी राहत दी है, लेकिन यह निश्चित नहीं था कि इसे कैसे हल किया जाए और उम्मीद है कि कोई भी नोटिस नहीं करेगा। लोगों ने किया, इसलिए मैं ईसकाग के सुझाव के साथ जाऊंगा:
एकमात्र विकल्प O (n!) और O (b ^ n n ^ a ln (n) ^ k) हैं, और सभी सीमाएँ उस संकेतन को जितना संभव हो उतना कड़ा होना चाहिए।
O(n!)
और O(b^n*n^a*ln(n)^k)
, और सभी सीमाएं उस संकेतन के अनुसार यथासंभव तंग होनी चाहिए। ओपी को हालांकि स्पष्ट करना चाहिए।
O(n^2*2^n)
, जो O(n!)
बड़े एन के मुकाबले बहुत कम है ।
O(n!)
, लेकिन नहींO(sqrt(n)*n^n/e^n)
है और न हीO(n!/100000000000000000000)
?