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

सी ++ एसटीएल में ढेर - make_heap (), push_heap (), pop_heap (), सॉर्ट_हेप (), is_heap, is_heap_until ()

इस खंड में हम C++ STL में मौजूद हीप डेटा संरचना देखेंगे। यह ढेर में तेजी से इनपुट की अनुमति देता है और किसी संख्या की पुनर्प्राप्ति के परिणामस्वरूप हमेशा सबसे बड़ी संख्या होती है यानी हर बार शेष संख्याओं की सबसे बड़ी संख्या पॉप आउट हो जाती है। ढेर के अन्य तत्वों को व्यवस्थित किया जाता है जो कार्यान्वयन पर निर्भर करता है। हीप ऑपरेशन इस प्रकार हैं -

  • make_heap() - यह एक कंटेनर में एक श्रेणी को एक ढेर में परिवर्तित करता है।

  • सामने () - यह ढेर का पहला तत्व देता है जो सबसे बड़ी संख्या है।

उदाहरण

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

#include<bits/stdc++.h>
using namespace std;
int main() {
   vector<int> heap = {33, 43, 53, 38, 28};
   make_heap(heap.begin(), heap.end());
   cout <<"Top element is : " << heap.front() << endl;
}

आउटपुट

Top element is : 53
  • push_heap () - यह तत्व को ढेर में डालने के बाद ढेर को फिर से ढेर करने में मदद करता है। हीप का आकार 1 से बढ़ जाता है। हीप में, नया तत्व उचित रूप से रखा जाता है।

  • pop_heap () - यह ढेर के सबसे बड़े तत्व को हटाने के बाद ढेर को फिर से ढेर करने में मदद करता है। ढेर का आकार 1 से घटाया जाता है। एक तत्व को हटाने के बाद, ढेर तत्वों को तदनुसार पुनर्गठित किया जाता है।

उदाहरण

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

#include<bits/stdc++.h>
using namespace std;
int main() {
   vector<int> heap = {33, 43, 53, 38, 28};
   make_heap(heap.begin(), heap.end());
   cout <<"Top element is : " << heap.front() << endl;
   heap.push_back(60);
   push_heap(heap.begin(), heap.end());
   cout <<"Top element after insert : " << heap.front() << endl;
   pop_heap(heap.begin(), heap.end());
   heap.pop_back();
   cout <<"Top element after deletion : " << heap.front() << endl;
}

आउटपुट

Top element is : 53
Top element after insert : 60
Top element after deletion : 53
  • Sort_heap() :यह हीपसॉर्टिंग तकनीक द्वारा हीप एलिमेंट को आरोही क्रम में सॉर्ट करता है।

उदाहरण (C++)

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

#include<bits/stdc++.h>
using namespace std;
int main() {
   vector<int> heap = {33, 43, 53, 38, 28};
   make_heap(heap.begin(), heap.end());
   cout <<"Before Sort : ";
   for (const auto &i : heap) {
      cout << i << ' ';
   }
   sort_heap(heap.begin(), heap.end());
   cout <<"\nAfter Sort : ";
   for (const auto &i : heap) {
      cout << i << ' ';
   }
}

आउटपुट

Before Sort : 53 43 33 38 28
After Sort : 28 33 38 43 53
  • is_heap () - इसका उपयोग यह जांचने के लिए किया जाता है कि कंटेनर ढेर है या नहीं। अधिकांश कार्यान्वयन में, रिवर्स सॉर्ट किए गए कंटेनर को हीप के रूप में माना जाता है। यह फ़ंक्शन सही हीप लौटाता है जब यह हीप होता है, अन्यथा झूठा होता है।

  • is_heap_until() - इसका उपयोग इटरेटर को स्थिति में खोजने के लिए किया जाता है जब तक कि कंटेनर हीप न हो।

उदाहरण

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

#include<bits/stdc++.h>
using namespace std;
int main() {
   vector<int> heap = {33, 43, 53, 38, 28};
   vector<int>::iterator iter;
   is_heap(heap.begin(), heap.end()) ? cout <<"The is a heap ": cout <<"The is not a heap";
   cout << endl;
   cout < "Heapify" << endl;
   make_heap(heap.begin(), heap.end());
   is_heap(heap.begin(), heap.end()) ? cout <<"The is a heap ": cout <<"The is not a heap";
   cout << endl;
   vector<int>::iterator iter2 = is_heap_until(heap.begin(), heap.end());
   cout <<"The heap elements are : ";
   for (iter=heap.begin(); iter!=iter2; iter++)
      cout << *iter <<" ";
}

आउटपुट

The is not a heap
Heapify
The is a heap
The heap elements are : 53 43 33 38 28

  1. सी ++ में एसटीएल का उपयोग करके ऐरे और वैक्टर के साथ काम करना

    समस्याओं को हल करने के लिए प्रतिस्पर्धी प्रोग्रामिंग में ऐरे और वैक्टर बहुत महत्वपूर्ण डेटा संरचनाएं हैं। और एसटीएल (मानक टेम्पलेट लाइब्रेरी ) c++ प्रोग्रामिंग में सरणियों और वैक्टर के संचालन को करने के लिए कुछ कार्य प्रदान करते हैं। आइए इनमें से कुछ कार्यों को क्रिया में देखें, सरणी/वेक्टर का योग

  1. सी ++ एसटीएल में ढेर (3.5)

    C++ STL में, स्टैक का उपयोग कंटेनर के रूप में किया जाता है जिसे LIFO संरचना के रूप में कार्यान्वित किया जाता है। LIFO का मतलब लास्ट इन फर्स्ट आउट। स्टैक पुस्तकों के ढेर के रूप में देख सकता है जिसमें पुस्तकों को एक के ऊपर एक व्यवस्थित किया जाता है और अंतिम डाली गई पुस्तक सबसे पहले हटाई जाएगी, इसलिए इ

  1. सी ++ में द्विपद ढेर?

    द्विपद हीप को बाइनरी हीप के विस्तार के रूप में परिभाषित किया गया है जो बाइनरी हीप द्वारा प्रदान किए गए अन्य कार्यों के साथ तेजी से विलय या संघ संचालन प्रदान करता है। द्विपद ढेर को द्विपद वृक्षों के संग्रह के रूप में माना जाता है। द्विपद वृक्ष क्या है? क्रम k-1 के दो द्विपद वृक्षों को लेकर और एक क