Priority Queue: ধারণা ও কনসেপ্ট
Priority Queue (প্রায়োরিটি কিউ) হলো একটি অ্যাবস্ট্রাক্ট ডেটা টাইপ যা রেগুলার কিউ বা স্ট্যাকের মতোই, কিন্তু এখানে প্রতিটি এলিমেন্টের সাথে একটি "Priority" (প্রায়োরিটি) যুক্ত থাকে।
কীভাবে কাজ করে?
- উচ্চ প্রায়োরিটি = প্রথম সার্ভিস: যেই এলিমেন্টের প্রায়োরিটি বেশি, সেটিই প্রথমে ডিকিউ/প্রসেস হয়।
- সমান প্রায়োরিটি = FIFO: যদি দুটি এলিমেন্টের প্রায়োরিটি সমান হয়, তবে যেটি আগে ইনসার্ট হয়েছিল (First-In) সেটিই আগে বের হবে (First-Out)।
রিয়েল-ওয়ার্ল্ডAnalogy
হাসপাতালের ইমার্জেন্সি রুম (ER):
- সাধারণ রোগী (Low Priority) -> অপেক্ষা করে।
- হৃদরোগী/অ্যাকসিডেন্ট ভিক্টিম (High Priority) -> তত্ক্ষণাৎ চিকিৎসা।
- এখানে "Arrival Time" না, "Severity" প্রায়োরিটি নির্ধারণ করে।
ইমপ্লিমেন্টেশন পদ্ধতিসমূহ
- Array (Sorted): ইনসারশন সর্ট লজিক — O(n) Enqueue, O(1) Dequeue।
- Array (Unsorted): O(1) Enqueue, O(n) Dequeue (লিনিয়ার সার্চ)।
- Binary Heap (Recommended): O(log n) Enqueue & Dequeue — সবচেয়ে কার্যকর।
- Linked List (Sorted): O(n) Enqueue, O(1) Dequeue।
- Balanced BST: O(log n) সব অপারেশন।
জাভাস্ক্রিপ্টে কোনটি ব্যবহার করবেন?
| পরিস্থিতি | Recommended Approach |
|---|---|
| লার্নিং / অ্যালগরিদম প্র্যাকটিস | Sorted Array (সিম্পল, বোঝা সহজ) |
| স্মল ডেটা (< 1000 এলিমেন্ট) | Sorted Array বা Native Array + Sort |
| প্রোডাকশন / বড় ডেটা / হাই ফ্রিকোয়েন্সি | Binary Heap (npm: priorityqueue, heap, heap-js) |
| TypeScript + Type Safety | Generic PriorityQueue Class with Heap |
Priority Queue Operations Summary
| অপারেশন | বর্ণনা |
|---|---|
enqueue(data, priority) |
প্রায়োরিটি দিয়ে এলিমেন্ট যোগ |
dequeue() |
সর্বোচ্চ প্রায়োরিটিওয়ালা এলিমেন্ট সরিয়ে রিটার্ন |
peek() |
সর্বোচ্চ প্রায়োরিটিওয়ালা এলিমেন্ট দেখা (রিমুভ নেই) |
isEmpty() |
কিউ খালি কিনা |
isFull() |
কিউ ফুল কিনা (ক্যাপাসিটি লিমিট থাকলে) |
clear() |
সব এলিমেন্ট মুছে ফেলা |
size() |
বর্তমান এলিমেন্ট সংখ্যা |
JavaScript-এ নেটিভ Priority Queue নেই
JavaScript-এ বিল্ট-ইন PriorityQueue ক্লাস নেই। আপনাকে কাস্টম ইমপ্লিমেন্ট করতে হবে বা লাইব্রেরি ব্যবহার করতে হবে।
Quick Start with Heap (Production Ready)
// npm install heap-js
import { Heap } from 'heap-js';
const priorityQueue = new Heap((a, b) => b.priority - a.priority); // Max-Heap
priorityQueue.push({ task: "Email", priority: 1 });
priorityQueue.push({ task: "Server Crash", priority: 10 });
priorityQueue.push({ task: "Meeting", priority: 5 });
console.log(priorityQueue.pop()); // { task: 'Server Crash', priority: 10 }
console.log(priorityQueue.peek()); // { task: 'Meeting', priority: 5 }