미소를뿌리는감자의 코딩

힙 본문

강의수강/[자료구조|알고리즘]

미뿌감 2024. 2. 8. 14:50
728x90

힙 -> 완전 이진 트리 이어야함. ; 왼쪽 부터 꽉 채워져 있는 것.

 

index 계산:

계산 편의를 위해 인덱스를 1부터 사용: parent: x. left: 2x. right: 2x + 1

 

def __len__(self):...

def _percolate_up(self): # percolate 스며들다
	cur = len(self)
    parent = cur // 2 # left : 2* cur, right = 2*cur + 1 이므로, parent는 cur//2
    
    while parent > 0:
    	if self.items[cur] > self.items[parent]:
        	self.items[cur], self.items[parent] = self.items[parent], self.items[cur]
            
            cur = parent
            parent = cur // 2
            
def extract(self):
	if len(self) < 1:
    	return None
        
    root = self.items[1]
    self.items[1] = self.items[-1]
    self.items.pop()
    self._percolate_down(1)
    return root

 

힙에서의 pop과 insert는 어떻게 실행될까.

 

1) insert

맨 끝에다가 값을 넣고, parent 노드와 비교하면서, 올라나간다.

 

2) pop 

루트는 return 하고, 맨 끝에 있는 노드를 위로 올려, 자식 노드중 큰 노드와 자리를 바꾼다.

 

728x90