Java Academy · पाठ

Ordered Processing के लिए PriorityQueue

task scheduling की परिस्थितियों में natural ordering और custom comparators के साथ PriorityQueue का उपयोग करें।

पाठ 4, कुल 4 में से13 चरण

Ordered Processing के लिए PriorityQueue, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

PriorityQueue क्या है?

PriorityQueue डिफ़ॉल्ट रूप से न्यूनतम-हीप है: प्राकृतिक क्रम में सबसे छोटा तत्व हमेशा अग्रभाग में रहता है। तत्वों को आंतरिक रूप से क्रमबद्ध नहीं किया जाता—केवल न्यूनतम तत्व के अग्रभाग में होने की गारंटी होती है।

import java.util.PriorityQueue;

PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(30);
pq.offer(10);
pq.offer(20);

System.out.println(pq.poll()); // 10 (min)
System.out.println(pq.poll()); // 20
System.out.println(pq.poll()); // 30

आंतरिक हीप संरचना

PriorityQueue एक सरणी में संग्रहीत द्विआधारी न्यूनतम-हीप का उपयोग करता है। i सूचकांक पर स्थित जनक हमेशा 2i+1 और 2i+2 पर स्थित संतानों से ≤ होता है। इससे offer/poll के लिए O(log n) और peek के लिए O(1) समय सुनिश्चित होता है।

उलटे Comparator के साथ अधिकतम-हीप

अधिकतम-हीप बनाने के लिए, जिसमें सबसे बड़ा तत्व पहले हो, Comparator.reverseOrder() पास करें:

PriorityQueue<Integer> maxPQ = new PriorityQueue<>(Comparator.reverseOrder());
maxPQ.offer(10);
maxPQ.offer(50);
maxPQ.offer(30);

System.out.println(maxPQ.poll()); // 50 (max)
System.out.println(maxPQ.poll()); // 30

कस्टम वस्तुओं के साथ PriorityQueue

अपने रिकॉर्ड या वर्गों को क्रमबद्ध करने के लिए Comparator का उपयोग करें:

record Job(String name, int priority) {}

PriorityQueue<Job> queue = new PriorityQueue<>(
    Comparator.comparingInt(Job::priority) // ascending priority
);
queue.offer(new Job("Backup", 5));
queue.offer(new Job("Alert", 1));
queue.offer(new Job("Report", 3));

System.out.println(queue.poll().name()); // Alert (priority 1)

Peek बनाम Poll

peek() अग्रभाग के तत्व को हटाए बिना लौटाता है। poll() उसे हटाकर लौटाता है। खाली कतार पर दोनों null लौटाते हैं, जबकि element()/remove() अपवाद उत्पन्न करते हैं।

PriorityQueue<String> pq = new PriorityQueue<>();
pq.offer("banana");
pq.offer("apple");

System.out.println(pq.peek()); // apple (not removed)
System.out.println(pq.peek()); // apple (still there)
System.out.println(pq.poll()); // apple (removed)
System.out.println(pq.peek()); // banana

Task के क्रम-निर्धारण का उदाहरण

PriorityQueue उन CPU क्रम-निर्धारण अनुकरणों के लिए आदर्श है, जहाँ कार्यों की प्राथमिकताएँ अलग-अलग होती हैं:

record Task(String name, int priority) {}

PriorityQueue<Task> scheduler = new PriorityQueue<>(
    Comparator.comparingInt(Task::priority).reversed() // highest first
);
scheduler.offer(new Task("Low", 1));
scheduler.offer(new Task("Critical", 10));
scheduler.offer(new Task("Normal", 5));

while (!scheduler.isEmpty()) {
    System.out.println("Processing: " + scheduler.poll().name());
}
// Critical, Normal, Low

K सबसे छोटे तत्व

सरणी को पूरी तरह क्रमबद्ध किए बिना K सबसे छोटे तत्व खोजने के लिए PriorityQueue एक पारंपरिक साधन है:

int[] nums = {7, 2, 5, 1, 9, 3, 8};
int k = 3;

PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int n : nums) pq.offer(n);

for (int i = 0; i < k; i++) {
    System.out.print(pq.poll() + " ");
}
// 1 2 3

अधिकतम-हीप के साथ K सबसे बड़े तत्व

वैकल्पिक रूप से, K सबसे बड़े तत्व खोजने के लिए पुनरावृत्ति के दौरान K आकार का न्यूनतम-हीप बनाए रखें:

int[] nums = {7, 2, 5, 1, 9, 3, 8};
int k = 3;

PriorityQueue<Integer> minHeap = new PriorityQueue<>();
for (int n : nums) {
    minHeap.offer(n);
    if (minHeap.size() > k) minHeap.poll(); // remove smallest
}
// minHeap now contains the 3 largest: [7, 8, 9]
System.out.println(minHeap); // order may vary

Dijkstra एल्गोरिदम का प्रारूप

Dijkstra का लघुतम-पथ एल्गोरिदम हमेशा सबसे कम लागत वाले, अभी तक न देखे गए node को पहले विस्तारित करने के लिए न्यूनतम-हीप पर निर्भर करता है:

record Entry(int node, int cost) {}

PriorityQueue<Entry> pq = new PriorityQueue<>(
    Comparator.comparingInt(Entry::cost)
);
pq.offer(new Entry(0, 0)); // start node, cost 0

while (!pq.isEmpty()) {
    Entry curr = pq.poll();
    System.out.println("Visit node " + curr.node() + " cost=" + curr.cost());
    // expand neighbors...
}

पुनरावृत्ति का कोई निश्चित क्रम नहीं

PriorityQueue पर पुनरावृत्ति करने पर तत्व प्राथमिकता-क्रम में नहीं मिलते—केवल poll() ऐसा करता है। क्रमबद्ध output के लिए प्रत्येक-तत्व लूप का उपयोग करने के बजाय बार-बार poll() करें।

PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.addAll(List.of(5,3,1,4,2));

// WRONG for sorted output:
for (int n : pq) System.out.print(n+" "); // unordered!

// CORRECT:
while (!pq.isEmpty()) System.out.print(pq.poll()+" "); // 1 2 3 4 5

प्रदर्शन सारांश

PriorityQueue संचालन की जटिलता:

  • offer(e): O(log n)
  • poll(): O(log n)
  • peek(): O(1)
  • समाहित(e): O(n)
  • हटाना(e): O(n)

यह थ्रेड-सुरक्षित नहीं है—समवर्ती अभिगम के लिए PriorityBlockingQueue का उपयोग करें।

त्वरित जाँच

प्रत्येक-तत्व लूप से PriorityQueue पर पुनरावृत्ति करने पर तत्वों के क्रम के बारे में क्या गारंटी मिलती है?

पुनरावलोकन: PriorityQueue

मुख्य बातें:

  • PriorityQueue एक न्यूनतम-हीप है: सबसे छोटा तत्व पहले poll() किया जाता है
  • अधिकतम-हीप के लिए Comparator.reverseOrder() का उपयोग करें
  • offer/poll के लिए O(log n), peek के लिए O(1)
  • पारंपरिक उपयोग: K-वाँ सबसे बड़ा/छोटा तत्व, Dijkstra, कार्य क्रम-निर्धारण
  • प्रत्येक-तत्व लूप प्राथमिकता-क्रम नहीं देता—poll() का उपयोग करें
शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
104
पाठ
374

अक्सर पूछे जाने वाले प्रश्न

क्या “Ordered Processing के लिए PriorityQueue” पाठ निःशुल्क है?

हाँ—“Ordered Processing के लिए PriorityQueue” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Ordered Processing के लिए PriorityQueue” में मैं क्या सीखूँगा?

task scheduling की परिस्थितियों में natural ordering और custom comparators के साथ PriorityQueue का उपयोग करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“Ordered Processing के लिए PriorityQueue” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. LinkedList की आंतरिक संरचना
  2. Deque Operations: Stack और Queue
  3. LinkedList बनाम ArrayList: समझौते
  4. Ordered Processing के लिए PriorityQueue
← Java Academy पर वापस जाएँ