প্রায়োরিটি কিউ কী?
প্রায়োরিটি কিউ (Priority Queue) হলো একটি ডেটা স্ট্রাকচার যেখানে প্রতিটি এলিমেন্টের একটি প্রায়োরিটি (অগ্রাধিকার) থাকে। সাধারণ কিউ-তে FIFO (First-In-First-Out) নিয়ম মেনে চলা হয়, কিন্তু প্রায়োরিটি কিউ-তে এলিমেন্টগুলো তাদের প্রায়োরিটি অনুযায়ী সাজানো থাকে—সর্বোচ্চ প্রায়োরিটিওয়ালা এলিমেন্ট প্রথমে বের হয়।
পাইথনে প্রায়োরিটি কিউ বাস্তবায়ন করার দুটি পদ্ধতি
- queue.PriorityQueue ক্লাস (থ্রেড-সেফ)
- heapq মডিউল (তেজ ও হালকা)
নোট: লিস্ট ব্যবহার করে প্রায়োরিটি কিউ বানানো সম্ভব কিন্তু বড় ডেটার জন্য এফিশিয়েন্ট নয়।
পদ্ধতি ১: queue.PriorityQueue ব্যবহার
from queue import PriorityQueue
ticket_holders = PriorityQueue()
ticket_holders.put((3, 'Paul'))
ticket_holders.put((1, 'Miles'))
ticket_holders.put((2, 'Dani'))
while not ticket_holders.empty():
item = ticket_holders.get()
print(item)
আউটপুট:
(1, 'Miles')
(2, 'Dani')
(3, 'Paul')
এখানে টাপেলের প্রথম মান (১, ২, ৩) প্রায়োরিটি নির্দেশ করছে। কম সংখ্যা = উচ্চ প্রায়োরিটি।
পদ্ধতি ২: heapq মডিউল ব্যবহার
import heapq
ticket_holders = []
heapq.heappush(ticket_holders, (3, 'Paul'))
heapq.heappush(ticket_holders, (1, 'Miles'))
heapq.heappush(ticket_holders, (2, 'Dani'))
while ticket_holders:
item = heapq.heappop(ticket_holders)
print(item)
আউটপুট: (সমান আউটপুট)
heappush() দিয়ে এলিমেন্ট যোগ করা হয়, heappop() দিয়ে সর্বনিম্ন প্রায়োরিটিওয়ালা এলিমেন্ট বের করা হয়।
কেন লিস্ট ব্যবহার করা উচিত নয়?
লিস্টে প্রায়োরিটি কিউ বানালে প্রতিবার সর্ট করতে হয় (O(n log n)), যা বড় ডেটার জন্য স্লো। PriorityQueue ও heapq O(log n) টাইমে ইনসার্ট ও রিমুভ করে।
নিষ্কর্ষ
পাইথনে প্রায়োরিটি কিউ বাস্তবায়নের জন্য queue.PriorityQueue (থ্রেড-সেফ অ্যাপ্লিকেশনের জন্য) এবং heapq (সাধারণ পারফরম্যান্সের জন্য) সেরা দুটি অপশন। আপনার প্রয়োজন অনুযায়ী যেকোনো একটি বেছে নিন।