자료구조

[자료구조 알고리즘] Binary Heaps (Min-Heaps and Max-Heaps)

mellomello.made 2022. 6. 13. 21:41

힙이란?

최대값이나 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된

완전 이진트리를 기본으로 한 자료구조다

최소힙은 작은 값이 항상 가장 위에 노드에 있게해서 트리의 루트에는 가장 작은 값이 오게하는 최소힙이다.

가장 큰값이 맨 위에 오도록하는 구조가 최대힙이다.

  • 최소힙에 노드 삽입하기

완전 트리에 맨 끝에 노드를 추가한다.

트리가 컴플리트 바이너리 형태를 잃지 않도록 마지막 레벨의 왼쪽부터 채워나간다.

다음 스텝은 자신의 부모 노드와 비교해서 자신이 값이 작으면 부모 노드랑 자리를 바꾼다.

부모 노드가 자기보다 작을 때 까지 반복한다.

완전 이진 트리에서 이루어지니까 한번 돌 때 마다 o(logn)의 시간 복잡도를 가진다.

  • 최소힙에서 노드 꺼내오기

최소힙에서 작은 값은 루트에있으니까 어렵지 않다. 루트의 값을 빼온 다음에는 완전 이진 트리 맨 마지막을 루트 자리로 채운다. 자식 노드 두개를 비교해서 트리의 맨 꼭 대기로 보낸다. 맨 마지막 잎사귀에 가장 큰 값이 들어가면 종료한다.

 

힙은 객체가 저장되는 메모리 공간이다. 콜 스택의 요소인 실행 컨텍스트는 힙에 저장된 객체를 참조한다. 메모리에 값을 저장하려면 먼저 값을 저장할 메모리 공간의 크기를 결정해야한다. 객체는 원시 값과는 달리 크기가 정해져 있지 않으므로 할당해야 할 메모리 공간의 크기를 런타임에 결정(동적 할당) 해야한다. 따라서 객치게 저장되는 메모리 공간인 힙은 구조화 되어 있지 않다는 특징이있다.

'자료구조' 카테고리의 다른 글

자료구조 정렬(버블, 선택, 삽입, 합병, 퀵)  (0) 2022.07.04
힙 정렬 (Heap Sort)  (0) 2022.06.27
데큐(Double-ended Queue)  (0) 2022.06.20
스택(Stack)  (0) 2022.06.19
큐(Queue)  (0) 2022.06.19