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

न्यूनतम लागत पर n रस्सियों को जोड़ना


परिचय

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

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

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

इनपुट: रस्सियों की लंबाईयाँ: {4, 3, 2, 6, 5, 7, 12}
आउटपुट: कुल न्यूनतम लागत: 103

एल्गोरिदम

findMinCost(array, n)
इनपुट: रस्सी की लंबाईयों की सूची, सूची में प्रविष्टियों की संख्या
आउटपुट: काटने की न्यूनतम लागत

Begin
    minCost := 0
    सरणी तत्वों के साथ प्राथमिकता कतार भरें, (बड़ा मान उच्च प्राथमिकता है)
    जब तक कतार खाली नहीं है, करें
        item1 := कतार से आइटम प्राप्त करें और कतार से हटाएं
        item2 := कतार से आइटम प्राप्त करें और कतार से हटाएं
        minCost := minCost + item1 + item2
        (item1 + item2) को कतार में जोड़ें
    done
    minCost लौटाएं
End

उदाहरण (C++ कोड)

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

int findMinimumCost(int arr[], int n) {
    // प्राथमिकता कतार सेट करें जिसके मान बड़े हों, उनकी प्राथमिकता अधिक हो
    priority_queue<int, vector<int>, greater<int>> queue(arr, arr+n);
    int minCost = 0;
    while (queue.size() > 1) {
        // जब कतार में एक से अधिक तत्व हों
        int item1 = queue.top(); // item1 सबसे छोटा तत्व है
        queue.pop();
        int item2 = queue.top(); // item2 item1 से बड़ा है लेकिन दूसरों से छोटा
        queue.pop();
        minCost += item1 + item2; // रस्सियों को जोड़ें और उन्हें कतार में जोड़ें
        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++ में कार्टेशियन निर्देशांकों को जोड़ने की न्यूनतम लागत ज्ञात करने का प्रोग्राम C++ में कार्टेशियन निर्देशांकों को जोड़ने की न्यूनतम लागत ज्ञात करने का प्रोग्राम

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

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

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

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

    मान लीजिए 1 से N तक नंबर वाले N शहर हैं। हमारे पास कनेक्शन्स हैं, जहां प्रत्येक कनेक्शन [i] [city1, city2, cost] है जो city1 और city2 को एक साथ जोड़ने की लागत दर्शाता है। हमें न्यूनतम लागत ढूंढनी है ताकि शहरों के प्रत्येक जोड़े के लिए, कनेक्शन्स का एक पथ मौजूद हो (संभवतः लंबाई 1 का) जो उन दो शहरों क