"""
* Author: Mohamed Marzouk
* -------------------------------------
* Priority Queue [Binary Heap]
* -------------------------------------
* Notice:
    * Binary Heaps are not the only way to implement Priority Queue.
    * We can implement Priority Queue with heaps [Binary / Fibonacci / Binomial / Parirng / etc..] to get the best time complexity.
    * We could also implement it with unsorted list but this way would not give us the best time complexity.
* Time Complixty [Binary Heap]:
    * Building: O(N)
    * Inserting: O(log(N))
    * Dequeuing / Peaking [first element]: Big Theta(1)
    * Polling [delete]: Big Theta(log(N))
    * Merging: Big Theta(N)
* Used Language: Python
* Usage:
    * Dijkstra's algorithm
    * for implementing stack
    * for load balancing and interrupt handling in an operating system
    * for data compression in Huffman code
# Binary Heaps [Min Heap] Implementation Link: https://github.com/MohamedMarzouk23/Algorithms-and-Data-Structures/blob/master/Data%20Structures/Heap.py
"""
