Skip to content

Commit eb3ed2e

Browse files
author
stuffacc
committed
kr 2
1 parent 6e31449 commit eb3ed2e

File tree

2 files changed

+105
-0
lines changed

2 files changed

+105
-0
lines changed

src/kr2/bheap.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
class Node:
2+
data = 0
3+
level = 0
4+
child = None
5+
parent = None
6+
right = None
7+
8+
def __init__(self, key):
9+
self.data = key
10+
self.level = 0
11+
self.child = None
12+
self.parent = None
13+
self.right = None
14+
15+
def __str__(self):
16+
return str(self.data)
17+
18+
19+
class BHeap:
20+
trees = []
21+
22+
def __init__(self, trees):
23+
self.trees = trees
24+
25+
def insert(self, key):
26+
node = Node(key)
27+
self.merge(BHeap([node]))
28+
29+
def find_min(self):
30+
mn = 10**10
31+
for tree in self.trees:
32+
mn = min(tree.data, mn)
33+
34+
if mn == 10**10:
35+
print("No min")
36+
return
37+
38+
return mn
39+
40+
def merge(self, heap):
41+
self.trees.extend(heap.trees)
42+
43+
44+
def extract_min(self):
45+
mn = 10**10
46+
min_node = None
47+
for tree in self.trees:
48+
if tree.data < mn:
49+
mn = tree.data
50+
min_node = tree
51+
52+
if mn == 10**10:
53+
print("No min")
54+
return
55+
56+
self.trees.remove(min_node)
57+
58+
if min_node.child:
59+
self.merge(BHeap(min_node.child))
60+
61+
return min_node.data
62+
63+
def __str__(self):
64+
res = ""
65+
for tree in self.trees:
66+
res += str(tree) + " "
67+
return res
68+
69+
70+
if __name__ == "__main__":
71+
heap = BHeap([])
72+
73+
print(heap.find_min())
74+
print(heap.extract_min())
75+
76+
77+
heap.insert(10)
78+
heap.insert(20)
79+
heap.insert(30)
80+
81+
print(heap)
82+
print(heap.find_min())
83+
print(heap.extract_min())
84+
print(heap)
85+
86+
print(heap.extract_min())
87+
print(heap)
88+
89+
90+

src/kr2/test_bheap.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import pytest
2+
import bheap
3+
4+
def test_min():
5+
heap = bheap.BHeap([])
6+
7+
heap.insert(10)
8+
heap.insert(20)
9+
heap.insert(30)
10+
11+
assert heap.find_min() == 10
12+
13+
14+
if __name__ == "__main__":
15+
pytest.main()

0 commit comments

Comments
 (0)