২২-৫ঃ Heap এ Insertion ইমপ্লিমেন্টেশন
গত মডিউলে আমরা দেখেছি কীভাবে একটি Heap এর internally একটি ভ্যালু insert করে তার থিওরি। এখন দেখবো এদের coding implementation.
প্রথমে দেখে নেয়া যাক , Max Heap এর implementation
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> v; // স্টোর করার জন্য একটি ভেক্টর নেয়া হচ্ছে।
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int x;
cin >> x;
v.push_back(x); // একটি ভ্যালু পেলে সেটিকে ভেক্টরের লাস্টে পুশ করে দিলাম।
// যেহেতু সবার শেষে insert হয়েছে , তাই এর index হবে ভেক্টরের সাইজ হতে ১ কম
int cur_idx = v.size() - 1;
// এরপর সেই Node থেকে নিয়ে root পর্যন্ত সব ভ্যালু চেক করা হচ্ছে যতক্ষন parent থেকে children বড় থাকতেছে ততক্ষন
while (cur_idx != 0)
{
int parent_idx = (cur_idx - 1) / 2; // প্রথমে node টির parent বের করে নেয়া হচ্ছে ।
// যেহেতু parent সবসময় child থেকে বড় হতে হবে , তাই child এর ভ্যালু বেশি হলে তা parents এর সাথে swap করে ফেলা হচ্ছে।
if (v[parent_idx] < v[cur_idx]) ।।
swap(v[parent_idx], v[cur_idx]);
else
break; // parent বড় হলে আর চেক করার দরকার নেই এখানে ব্রেক হয়ে যাচ্ছে
cur_idx = parent_idx; // যদি swap হয় তবে cur index হয়ে যাবে কারণ ভ্যালুটি এখন parent এর প্লেসে চলে গেছে
}
}
for (int val : v)
cout << val << " ";
return 0;
}
এরপর Min Heap Implementation
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> v; // স্টোর করার জন্য একটি ভেক্টর নেয়া হচ্ছে।
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int x;
cin >> x;
v.push_back(x); // একটি ভ্যালু পেলে সেটিকে ভেক্টরের লাস্টে পুশ করে দিলাম।
// যেহেতু সবার শেষে insert হয়েছে , তাই এর index হবে ভেক্টরের সাইজ হতে ১ কম
int cur_idx = v.size() - 1;
// এরপর সেই Node থেকে নিয়ে root পর্যন্ত সব ভ্যালু চেক করা হচ্ছে যতক্ষন parent থেকে children ছোট থাকতেছে ততক্ষন
while (cur_idx != 0)
{
int parent_idx = (cur_idx - 1) / 2; // প্রথমে node টির parent বের করে নেয়া হচ্ছে ।
// যেহেতু parent সবসময় child থেকে ছোট হতে হবে , তাই child এর ভ্যালু ছোট হলে তা parents এর সাথে swap করে ফেলা হচ্ছে।
if (v[parent_idx] > v[cur_idx]) ।।
swap(v[parent_idx], v[cur_idx]);
else
break; // parent ছোট হলে আর চেক করার দরকার নেই এখানে ব্রেক হয়ে যাচ্ছে
cur_idx = parent_idx; // যদি swap হয় তবে cur index হয়ে যাবে কারণ ভ্যালুটি এখন parent এর প্লেসে চলে গেছে
}
}
for (int val : v)
cout << val << " ";
return 0;
}
Last updated