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

न्यूनतम लागत के साथ n रस्सियों को कनेक्ट करें


दी गई लंबाई की N रस्सियाँ हैं। हमें उनसे जुड़ना होगा। एक रस्सी को दूसरे से जोड़ने की लागत उनकी लंबाई का योग है। हमारा लक्ष्य एन रस्सियों को न्यूनतम लागत से जोड़ना है।

एक हीप ट्री का उपयोग करके इस समस्या को हल किया जा सकता है। हम पहले सभी अलग-अलग लंबाई डालने के लिए न्यूनतम ढेर बनाएंगे, फिर न्यूनतम ढेर से न्यूनतम और दूसरा न्यूनतम आइटम हटा देंगे, उन्हें कनेक्ट करेंगे और फिर से ढेर पेड़ में डालेंगे। जब ढेर में केवल एक तत्व होगा, तो हम प्रक्रिया को रोक सकते हैं और न्यूनतम लागत के साथ कनेक्टेड रस्सी प्राप्त कर सकते हैं।

इनपुट और आउटपुट

Input:
The lengths of the ropes: {4, 3, 2, 6, 5, 7, 12}
Output:
Total minimum cost: 103

एल्गोरिदम

findMinCost(array, n)

इनपुट - रस्सी की लंबाई की सूची, सूची में प्रविष्टियों की संख्या।

आउटपुट - न्यूनतम लागत में कटौती।

Begin
   minCost := 0
   fill priority queue with the array elements, (greater value is higher priority)
   while queue is not empty, do
      item1 := get item from queue and delete from queue
      item2 := get item from queue and delete from queue
      minCost := minCost + item1 + item2
      add (item1 + item2) into the queue
   done
   return minCost
End

उदाहरण

#include<iostream>
#include<queue>
#include<vector>
using namespace std;

int findMinimumCost(int arr[], int n) {
   //priority queue is set as whose value is bigger, have higher priority
   priority_queue< int, vector<int>, greater<int>>queue(arr, arr+n);

   int minCost = 0;

   while (queue.size() > 1) {              //when queue has more than one element
      int item1 = queue.top();            //item1 is the shortest element
      queue.pop();

      int item2 = queue.top();          //item2 is bigger than item1 but shorter then other
      queue.pop();

      minCost += item1 + item2;         //connect ropes and add them to the queue
      queue.push(item1 + item2);
   }
   return minCost;
}

int main() {
   int ropeLength[] = {4, 3, 2, 6, 5, 7, 12};
   int n = 7;
   cout << "Total minimum cost: " << findMinimumCost(ropeLength, n);
}
खोजें

आउटपुट

Total minimum cost: 103

  1. C++ में प्रत्येक कार्तीय निर्देशांक को जोड़ने के लिए न्यूनतम लागत ज्ञात करने का कार्यक्रम

    मान लीजिए कि हमारे पास 2D कार्टेशियन निर्देशांक बिंदुओं (x, y) की एक सूची है। हम (x0, y0) और (x1, y1) को जोड़ सकते हैं, जिसकी लागत |x0 - x1| + |y0 - y1|। यदि हमें किसी भी संख्या में बिंदुओं को जोड़ने की अनुमति दी जाती है, तो हमें आवश्यक न्यूनतम लागत का पता लगाना होगा जैसे कि प्रत्येक बिंदु एक पथ से

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

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

  1. पायथन में न्यूनतम लागत वाले शहरों को जोड़ना

    मान लीजिए कि 1 से N तक N शहरों की संख्या है। हमारे पास कनेक्शन हैं, जहां प्रत्येक कनेक्शन [i] [शहर 1, शहर 2, लागत] है, यह शहर 1 और शहर 2 को एक साथ जोड़ने की लागत का प्रतिनिधित्व करता है . हमें न्यूनतम लागत का पता लगाना होगा ताकि शहरों की प्रत्येक जोड़ी के लिए, कनेक्शन का एक मार्ग मौजूद हो (संभवतः लं