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

C++ में मिन-हीप में K'th Least Element

इस ट्यूटोरियल में, हम एक प्रोग्राम लिखने जा रहे हैं जो मिन-हीप से k-th मिनिमम एलिमेंट ढूंढता है।

हम समस्या को हल करने के लिए प्राथमिकता कतार का उपयोग करेंगे। आइए कार्यक्रम को पूरा करने के चरणों को देखें।

  • मिन-हीप को सही मानों के साथ प्रारंभ करें।
  • प्राथमिकता कतार बनाएं और मिन-हीप का रूट नोड डालें।
  • ऐसा लूप लिखें जो k-1 बार पुनरावृत्त हो।
    • कतार से सबसे छोटा तत्व पॉप करें।
    • उपरोक्त नोड के बाएँ और दाएँ नोड्स को प्राथमिकता कतार में जोड़ें।
  • प्राथमिकता कतार में सबसे बड़ा तत्व अब k-वां सबसे बड़ा तत्व है।
  • इसे वापस करें।

उदाहरण

आइए कोड देखें।

#include <bits/stdc++.h>
using namespace std;
struct Heap {
   vector<int> elemets;
   int n;
   Heap(int i = 0): n(i) {
      elemets = vector<int>(n);
   }
};
inline int leftIndex(int i) {
   return 2 * i + 1;
}
inline int rightIndex(int i) {
   return 2 * i + 2;
}
int findKthGreatestElement(Heap &heap, int k) {
   priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>>queue;
   queue.push(make_pair(heap.elemets[0], 0));
   for (int i = 0; i < k - 1; ++i) {
      int node = queue.top().second;
      queue.pop();
      int left = leftIndex(node), right = rightIndex(node);
      if (left < heap.n) {
         queue.push(make_pair(heap.elemets[left], left));
      }
      if (right < heap.n) {
         queue.push(make_pair(heap.elemets[right], right));
      }
   }
   return queue.top().first;
}
int main() {
   Heap heap(10);
   heap.elemets = vector<int>{ 10, 14, 19, 24, 32, 41, 27, 44, 35, 33 };
   cout << findKthGreatestElement(heap, 4) << endl;
   return 0;
}

आउटपुट

यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।

24

निष्कर्ष

यदि ट्यूटोरियल में आपके कोई प्रश्न हैं, तो उनका टिप्पणी अनुभाग में उल्लेख करें।


  1. सी ++ में अधिकतम ढेर में न्यूनतम तत्व।

    समस्या कथन अधिकतम ढेर में कम से कम मान वाला तत्व खोजें। आइए हम अधिकतम ढेर के नीचे विचार करें। रूट नोड के अधिकतम ढेर मूल्य में हमेशा उसके बच्चे से अधिक होता है। इस संपत्ति के कारण, हम यह निष्कर्ष निकाल सकते हैं कि मान लीफ नोड्स में से एक में मौजूद होगा। यदि ढेर में n नोड्स हैं तो छत (n/2) पत्ते

  1. C++ प्रोग्राम बाइनरी हीप को लागू करने के लिए

    एक बाइनरी हीप एक पूर्ण बाइनरी ट्री है जो या तो मिन हीप या मैक्स हीप है। मैक्स बाइनरी हीप में, रूट की कुंजी बाइनरी हीप में मौजूद सभी कुंजियों के बीच अधिकतम होनी चाहिए। यह गुण उस बाइनरी ट्री में सभी नोड्स के लिए पुनरावर्ती रूप से सत्य होना चाहिए। मिन बाइनरी हीप मिनहीप के समान है। कार्य विवरण: शून्य B

  1. सी ++ प्रोग्राम हीप सॉर्ट को लागू करने के लिए

    एक हीप एक पूर्ण बाइनरी ट्री है जो या तो मिन हीप या मैक्स हीप है। मैक्स हीप में, रूट की कुंजी हीप में मौजूद सभी कुंजियों के बीच अधिकतम होनी चाहिए। बाइनरी ट्री में सभी नोड्स के लिए यह गुण पुनरावर्ती रूप से सत्य होना चाहिए। मिन हीप मिनहीप के समान है। कार्य विवरण शून्य BHeap::Insert(int ele): ढेर में त