A Min-Heap is a Data Structure with the following properties.
- It is a complete Complete Binary Tree.
- The value of the root node must be the smallest among all its descendant nodes and the same thing must be done for its left and right sub-tree also.
The elements of a heap can be mapped into an array using the following rules:
If a node is stored at index k:
- Left child is stored at index 2k + 1 (for 0-based indexing) or 2k (for 1-based indexing).
- Right child is stored at index 2k + 2 (for 0-based indexing) or 2k + 1 (for 1-based indexing).
Example of Min Heap
Tree Representation:
5 13
/ \ / \
10 15 16 31
/ / \ / \
30 41 51 100 41
Array Representation:
For the first tree:
[5, 10, 15, 30]
For the second tree:
[13, 16, 31, 41, 51, 100, 41]
Min Heap Representation as an Array
Since a Min Heap is a Complete Binary Tree, it is commonly represented using an array. In an array representation:
- The root element is stored at
Arr[0]
. - For any i-th node (at
Arr[i]
):- Parent Node →
Arr[(i - 1) / 2]
- Left Child →
Arr[(2 * i) + 1]
- Right Child →
Arr[(2 * i) + 2]
Operations on Min Heap
- getMin(): It returns the root element of Min Heap. Time Complexity of this operation is O(1).
- extractMin(): Removes the minimum element from MinHeap. Time Complexity of this Operation is O(Log n) as this operation needs to maintain the heap property (by calling heapify()) after removing root.
- insert(): Inserting a new key takes O(Log n) time. We add a new key at the end of the tree. If new key is larger than its parent, then we don’t need to do anything. Otherwise, we need to traverse up to fix the violated heap property.
Implementation of Min Heap in Python
Please refer Min-Heap for details.
Python
class MinHeap:
def __init__(self):
self.a = []
"""Insert a new element into the Min Heap."""
def insert(self, val):
self.a.append(val)
i = len(self.a) - 1
while i > 0 and self.a[(i - 1) // 2] > self.a[i]:
self.a[i], self.a[(i - 1) // 2] = self.a[(i - 1) // 2], self.a[i]
i = (i - 1) // 2
"""Delete a specific element from the Min Heap."""
def delete(self, value):
i = -1
for j in range(len(self.a)):
if self.a[j] == value:
i = j
break
if i == -1:
return
self.a[i] = self.a[-1]
self.a.pop()
while True:
left = 2 * i + 1
right = 2 * i + 2
smallest = i
if left < len(self.a) and self.a[left] < self.a[smallest]:
smallest = left
if right < len(self.a) and self.a[right] < self.a[smallest]:
smallest = right
if smallest != i:
self.a[i], self.a[smallest] = self.a[smallest], self.a[i]
i = smallest
else:
break
"""Heapify function to maintain the heap property."""
def minHeapify(self, i, n):
smallest = i
left = 2 * i + 1
right = 2 * i + 2
if left < n and self.a[left] < self.a[smallest]:
smallest = left
if right < n and self.a[right] < self.a[smallest]:
smallest = right
if smallest != i:
self.a[i], self.a[smallest] = self.a[smallest], self.a[i]
self.minHeapify(smallest, n)
"""Search for an element in the Min Heap."""
def search(self, element):
for j in self.a:
if j == element:
return True
return False
def getMin(self):
return self.a[0] if self.a else None
def printHeap(self):
print("Min Heap:", self.a)
# Example Usage
if __name__ == "__main__":
h = MinHeap()
values = [10, 7, 11, 5, 4, 13]
for value in values:
h.insert(value)
h.printHeap()
h.delete(7)
print("Heap after deleting 7:", h.a)
print("Searching for 10 in heap:", "Found" if h.search(10) else "Not Found")
print("Minimum element in heap:", h.getMin())
OutputMin Heap: [4, 5, 11, 10, 7, 13]
Heap after deleting 7: [4, 5, 11, 10, 13]
Searching for 10 in heap: Found
Minimum element in heap: 4
Implementation of Min Heap Using Python’s heapq Library
Python’s heapq module implements a Min Heap by default.
Python
# Python3 program to demonstrate working of heapq
from heapq import heapify, heappush, heappop
# Creating empty heap
heap = []
heapify(heap)
# Adding items to the heap using heappush function
heappush(heap, 10)
heappush(heap, 30)
heappush(heap, 20)
heappush(heap, 400)
# printing the value of minimum element
print("Head value of heap : "+str(heap[0]))
# printing the elements of the heap
print("The heap elements : ")
for i in heap:
print(i, end = ' ')
print("\n")
element = heappop(heap)
# printing the elements of the heap
print("The heap elements : ")
for i in heap:
print(i, end = ' ')
OutputHead value of heap : 10
The heap elements :
10 30 20 400
The heap elements :
20 30 400
Implementation of Min Heap using queue.PriorityQueue
Please refer queue.PriorityQueue for details.
Python
from queue import PriorityQueue
q = PriorityQueue()
# insert into queue
q.put(10)
q.put(20)
q.put(5)
# remove and return
# lowest priority item
print(q.get())
print(q.get())
# check queue size
print('Items in queue :', q.qsize())
# check if queue is empty
print('Is queue empty :', q.empty())
# check if queue is full
print('Is queue full :', q.full())
Output5
10
Items in queue : 1
Is queue empty : False
Is queue full : False
Similar Reads
max() and min() in Python This article brings you a very interesting and lesser-known function of Python, namely max() and min(). Now when compared to their C++ counterpart, which only allows two arguments, that too strictly being float, int or char, these functions are not only limited to 2 elements, but can hold many eleme
3 min read
What is Min Heap? Min Heap is a type of binary heap where the key at the root must be the minimum among all keys present in the binary heap. The same property must be recursively true for all nodes in the binary tree. Min Heap Definition:Min Heap is a complete binary tree, where value of each node is smaller than or
3 min read
Python min() Function Python min() function returns the smallest value from a set of values or the smallest item in an iterable passed as its parameter. It's useful when you need to quickly determine the minimum value from a group of numbers or objects. For example:Pythona = [23,25,65,21,98] print(min(a)) b = ["banana",
4 min read
sys.maxint in Python In Python 2, sys.maxint refers to the maximum value an integer can hold on a given platform. This value is:2³¹ - 1 = 2147483647 on a 32-bit system2â¶Â³ - 1 = 9223372036854775807 on a 64-bit systemsys.maxint was typically used as a very large number in algorithms requiring an upper bound, like finding
3 min read
numpy.amin() in Python The numpy.amin() function returns minimum of an array or minimum along axis(if mentioned). Syntax : numpy.amin(arr, axis = None, out = None, keepdims = <class numpy._globals._NoValue>) Parameters : arr : [array_like]input dataaxis : [int or tuples of int]axis along which we want the min value.
2 min read
numpy.clip() in Python numpy.clip() function is used to Clip (limit) the values in an array. Given an interval, values outside the interval are clipped to the interval edges. For example, if an interval of [0, 1] is specified, values smaller than 0 become 0, and values larger than 1 become 1. Syntax : numpy.clip(a, a_min,
2 min read
Python nmaxmin Module A nmaxmin module is that library of Python which helps you to find the nth maximum number and nth minimum number in a given list. It directly returns either the maximum number or minimum number with respect to the given index (n). Here the given list must not be in sorted order as it will traverse t
2 min read
Python | Decimal min() method Decimal#min() : min() is a Decimal class method which compares the two Decimal values and return the min of two. Syntax: Decimal.min() Parameter: Decimal values Return: the min of two. Code #1 : Example for min() method Python3 # Python Program explaining # min() method # loading decimal library fro
2 min read
numpy.argmin() in Python The numpy.argmin() method returns indices of the min element of the array in a particular axis. Syntax : numpy.argmin(array, axis = None, out = None) Parameters : array : Input array to work on axis : [int, optional]Along a specified axis like 0 or 1 out : [array optional]Provides a feature to inser
2 min read
Use of min() and max() in Python Prerequisite: min() max() in Python Let's see some interesting facts about min() and max() function. These functions are used to compute the maximum and minimum of the values as passed in its argument. or it gives the lexicographically largest value and lexicographically smallest value respectively,
2 min read