คิวลำดับความสำคัญเป็นประเภทข้อมูลนามธรรมสำหรับการจัดเก็บคอลเลกชันขององค์ประกอบที่มีลำดับความสำคัญที่สนับสนุนการแทรกและการลบองค์ประกอบตามลำดับความสำคัญ นั่นคือองค์ประกอบที่มีลำดับความสำคัญเป็นอันดับแรกสามารถลบออกได้ตลอดเวลา คิวลำดับความสำคัญไม่จัดเก็บองค์ประกอบในลักษณะเชิงเส้นตามตำแหน่งขององค์ประกอบ เช่น ในกอง คิว รายการ ฯลฯ คิวลำดับความสำคัญ ADT (ประเภทข้อมูลนามธรรม) จะจัดเก็บองค์ประกอบตามลำดับความสำคัญ
Priority Queue รองรับฟังก์ชันต่อไปนี้ -
ขนาด() − มันถูกใช้ในการคำนวณขนาดของลำดับความสำคัญในขณะที่ส่งกลับจำนวนขององค์ประกอบในนั้น
ว่างเปล่า() − คืนค่า จริง หากคิวลำดับความสำคัญว่างเปล่าและเป็นเท็จ มิฉะนั้น
แทรก (องค์ประกอบ) - ใช้เพื่อแทรกองค์ประกอบใหม่ลงในคิวลำดับความสำคัญ
นาที() − จะส่งคืนองค์ประกอบที่มีค่าคีย์ที่เกี่ยวข้องน้อยที่สุดและแสดงข้อความแสดงข้อผิดพลาดหาก Priority Queue ว่างเปล่า
removeMin() − จะลบองค์ประกอบที่อ้างอิงโดยฟังก์ชัน min()
ภารกิจคือการใช้แนวคิดของคิวลำดับความสำคัญของคู่ใน C ++ เรียงลำดับโดยคนแรก
เราสามารถแก้ปัญหาในรูปแบบกองที่คล้ายกัน มีสองวิธีในการแก้ปัญหา
- ลำดับความสำคัญสูงสุดหรือฮีปสูงสุด
- ลำดับความสำคัญขั้นต่ำหรือฮีปขั้นต่ำ
ฮีปเป็นโครงสร้างต้นไม้ที่โหนดถูกจัดเรียงตามลำดับเฉพาะ ฮีปมีสองประเภทคือ Min heap และ Max heap ในฮีปขั้นต่ำ โหนดรูทหรือโหนดหลักมีขนาดเล็กกว่าโหนดย่อย ในขณะที่ฮีปสูงสุด โหนดรูทหรือโหนดหลักจะใหญ่กว่าโหนดย่อย
ตัวอย่าง
Input: priorityq.push(make_pair(18, 200)) Input: priorityq.push(make_pair(18, 200)) priorityq.push(make_pair(29, 100)) priorityq.push(make_pair(11, 400)) Output: 29 100 Input: priorityq.push(make_pair(10, 200)) priorityq.push(make_pair(20, 100)) priorityq.push(make_pair(19, 400)) Output: 20 100 Through Max priority (Max heap)
อัลกอริทึม
Start Step 1-> In main function() Define priority_queue<pair<int, int> > priorityq Call priorityq.push(make_pair(18, 200)) Call priorityq.push(make_pair(29, 100)) Call priorityq.push(make_pair(11, 400)) Set pair<int, int> top = priorityq.top() Print top.first and top.second Stop
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; // main program int main() { priority_queue<pair<int, int> > priorityq; priorityq.push(make_pair(18, 200)); priorityq.push(make_pair(29, 100)); priorityq.push(make_pair(11, 400)); pair<int, int> top = priorityq.top(); cout << top.first << " " << top.second; return 0; }
ผลลัพธ์
29 100
ผ่านลำดับความสำคัญขั้นต่ำ (ฮีปขั้นต่ำ)
อัลกอริทึม
Start Step 1-> In main function() Define priority_queue<pair<int, int> > priorityq Call pq.push(make_pair(10, 200)) Call pq.push(make_pair(20, 100)) Call pq.push(make_pair(15, 400)) Set pair<int, int> top = pq.top() Print top.first and top.second Stop
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; typedef pair<int, int> pi; // main program int main() { priority_queue<pi, vector<pi>, greater<pi> > pq; pq.push(make_pair(10, 200)); pq.push(make_pair(20, 100)); pq.push(make_pair(15, 400)); pair<int, int> top = pq.top(); cout << top.first << " " << top.second; return 0; }
ผลลัพธ์
10 200