সমস্যা বিবৃতি
প্রদত্ত যে পূর্ণসংখ্যাগুলি একটি ডেটা স্ট্রিম থেকে পড়া হয়। একটি দক্ষ উপায়ে পড়ার জন্য উপাদানগুলির মধ্যমা খুঁজুন
স্ট্রিমের ১ম উপাদান পড়ার পর - 10 -> মধ্যমা - 10
স্ট্রিমের ২য় উপাদান পড়ার পর - 10, 20 -> মধ্যমা - 15
স্ট্রিমের 3য় উপাদান পড়ার পর - 10, 20, 30 -> মধ্যমা - 20, তাই...
অ্যালগরিদম
<পূর্ব>1. কার্যকরী মধ্যকার থেকে কম উপাদানগুলিকে উপস্থাপন করতে বাম দিকে একটি সর্বোচ্চ হিপ ব্যবহার করুন এবং কার্যকরী মধ্যক 2 থেকে বড় উপাদানগুলিকে উপস্থাপন করতে ডানদিকে একটি মিনিমস্তিপ ব্যবহার করুন৷ একটি আগত উপাদান প্রক্রিয়াকরণের পরে, স্তূপের মধ্যে উপাদানগুলির সংখ্যা 1 উপাদান3 দ্বারা সর্বাধিক পৃথক হয়৷ যখন উভয় হিপে একই সংখ্যক উপাদান থাকে, তখন আমরা কার্যকরী মধ্যকার 4 হিসাবে হিপস রুট ডেটার গড় বাছাই করি। যখন স্তূপগুলি ভারসাম্যপূর্ণ না হয়, তখন আমরা আরও উপাদান ধারণকারী স্তূপের মূল থেকে কার্যকর মধ্যক নির্বাচন করি।উদাহরণ
#includeনেমস্পেস ব্যবহার করে std;#define MAX_HEAP_SIZE (128)#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])inline void Exch(int &a, int &b){ int aux =a; a =b; b =aux;} bool Greater(int a, int b){ return a> b;} bool Smaller(int a, int b){ রিটার্ন a =0 ) { সর্বোচ্চ =A[0]; } সর্বোচ্চ রিটার্ন; } int count(){ রিটার্ন heapSize + 1; } void heapify(int i){ int p =parent(i); if( p> =0 &&comp(A[i], A[p]) ) { Exch(A[i], A[p]); heapify(p); } } int deleteTop(){ int del =-1; if( heapSize> -1) { del =A[0]; Exch(A[0], A[heapSize]); গাদা আকার--; heapify(অভিভাবক(heapSize+1)); } রিটার্ন ডেল; } bool insertHelper(int কী){ bool ret =মিথ্যা; যদি ( heapSize আউটপুট
যখন আপনি উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করেন। এটি নিম্নলিখিত আউটপুট −
তৈরি করেফলাফল:101520