Priority Queue: কনসেপ্ট ও কাস্টম ইমপ্লিমেন্টেশন
Priority Queue হলো একটি অ্যাবস্ট্রাক্ট ডেটা টাইপ যা রেগুলার কিউর মতোই কিন্তু প্রতিটি এলিমেন্টের সাথে একটি Priority (প্রায়োরিটি) যুক্ত থাকে। উচ্চ প্রায়োরিটivät্ত্বালা এলিমেন্টটি প্রথমে সার্ভ/ডিকিউ হয়। সমান প্রায়োরিটির কেসে FIFO অর্ডার মেনটেইন হয়।
Priority Queue Class Structure
class PriorityQueue {
constructor(maxSize = 10) {
// ডিফল্ট ম্যাক্স সাইজ ১০
if (isNaN(maxSize)) maxSize = 10;
this.maxSize = maxSize;
// ইন্টারন্যাল স্টোরেজ (সর্টেড অ্যারে)
this.container = [];
}
// Helper: Display contents
display() {
console.log(this.container);
}
// Check if empty
isEmpty() {
return this.container.length === 0;
}
// Check if full
isFull() {
return this.container.length >= this.maxSize;
}
// Element Structure (Inner Class)
// প্রতিটি এলিমেন্ট: { data, priority }
}
PriorityQueue.prototype.Element = class {
constructor(data, priority) {
this.data = data;
this.priority = priority;
}
};
Helper Methods ব্যাখ্যা
- isEmpty():
container.length === 0— কিউ খালি কিনা চেক করে। ডিকিউ/পিক-এর আগে কল করতে হয়। - isFull():
container.length >= maxSize— ক্যাপাসিটি লিমিট চেক করে। এনকিউ-এর আগে কল করতে হয়। - এই দুটি মেথড বাকি অপারেশনগুলোর প্রি-কন্ডিশন হিসেবে কাজ করে।
পরবর্তী স্টেপ: Core Methods ইমপ্লিমেন্ট করা
এই বেস ক্লাসের ওপর ভিত্তি করে নিচের মেথডগুলো ইমপ্লিমেন্ট করা হবে:
enqueue(data, priority)— প্রায়োরিটি দিয়ে সর্টেড ইনসারশন।dequeue()— সর্বোচ্চ প্রায়োরিটিওয়ালা এলিমেন্ট রিমুভ।peek()— সর্বোচ্চ প্রায়োরিটিওয়ালা এলিমেন্ট দেখানো (রিমুভ নেই)।clear()— সব এলিমেন্ট মুছে ফেলা।size()— বর্তমান এলিমেন্ট কাউন্ট।
বাস্তব দুনিয়ার উদাহরণ
- ER (Emergency Room): ক্রিটিক্যাল পেশেন্টকে আগে চিকিৎসা (High Priority)।
- CPU Scheduling: হাই-প্রায়োরিটি প্রসেস আগে এক্সিকিউট।
- Network QoS: VoIP প্যাকেট > File Download প্যাকেট।
- Game AI: Threat Level অনুযায়ী টার্গেট সিলেকশন।
- Task Scheduler: Cron jobs with priority।
Implementation Approaches Comparison
| Approach | Enqueue | Dequeue | Peek | Complexity |
|---|---|---|---|---|
| Sorted Array (Current) | O(n) | O(1) | O(1) | সিম্পল, স্মল ডেটার জন্য OK |
| Unsorted Array | O(1) | O(n) | O(n) | ডিকিউ ফ্রিকোয়েন্ট হলে খারাপ |
| Binary Heap | O(log n) | O(log n) | O(1) | Best for Production |
| Linked List (Sorted) | O(n) | O(1) | O(1) | মেমরি ওভারহেড বেশি |
রিকমেন্ডেশন: লার্নিং/স্মল প্রজেক্টের জন্য Sorted Array OK। প্রোডাকশন/বড় ডেটার জন্য Binary Heap ব্যবহার করুন।