Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन में सभी बिंदुओं को जोड़ने के लिए न्यूनतम लागत खोजने का कार्यक्रम

मान लीजिए कि हमारे पास बिंदु (x, y) के रूप में कुछ बिंदुओं के साथ बिंदु नामक एक सरणी है। अब दो बिंदुओं (xi, yi) और (xj, yj) को जोड़ने की लागत उनके बीच मैनहट्टन दूरी है, सूत्र है |xi - xj| + |yi - yj|। हमें सभी बिंदुओं को जोड़ने के लिए न्यूनतम लागत का पता लगाना होगा।

इसलिए, यदि इनपुट पॉइंट्स की तरह है =[(0,0),(3,3),(2,10),(6,3),(8,0)], तो आउटपुट 22 होगा क्योंकि

पायथन में सभी बिंदुओं को जोड़ने के लिए न्यूनतम लागत खोजने का कार्यक्रम

तो यहाँ कुल दूरी है (6+5+3+8) =22.

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • points_set :=0 से लेकर पॉइंट्स के आकार तक की संख्या - 1 के लिए एक नया सेट होल्डिंग नंबर - 1
  • ढेर:=जोड़ी के साथ ढेर बनाएं (0, 0)
  • विज़िट_नोड:=एक नया सेट
  • कुल_दूरी:=0
  • जबकि ढेर खाली नहीं है और विज़िट किए गए_नोड का आकार <अंकों का आकार, करते हैं
    • (दूरी, current_index):=ढेर से तत्व हटाएं
    • यदि current_index विज़िट किए गए_नोड में मौजूद नहीं है, तो
      • current_index को विज़िट किए गए_नोड में डालें
      • प्वाइंट_सेट से current_index हटाएं
      • कुल_दूरी:=कुल_दूरी+दूरी
      • (x0, y0) :=अंक [current_index]
      • प्वाइंट_सेट में प्रत्येक अगले_इंडेक्स के लिए, करें
        • (x1, y1) :=अंक [next_index]
        • हीप में डालें (|x0 - x1| + |y0 - y1| , next_index)
  • वापसी कुल_दूरी

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

import heapq
def solve(points):
   points_set = set(range(len(points)))
   heap = [(0, 0)]
   visited_node = set()
   total_distance = 0
   while heap and len(visited_node) < len(points):
      distance, current_index = heapq.heappop(heap)
      if current_index not in visited_node:
         visited_node.add(current_index)
         points_set.discard(current_index)
         total_distance += distance
         x0, y0 = points[current_index]
         for next_index in points_set:
            x1, y1 = points[next_index]
            heapq.heappush(heap, (abs(x0 - x1) + abs(y0 - y1), next_index))
   return total_distance
points = [(0,0),(3,3),(2,10),(6,3),(8,0)]
print(solve(points))

इनपुट

[(0,0),(3,3),(2,10),(6,3),(8,0)]

आउटपुट

22

  1. पायथन में एक छड़ी काटने के लिए न्यूनतम लागत खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक मान n और एक सरणी है जिसे कट कहा जाता है। मान लीजिए कि लंबाई n इकाइयों की लकड़ी की छड़ी है। छड़ी को 0 से n तक लेबल किया गया है। यहां कटौती [i] उस स्थिति का प्रतिनिधित्व करती है जहां हम कटौती कर सकते हैं। हमें कटौती क्रम में करनी चाहिए, लेकिन हम कटौती के क्रम को अपनी इच्छानुस

  1. पायथन का उपयोग करके सभी नोड्स तक पहुंचने के लिए न्यूनतम संख्या में कोने खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक निर्देशित चक्रीय ग्राफ है, जिसमें n कोने हैं और नोड्स 0 से n-1 तक गिने जाते हैं, ग्राफ को किनारे की सूची द्वारा दर्शाया जाता है, जहां किनारों [i] =(यू, वी) नोड यू से एक निर्देशित किनारे का प्रतिनिधित्व करता है। नोड वी। हमें शिखर का सबसे छोटा सेट ढूंढना है जिससे ग्राफ में सभ

  1. पायथन में सभी शिपमेंट को पूरा करने के लिए कुल लागत खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास पोर्ट नामक सूचियों की एक सूची है, जहां पोर्ट [i] उन पोर्ट की सूची का प्रतिनिधित्व करता है जिनसे पोर्ट i जुड़ा हुआ है। हमारे पास शिपमेंट्स नामक सूचियों की एक और सूची भी है जहां अनुक्रम की प्रत्येक सूची [i, j] जो दर्शाती है कि पोर्ट i से पोर्ट j तक शिपमेंट अनुरोध है। और पोर्ट I