-
Notifications
You must be signed in to change notification settings - Fork 29
/
Copy pathmain.py
45 lines (32 loc) · 869 Bytes
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class min_heap:
def __init__(self):
self.data=[0]
self.size= 0
def insert(self,value):
self.data.append(value)
self.size+=1
self._percolate_up(self.size)
def _percolate_up(self,i):
while i//2>0:
if self.data[i]<self.data[i//2]:
self.data[i],self.data[i//2]=self.data[i//2],self.data[i]
i=i//2
def _percolate_down(self,i):
while (i*2)<=self.size:
min_child=self._min_child(i)
if self.data[i]>self.data[min_child]:
self.data[i],self.data[min_child]=self.data[min_child],self.data[i]
i=min_child
def _min_child(self,i):
if i*2+1>self.size: return i*2
else:
if self.data[i*2]<self.data[i*2+1]: return i*2
else: return i*2+1
def pop_min(self):
min=self.data[1]
self.data[1]=self.data[self.size]
self.size+=-1
self.data.pop()
self._percolate_down(1)
return min
def