data_structures.heap.binomial_heap¶
Binomial Heap Reference: Advanced Data Structures, Peter Brass
Classes¶
| Min-oriented priority queue implemented with the Binomial Heap data | |
| Node in a doubly-linked binomial tree, containing: | 
Module Contents¶
- class data_structures.heap.binomial_heap.BinomialHeap(bottom_root=None, min_node=None, heap_size=0)¶
- Min-oriented priority queue implemented with the Binomial Heap data structure implemented with the BinomialHeap class. It supports: - Insert element in a heap with n elements: Guaranteed logn, amoratized 1 
- Merge (meld) heaps of size m and n: O(logn + logm) 
- Delete Min: O(logn) 
- Peek (return min without deleting it): O(1) 
 - Example: - Create a random permutation of 30 integers to be inserted and 19 of them deleted >>> import numpy as np >>> permutation = np.random.permutation(list(range(30))) - Create a Heap and insert the 30 integers __init__() test >>> first_heap = BinomialHeap() - 30 inserts - insert() test >>> for number in permutation: … first_heap.insert(number) - Size test >>> first_heap.size 30 - Deleting - delete() test >>> [int(first_heap.delete_min()) for _ in range(20)] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] - Create a new Heap >>> second_heap = BinomialHeap() >>> vals = [17, 20, 31, 34] >>> for value in vals: … second_heap.insert(value) - The heap should have the following structure: - 17 - / - # 31
- / - 20 34 - / / 
 - # # # # - preOrder() test >>> “ “.join(str(x) for x in second_heap.pre_order()) “(17, 0) (‘#’, 1) (31, 1) (20, 2) (‘#’, 3) (‘#’, 3) (34, 2) (‘#’, 3) (‘#’, 3)” - printing Heap - __str__() test >>> print(second_heap) 17 -# -31 –20 —# —# –34 —# —# - mergeHeaps() test >>> >>> merged = second_heap.merge_heaps(first_heap) >>> merged.peek() 17 - values in merged heap; (merge is inplace) >>> results = [] >>> while not first_heap.is_empty(): … results.append(int(first_heap.delete_min())) >>> results [17, 20, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 34] - __str__()¶
- Overwriting str for a pre-order print of nodes in heap; Performance is poor, so use only for small examples 
 - __traversal(curr_node, preorder, level=0)¶
- Pre-order traversal of nodes 
 - delete_min()¶
- delete min element and return it 
 - insert(val)¶
- insert a value in the heap 
 - is_empty()¶
 - merge_heaps(other)¶
- In-place merge of two binomial heaps. Both of them become the resulting merged heap 
 - peek()¶
- return min element without deleting it 
 - pre_order()¶
- Returns the Pre-order representation of the heap including values of nodes plus their level distance from the root; Empty nodes appear as # 
 - bottom_root = None¶
 - min_node = None¶
 - size = 0¶
 
- class data_structures.heap.binomial_heap.Node(val)¶
- Node in a doubly-linked binomial tree, containing:
- value 
- size of left subtree 
- link to left, right and parent nodes 
 
 - merge_trees(other)¶
- In-place merge of two binomial trees of equal size. Returns the root of the resulting tree 
 - left = None¶
 - left_tree_size = 0¶
 - parent = None¶
 - right = None¶
 - val¶