কম্পিউটার

C++ STL-এ হিপ - make_heap(), push_heap(), pop_heap(), sort_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
  • পুশ_হিপ() - এটি স্তূপে একটি উপাদান ঢোকানোর পরে স্তূপটিকে পুনরায় ঢেকে রাখতে সহায়তা করে। স্তূপের আকার 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. ম্যাপ max_size() C++ STL-এ

  2. C++ এ STL ব্যবহার করে অ্যারে এবং ভেক্টরের সাথে কাজ করা

  3. C++ STL(3.5) এ স্ট্যাক

  4. C++ এ দ্বিপদ স্তূপ?