Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- JWT
- TIL
- puppeteer
- 인접행렬
- Interceptor
- 자료구조
- MySQL
- GraphQL
- node.js
- Spring
- dfs
- LifeCycle
- typescript
- winston
- nestjs
- bean
- REST API
- Deep Dive
- css
- Kubernetes
- javascript
- 코딩테스트
- html
- Linux
- OOP
- 프로그래머스
- 알고리즘
- java
- 탐욕법
- 인접리스트
Archives
- Today
- Total
처음부터 차근차근
[자료구조] Heap 본문
728x90
Heap
- Heap tree or Heap이라고 불린다.
- 여러 개의 값 중에서 가장 크거나 작은 값을 빠르게 찾기 위해 만든 완전 이진트리를 말한다.
- 우선순위 Queue를 위하여 만들어진 자료구조이다.
- 힙은 일종의 반 정렬 상태(느슨한 정렬 상태)를 유지한다.
- 큰 값이 상위 레벨에 있고 작은 값이 하위 레벨에 있다는 정도
- 간단히 말하면 부모 노드의 키 값이 자식 노드의 키 값보다 항상 큰(작은) 이진 트리를 말한다.
- 힙 트리에서는 중복된 값을 허용한다. (이진 탐색 트리에서는 중복된 값을 허용하지 않는다)
- 힙은 계산 편의를 위해 인덱스를 1부터 사용한다 (parent: x, left: 2x, right: 2x+1)
힙의 데이터 삽입
여기서 규칙이란 최소힙, 최대힙의 규칙을 의미한다.
- 리프 노드에 삽입할 노드를 삽입한다.
- 해당 노드와 부모 노드를 서로 비교한다.
- "규칙"에 맞으면 그대로 두고, 그렇지 않으면 부모 노드와 교환한다.
- 규칙에 맞을 때까지 3번 과정을 반복한다.
힙의 데이터 참조(삭제)
루트 노드만을 제거할 수 있으며, 다음과 같은 과정이 일어난다.
- 루트 노드를 제거한다.
- 루트 자리에 가장 마지막 노드를 삽입한다.
- 올라간 노드와 그의 자식 노드과 비교한다.
- 규칙을 만족하면 그대로 두고, 그렇지 않으면 자식노드와 교환한다.
이진 트리와의 차이점
이진 트탐색트리는 탐색을 쉽게 하기 위해 왼쪽이 더 작고 오른쪽이 큰 값으로 꼭 구성이 되어야 하지만, Heap은 그렇지 않다.
시간복잡도
- 참조(최대 또는 최소값을 참조) : O(1)
- 탐색 : O(n)
- 삽입 / 삭제 : O(logn)
'CS > 자료구조' 카테고리의 다른 글
[자료구조] Graph (0) | 2023.11.15 |
---|---|
[TypeScript] MaxHeap 구현 (0) | 2023.11.13 |
[Javascript] Hash Table 구현 (0) | 2023.11.07 |
[자료구조] Hash (0) | 2023.11.07 |
[자료구조] Queue, Stack (1) | 2023.11.03 |