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

জাভাস্ক্রিপ্টে PriorityQueue ক্লাসের সম্পূর্ণ ইমপ্লিমেন্টেশন


PriorityQueue Class: সম্পূর্ণ ইমপ্লিমেন্টেশন

Priority Queue হলো একটি কিউ যেখানে প্রতিটি এলিমেন্টের একটি প্রায়োরিটি (priority) থাকে। উচ্চ প্রায়োরিটivät্ত্বाला এলিমেন্টটি প্রথমে ডিকিউ হয়। একই প্রায়োরিটির 엘িমেন্টের জন্য FIFO মেনটেইন হয়।

সম্পূর্ণ PriorityQueue Class

class PriorityQueue {
  constructor(maxSize = 10) {
    this.maxSize = maxSize;
    this.container = [];
  }

  // Helper: Display
  display() {
    console.log(this.container);
  }

  // Checks
  isEmpty() {
    return this.container.length === 0;
  }

  isFull() {
    return this.container.length >= this.maxSize;
  }

  // Enqueue with Priority (Insertion Sort Logic)
  enqueue(data, priority) {
    if (this.isFull()) {
      console.log("Queue Overflow!");
      return false;
    }

    const newElement = new PriorityQueue.Element(data, priority);
    let added = false;

    // সর্টেড পজিশন খুঁজে ইনসার্ট (Insertion Sort style)
    for (let i = 0; i < this.container.length; i++) {
      // Lower priority number = Higher priority (1 > 2 > 3)
      // বা Higher number = Higher priority — ডিজাইন অনুযায়ী
      // এখানে: Higher number = Higher priority
      if (newElement.priority > this.container[i].priority) {
        this.container.splice(i, 0, newElement);
        added = true;
        break;
      }
    }

    if (!added) {
      this.container.push(newElement); // সবচেয়ে কম প্রায়োরিটি -> শেষে
    }
    return true;
  }

  // Dequeue (Highest Priority Element)
  dequeue() {
    if (this.isEmpty()) {
      console.log("Queue Underflow!");
      return undefined;
    }
    // Highest priority ở শেষে (sort order অনুযায়ী)
    return this.container.pop().data;
  }

  // Peek (Highest Priority without remove)
  peek() {
    if (this.isEmpty()) {
      console.log("Queue Underflow!");
      return undefined;
    }
    return this.container[this.container.length - 1].data;
  }

  // Clear all
  clear() {
    this.container = [];
  }

  // Size
  size() {
    return this.container.length;
  }
}

// Inner Element Class
PriorityQueue.Element = class {
  constructor(data, priority) {
    this.data = data;
    this.priority = priority;
  }
};

ব্যবহারের উদাহরণ

const pq = new PriorityQueue(5);

pq.enqueue("Low Priority Task", 1);
pq.enqueue("High Priority Task", 10);
pq.enqueue("Medium Priority Task", 5);
pq.enqueue("Critical Task", 100);

pq.display();
// [
//   { data: 'Low Priority Task', priority: 1 },
//   { data: 'Medium Priority Task', priority: 5 },
//   { data: 'High Priority Task', priority: 10 },
//   { data: 'Critical Task', priority: 100 }
// ]

console.log("Peek (Highest):", pq.peek()); // "Critical Task"
console.log("Dequeue:", pq.dequeue());     // "Critical Task"
console.log("Dequeue:", pq.dequeue());     // "High Priority Task"
pq.display(); // Remaining: Low, Medium

নোট: প্রায়োরিটি কনভেনশন

উপরের ইমপ্লিমেন্টেশনে Higher Number = Higher Priority ধরা হয়েছে। আপনি চাইলে উল্টা (priority < container[i].priority) করতে পারেন। কনসিস্টেন্সি মেনটেইন করুন।

Time Complexity

অপারেশন Array-based (Sorted Insert) Heap-based (Optimal)
Enqueue O(n) — লিনিয়ার সার্চ + splice O(log n)
Dequeue O(1) — pop() O(log n)
Peek O(1) O(1)
Space O(n) O(n)

প্রো টিপ: বড় ডেটাসেটের জন্য Binary Heap ব্যবহার করুন (O(log n) enqueue/dequeue)। JavaScript-এ priorityqueue npm প্যাকেজ বা কাস্টম হিপ ইমপ্লিমেন্টেশন ব্যবহার করা উচিত।

  1. জাভাস্ক্রিপ্টে lastIndex প্রপার্টি

  2. জাভাস্ক্রিপ্টে continue স্টেটমেন্ট

  3. জাভাস্ক্রিপ্টে new.target

  4. C#-এ Object ক্লাস: বেস ক্লাস এবং এর মেথডসমূহ