কম্পিউটার

B+ ট্রি বাস্তবায়নের জন্য C++ প্রোগ্রাম


B+ ট্রি হল একটি বাইনারি সার্চ ট্রির একটি সাধারণীকরণ যেখানে একটি নোডে দুটির বেশি সন্তান থাকতে পারে। এটি মূলত একটি স্ব-ভারসাম্যপূর্ণ ট্রি ডেটা কাঠামো যা সাজানো ডেটা বজায় রাখে এবং লগারিদমিক সময়ে অনুক্রমিক অ্যাক্সেস, অনুসন্ধান, সন্নিবেশ এবং মুছে ফেলার অনুমতি দেয়।

এটি একটি বি-ট্রি হিসাবে দেখা যেতে পারে যেখানে প্রতিটি নোডে শুধুমাত্র কী থাকে এবং যার সাথে লিঙ্কযুক্ত পাতাগুলির সাথে নীচে একটি অতিরিক্ত স্তর যুক্ত করা হয়৷

অ্যালগরিদম

ট্রিতে নোড ঢোকানোর জন্য
 insert() ফাংশন শুরু করুন:x রুট হিসাবে শুরু করুন। যদি x পাতা হয় এবং আরও একটি তথ্যের জন্য স্থান থাকে তাহলে x-এ a ঢোকান। অন্যথায় যদি x পাতা না হয়, তাহলে x এর সন্তানটি খুঁজুন যেটি পরবর্তীতে অতিক্রম করতে যাচ্ছে। শিশুটি পূর্ণ না হলে, সন্তানের দিকে নির্দেশ করতে x পরিবর্তন করুন। শিশুটি পূর্ণ হলে, এটিকে ভাগ করুন এবং x পরিবর্তন করে সন্তানের দুটি অংশের একটিতে নির্দেশ করুন। যদি শিশুর মধ্যে a mid key থেকে ছোট হয়, তাহলে x কে সন্তানের প্রথম অংশ হিসেবে সেট করুন। অন্যথায় সন্তানের দ্বিতীয় অংশ। শেষ

উদাহরণ কোড

#include namespace ব্যবহার করে std;struct BplusTree { int *d; BplusTree **child_ptr; bool l; int n;}*r =NULL, *np =NULL, *x =NULL;BplusTree* init()//নোড তৈরি করতে { int i; np =নতুন BplusTree; np->d =new int[6];//order 6 np->child_ptr =new BplusTree *[7]; np->l =সত্য; np->n =0; (i =0; i <7; i++) { np->child_ptr[i] =NULL; } রিটার্ন np;} void traverse(BplusTree *p)//traverse tree { cout<n; i++) { যদি (p->l ==মিথ্যা) { traverse(p->child_ptr[i]); } cout <<" " <d[i]; } যদি (p->l ==মিথ্যা) { traverse(p->child_ptr[i]); } cout<p[j]) { t =p[i]; p[i] =p[j]; p[j] =t; } } }} int split_child(BplusTree *x, int i) { int j, mid; BplusTree *np1, *np3, *y; np3 =init(); np3->l =সত্য; যদি (i ==-1) { মধ্য =x->d[2]; x->d[2] =0; x->n--; np1 =init(); np1->l =মিথ্যা; x->l =সত্য; (j =3; j <6; j++) { np3->d[j - 3] =x->d[j]; np3->child_ptr[j - 3] =x->child_ptr[j]; np3->n++; x->d[j] =0; x->n--; } এর জন্য (j =0; j <6; j++) { x->child_ptr[j] =NULL; } np1->d[0] =মধ্য; np1->child_ptr[np1->n] =x; np1->child_ptr[np1->n + 1] =np3; np1->n++; r =np1; } অন্য { y =x->child_ptr[i]; মধ্য =y->d[2]; y->d[2] =0; y->n--; (j =3; j <6; j++) { np3->d[j - 3] =y->d[j]; np3->n++; y->d[j] =0; y->n--; } x->child_ptr[i + 1] =y; x->child_ptr[i + 1] =np3; } রিটার্ন মিড;} void insert(int a) { int i, t; x =r; যদি (x ==NULL) { r =init(); x =r; } else { যদি (x->l==true &&x->n ==6) { t =split_child(x, -1); x =r; (i =0; i <(x->n); i++) { যদি (a>x->d[i]) &&(a d[i + 1])) { i++; বিরতি } অন্যথায় যদি (a d[0]) { বিরতি; } অন্য { চালিয়ে যান; } } x =x->child_ptr[i]; } অন্য { যখন (x->l ==মিথ্যা) { (i =0; i <(x->n); i++) { যদি (a>x->d[i]) &&(a d[i + 1])) { i++; বিরতি } অন্যথায় যদি (a d[0]) { বিরতি; } অন্য { চালিয়ে যান; } } যদি ((x->child_ptr[i])->n ==6) { t =split_child(x, i); x->d[x->n] =t; x->n++; চালিয়ে যাওয়া } অন্য { x =x->child_ptr[i]; } } }} x->d[x->n] =a; সাজান(x->d, x->n); x->n++;}int main() { int i, n, t; cout<<"ঢোকানো উপাদানের সংখ্যা লিখুন\n"; cin>>n; for(i =0; i >t; সন্নিবেশ (টি); } cout<<"নির্মিত B গাছের ট্রাভার্সাল\n"; traverse(r);}

আউটপুট

ঢোকানো উপাদানের সংখ্যা লিখুন10উপাদানটি প্রবেশ করুন10উপাদানটি প্রবেশ করুন20উপাদানটি প্রবেশ করুন30উপাদানটি প্রবেশ করান40উপাদানটি প্রবেশ করান50টি উপাদানটি প্রবেশ করান60টি উপাদানটি প্রবেশ করান70টি উপাদানটি প্রবেশ করান90উপাদানটি প্রবেশ করান90নির্মাণকৃত B208050105050104050105040401004010000000000000000000000 দৈর্ঘ্যের নির্মাণ করা হয়েছে 
  1. সিজার সাইফার বাস্তবায়নের জন্য C++ প্রোগ্রাম

  2. AVL ট্রি বাস্তবায়নের জন্য C++ প্রোগ্রাম

  3. মিন হিপ বাস্তবায়নের জন্য C++ প্রোগ্রাম

  4. টারনারি ট্রি বাস্তবায়নের জন্য C++ প্রোগ্রাম