/PyHeap

Primary LanguagePythonMIT LicenseMIT

PyHeap

  • Simple implementation of a heap that takes an arbitrary key for sorting.
  • By default, the heaps are minHeaps. (can be changed by setting isMin=False) in constructor

Example Usage:

from PyHeap import Heap

# instantiate an empty heap as follows
# insert elements using the insert method
heap = Heap()
for i in range(5):
    heap.insert(i)
print(heap.heap) # [0. 0, 1, 2, 3, 4]

# instantiate a heap with a predefined array or set
a = [i for i in range(5)]
heap = Heap(a)
print(heap.heap) # [0. 0, 1, 2, 3, 4]

You can perform common heap operations such as insert, getMin/deleteMin:

minVal = heap.getMin() # value is still present in the heap
minVal = heap.deleteMin() # value no longer present

You can also delete an arbitrary value if present in the heap:

val = heap.deleteVal(3)

The heap can also be iterated over:

  • The iteration order goes from smallest to largest if minHeap or largest to smallest if maxHeap
for val in heap:
    print(val)

The heap can also be indexed:

  • In this case, heap[0] returns the smallest number and heap[k] returns the kth smallest

Finally, the heap supports adding any kind of type, as long as you provide a key that provides a method of ordering values.

  • NOTE: by default, the key is an indentity function if the object is not indexable.
  • Otherwise, it is the first element of an object. For example x[0] for a list x.
  • If the key fails on an item, it will raise a ValueError
test = [((3, 4), 2.8284271247461903), ((8, 9), 9.899494936611665), ((10, 2), 9.0), ((0.1, 2), 0.9), ((10, 5), 9.486832980505138)]
heap = Heap(test, key=lambda x:x[1]) # this will order by the second value

# you can change the heaps key as follows (this will change the heap)
heap.reconstructHeap(lambda x: 1/(x + 1))

# outside of the heap, you can get access to the heap's key as folows:
heap.applyKey(3)