티스토리 뷰
힙(Heap)
힙(Heap)
완전 이진 트리의 일종이며 여러 값 중 최대 값과 최소 값을 빠르게 찾아내도록 만들어진 자료구조이다. 이진 탐색 트리가 중복 값을 허용하지 않는 것과 달리 힙 트리는 중복된 값을 허용한다.
힙(Heap) 종류
[최대 힙(Max heap)]
부모 노드이 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진 트리이다.
[최소 힙(min heap)]
부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 완전 이진 트리이다.
구현
힙은 배열을 사용하여 구현하게 된다.
구현을 쉽게 하기 위하여 배열의 첫 번째 인덱스인 0은 사용하지 않는다.
특정 위치의 노드 번호는 새로운 노드가 추가되어도 변하지 않는다.
부모 노드와 자식 노드의 관계
왼쪽 자식 index = (부모 index) * 2
오른쪽 자식 index = (부모 index) * 2 + 1
부모 index = (자식 index) / 2
힙의 삽입
void insert_max_heap(int x) {
maxHeap[++heapSize] = x;
// 힙 크기를 하나 증가하고, 마지막 노드에 x를 넣음
for( int i = heapSize; i > 1; i /= 2) {
// 마지막 노드가 자신의 부모 노드보다 크면 swap
if(maxHeap[i/2] < maxHeap[i]) {
swap(i/2, i);
} else {
break;
}
}
}
힙의 삭제
1. 최대 힙 에서 최대 값은 루트 노드이므로 루트 노드가 삭제된다.
(최대 힙에서 삭제 연산은 최대 값 요소를 삭제하는 것을 의미한다.)
2. 삭제된 루트 노드에는 힙의 마지막 노드를 가져온다.
3. 힙을 재 구성한다.
int delete_max_heap() {
if(heapSize == 0) // 배열이 비어있으면 리턴
return 0;
int item = maxHeap[1]; // 루트 노드의 값을 저장
maxHeap[1] = maxHeap[heapSize]; // 마지막 노드 값을 루트로 이동
maxHeap[heapSize--] = 0; // 힙 크기를 하나 줄이고 마지막 노드 0 초기화
for(int i = 1; i*2 <= heapSize;) {
// 마지막 노드가 왼쪽 노드와 오른쪽 노드보다 크면 끝
if(maxHeap[i] > maxHeap[i*2] && maxHeap[i] > maxHeap[i*2+1]) {
break;
}
// 왼쪽 노드가 더 큰 경우, swap
else if (maxHeap[i*2] > maxHeap[i*2+1]) {
swap(i, i*2);
i = i*2;
}
// 오른쪽 노드가 더 큰 경우
else {
swap(i, i*2+1);
i = i*2+1;
}
}
return item;
}
Reference
[자료구조] 힙(heap)이란 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
'Study > CS' 카테고리의 다른 글
[Software Engineering] TDD(Test Driven Development) (2) | 2022.09.10 |
---|---|
[Software Engineering] 데브옵스(DevOps) (0) | 2022.09.09 |
[Software Engineering] 리팩토링(Refactoring) 과 시큐어 코딩(Secure Coding) (0) | 2022.09.04 |
[Software Engineering] 클린 코드(Clean Code) (2) | 2022.09.04 |
[알고리즘] DFS/BFS (0) | 2022.08.28 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자료구조
- CS 스터디
- 리스트2
- 이차 리스트
- 이진탐색
- 자바
- 리스트
- CS.
- 파이썬
- 리스트 복사
- 프로그래머스
- 완전탐색
- 보험
- 운영체제
- CS
- 프로그래머스강의
- Greedy sort
- 데이터베이스
- 코드업 기초
- 정렬
- https
- 연결리스트활용
- 스터디
- 자료구조와알고리즘 23강
- SW
- 네트워크
- 알고리즘
- It
- 리스트함축
- 프로세스 주소공간
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함