কম্পিউটার টিউটোরিয়াল

জাভাস্ক্রিপ্টে Priority Queue তৈরি করা


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 ইমপ্লিমেন্ট করা

এই বেস ক্লাসের ওপর ভিত্তি করে নিচের মেথডগুলো ইমপ্লিমেন্ট করা হবে:

  1. enqueue(data, priority) — প্রায়োরিটি দিয়ে সর্টেড ইনসারশন।
  2. dequeue() — সর্বোচ্চ প্রায়োরিটিওয়ালা এলিমেন্ট রিমুভ।
  3. peek() — সর্বোচ্চ প্রায়োরিটিওয়ালা এলিমেন্ট দেখানো (রিমুভ নেই)।
  4. clear() — সব এলিমেন্ট মুছে ফেলা।
  5. 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 ব্যবহার করুন।

  1. জাভাস্ক্রিপ্টে অটো-রিসাইজ টেক্সট এরিয়া তৈরি করা

  2. জাভাস্ক্রিপ্ট ইমপোর্টে {} ব্রেসের ব্যবহার

  3. জাভাস্ক্রিপ্টে কিউ (Queue) বাস্তবায়ন

  4. C-তে লিংকড লিস্ট ব্যবহার করে প্রায়োরিটি কিউ (Priority Queue using Linked List)