Skip to content

Commit 0dcf92d

Browse files
authored
Update README.md
1 parent de6676a commit 0dcf92d

File tree

1 file changed

+51
-0
lines changed
  • 19 - Heap Data Structure Problems/02 - Example - STL

1 file changed

+51
-0
lines changed

19 - Heap Data Structure Problems/02 - Example - STL/README.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,57 @@
22

33
In C++, the Standard Template Library (STL) provides an efficient way to implement heaps (priority queues) using the `priority_queue` container. This makes it easy to create both max-heaps and min-heaps without having to implement the heap operations manually. Let’s go over the code you provided and explain each part, as well as the specifics of using STL for heaps.
44

5+
## Priority Queue
6+
A priority queue is a specialized data structure that operates similarly to a regular queue but with an added feature: each element has a "priority" associated with it. In a priority queue, elements are removed based on priority rather than their order of insertion.
7+
8+
### Key Characteristics of a Priority Queue:
9+
1. **Priority-Based Access**: The element with the highest priority is always at the front of the queue and will be the next to be removed, regardless of when it was added.
10+
2. **Dynamic Reordering**: When elements are added, the priority queue automatically rearranges to keep the highest priority element at the front.
11+
3. **Different Types of Heaps**: The two most common types of priority queues are:
12+
- **Max-Heap**: The element with the highest priority (maximum value) is at the front.
13+
- **Min-Heap**: The element with the lowest priority (minimum value) is at the front.
14+
15+
### How a Priority Queue Works:
16+
Priority queues are often implemented using a data structure called a **heap** (specifically, a binary heap), as it provides efficient access to the maximum or minimum element and allows for efficient insertions and deletions.
17+
18+
### Priority Queue Operations and Their Complexity:
19+
1. **Insertion (`push`)**: Adding a new element to the queue. In a binary heap, this operation has a time complexity of \(O(\log n)\) because it might require "heapifying" the structure to maintain the priority order.
20+
21+
2. **Accessing the Top Element (`top`)**: Accessing the highest (or lowest) priority element. In a priority queue, this is the element at the root of the heap, and this operation has a time complexity of \(O(1)\) since the root is always directly accessible.
22+
23+
3. **Removing the Top Element (`pop`)**: Removing the highest (or lowest) priority element. In a binary heap, this operation has a time complexity of \(O(\log n)\) because after removing the root, the structure must be adjusted to restore the heap property.
24+
25+
4. **Checking if Empty (`empty`)**: Checking whether the queue contains any elements, with a time complexity of \(O(1)\).
26+
27+
5. **Getting Size (`size`)**: Retrieving the number of elements in the queue, also with a time complexity of \(O(1)\).
28+
29+
### Example of Priority Queue Operations:
30+
Let’s illustrate priority queue operations using a max-heap and min-heap:
31+
32+
1. **Max-Heap Priority Queue**
33+
- Suppose you add elements `[4, 2, 5, 3]` to a max-heap.
34+
- After each insertion, the priority queue will ensure the element with the largest value is at the root.
35+
- Accessing the top element (`top`) will return `5`, the maximum value.
36+
- Removing the top element (`pop`) will remove `5`, and `4` will then become the top element.
37+
38+
2. **Min-Heap Priority Queue**
39+
- In a min-heap priority queue, the smallest element has the highest priority.
40+
- With elements `[4, 2, 5, 3]`, the heap will reorder itself to place `2` (the smallest) at the top.
41+
- Accessing the top element will return `2`.
42+
- Removing the top element will then return the next smallest element (`3`).
43+
44+
### Use Cases of Priority Queues:
45+
1. **Scheduling Systems**: Task scheduling in operating systems uses priority queues to decide which task to run next based on priority.
46+
2. **Dijkstra's Algorithm**: Used in finding the shortest path in graph algorithms, where nodes with the smallest tentative distance are processed first.
47+
3. **Event Simulation**: Events in simulations are scheduled based on time or priority.
48+
4. **Data Processing**: Situations where items with higher priority need to be processed first, such as in message or packet processing.
49+
50+
### Priority Queue in C++ STL:
51+
In C++, priority queues are implemented using the `priority_queue` container from the Standard Template Library (STL), which provides a convenient way to work with both max-heaps and min-heaps.
52+
53+
- **Max-Heap**: `priority_queue<int> max_pq;` (by default, the highest number has the highest priority).
54+
- **Min-Heap**: `priority_queue<int, vector<int>, greater<int>> min_pq;` (using `greater<int>` to give the lowest number the highest priority).
55+
556
## Source code
657
```cpp
758
#include <iostream>

0 commit comments

Comments
 (0)