কম্পিউটার

অর্ডার-স্ট্যাটিস্টিক অ্যালগরিদম ব্যবহার করে প্রদত্ত তালিকা থেকে সবচেয়ে বড় সংখ্যা খুঁজে পেতে C++ প্রোগ্রাম


অর্ডার-স্ট্যাটিস্টিক অ্যালগরিদম ব্যবহার করে প্রদত্ত তালিকা থেকে সবচেয়ে বড় সংখ্যা খুঁজে বের করার জন্য এটি একটি C++ প্রোগ্রাম।

অ্যালগরিদম

 ট্রিতে নোড সন্নিবেশ করতে Insert() ফাংশন শুরু করুন:আর্গুমেন্ট:রুট, ডি। ফাংশনের বডি:ট্রি সম্পূর্ণ শূন্য হলে রুট হিসেবে নতুন নোড যোগ করুন। d =tmp->ডেটা হলে, সেই নির্দিষ্ট নোডের সংখ্যা বাড়ান। d ডেটা হলে, tmp পয়েন্টারটি বাম চাইল্ডে নিয়ে যান। d> tmp->ডেটা হলে, tmp পয়েন্টারটিকে ডান চাইল্ডে নিয়ে যান। EndBegin ফাংশন AssignRank() গাছের প্রতিটি নোডে র‌্যাঙ্ক বরাদ্দ করতে:আর্গুমেন্ট:রুট। ফাংশনের বডি:মূলের বাম সন্তান হলে শূন্য হয় না। তারপর মূলের বাম সন্তানকে র‌্যাঙ্ক বরাদ্দ করুন। র‌্যাঙ্ক কাউন্ট বাড়ান। মূলের ডান সন্তান হলে শূন্য হয় না। তারপর রুটের ডান চাইল্ডকে র‌্যাঙ্ক বরাদ্দ করুন। EndBegin ফাংশন সিলেক্ট() ট্রিতে সংরক্ষিত ডাটা থেকে Kth ক্ষুদ্রতম উপাদান অনুসন্ধান করতে:আর্গুমেন্ট:রুট, অনুসন্ধান করা উপাদান k। ফাংশনের মূল অংশ:যদি সমান পাওয়া যায়, তবে মূলে ফিরে যান এবং ফলাফলটি মুদ্রণ করুন। অন্যথায় যদি এটি বড় হয় তবে অস্থায়ী পরিবর্তনশীলটিকে সঠিক সন্তানের কাছে স্থানান্তর করুন। অন্যথায় অস্থায়ী ভেরিয়েবলটিকে বাম শিশুর কাছে স্থানান্তর করুন 

উদাহরণ

#includeনেমস্পেস ব্যবহার করে std;static int cnt =0;struct nod //নোডের ঘোষণা { int ডেটা; int র্যাঙ্ক; নড *l; nod *r;};nod* CreateNod(int d) //নতুন নোডের সৃষ্টি{ nod *newnod =new nod; নিউনোড->ডেটা =ডি; নিউনোড->র্যাঙ্ক =0; newnod->l =NULL; newnod->r =NULL; রিটার্ন newnod;}nod* Insert(nod* root, int d) //perform insertion{ nod *tmp =CreateNod(d); nod *t =নতুন নড; t =root; if(root ==NULL) root =tmp; else { while(t !=NULL) { if(t->data r==NULL) { t->r =tmp; বিরতি } t =t->r; } else if(t->ডেটা> d) { if(t->l ==NULL) { t->l=tmp; বিরতি } t =t->l; } } } রিটার্ন রুট;} void AssignRank(nod *root) //নোডগুলিতে র‌্যাঙ্ক বরাদ্দ করুন{ if(root->l!=NULL) AssignRank(root->l); root->র্যাঙ্ক =cnt; cnt++; if(root->r!=NULL) AssignRank(root->r);}int Select(nod* root, int k) //kth বৃহত্তম উপাদান নির্বাচন করুন{ if(root->rank ==k) রুট-> রিটার্ন করুন তথ্য অন্যথায় যদি(রুট->র্যাঙ্ক> কে) রিটার্ন সিলেক্ট (রুট->এল, কে); অন্যথায় Select(root->r, k);} void display(nod *root) // ট্রি প্রদর্শন করুন। if(root->l !=NULL) প্রদর্শন(root->l); cout<<"\n ডেটা:"<ডেটা<<" র‌্যাঙ্ক:"<র্যাঙ্ক; if(root->r!=NULL) display(root->r);}int main() { char c; int n, i, k, a[10]={4,7,6,1,10,3,2,15,16,20}; nod *root =নতুন নড; root =NULL; for(i =0; i <10; i++) root =Insert(root, a[i]); // ফাংশন insert() cout কল করুন<<"k এর মান লিখুন:"; cin>>k; অ্যাসাইন র‌্যাঙ্ক(রুট); // Assignrank() cout ফাংশনটিকে কল করুন<<"\nপ্রতিটি নোডের সাথে যুক্ত র‍্যাঙ্ক:-"; প্রদর্শন (মূল); // ফাংশন ডিসপ্লে() cout<<"কে কল করুন\n\nkth বৃহত্তম উপাদান হল:"< 

আউটপুট

প্রতিটি নোডের সাথে যুক্ত k:7 র‌্যাঙ্কের মান লিখুন:-ডেটা:1 র‌্যাঙ্ক:0ডাটা:2 র‌্যাঙ্ক:1ডাটা:3 র‌্যাঙ্ক:2ডাটা:4 র‌্যাঙ্ক:3ডাটা:6 র‌্যাঙ্ক:4ডাটা:7 র‌্যাঙ্ক:5ডাটা:10 র‌্যাঙ্ক :6 ডেটা:15 র‌্যাঙ্ক:7 ডেটা:16 র‌্যাঙ্ক:8 ডেটা:20 র‌্যাঙ্ক:9 ​​kth বৃহত্তম উপাদান হল:4

  1. C++ ব্যবহার করে প্রদত্ত সংখ্যার ঢাল খুঁজুন

  2. C++ এ প্রদত্ত সংখ্যা N-এর ভাজকগুলির মধ্যে সবচেয়ে বড় ভাল সংখ্যাটি খুঁজুন

  3. C++ প্রোগ্রাম প্রদত্ত ডিজিটাল রুট সহ একটি পরিসরে সংখ্যা খুঁজে বের করতে

  4. C++ ব্যবহার করে প্রদত্ত বিন্দু থেকে সম্ভাব্য চতুর্ভুজের সংখ্যা নির্ণয় করুন