본문 바로가기

Study for Backend/Data Structure

[Data Structure 기초] Heap

 

Heap (힙)

- 데이터에서 최대값과 최소값을 빠르게 찾기 위해 고안된 완전 이진 트리

- 반 정렬 상태이며 중복 값이 허용된다.

 

트리구조 예시 01
트리구조 예시 02

 

Heap 시간복잡도

O(logn)

 

import java.util.PriorityQueue;

public class HeapExample {
    public static void main(String[] args) {
        // Integer를 저장하는 최소 힙 생성
        PriorityQueue<Integer> minHeap = new PriorityQueue<>();

        // 요소 추가
        minHeap.offer(5);
        minHeap.offer(2);
        minHeap.offer(8);
        minHeap.offer(1);

        // 최소값 확인
        int minValue = minHeap.peek();
        System.out.println("Min value: " + minValue); // Min value: 1

        // 최소값 삭제
        int deletedValue = minHeap.poll();
        System.out.println("Deleted value: " + deletedValue); // Deleted value: 1

        // 최소값 확인
        minValue = minHeap.peek();
        System.out.println("Min value: " + minValue); // Min value: 2
    }
}

 

장점

- 힙 정렬은 정렬을 위해 추가적인 메모리(즉, 인플레이스 정렬)를 필요로 하지 않아 메모리 효율이 좋다.
- 동일한 값을 가진 레코드의 상대적인 순서가 정렬 후에 변경될 수 있다.

단점

- 힙 정렬은 연속된 메모리 위치에 접근하지 않기 때문에 현대의 컴퓨터 아키텍처에서 캐시 효율성이 떨어짐.
- 동일한 값의 원소 간의 상대적 순서가 중요한 경우에는 다른 정렬 알고리즘을 고려해야 함
- 힙 구조를 만들고 유지하는 데 필요한 연산이 복잡함

 

 

 

 

관련link

https://hoehen-flug.tistory.com/32

 

[자료구조] 힙(Heap) 자료구조 알아보기 & Java 예제 코드

자료구조 중 힙(Heap)에 대해 정리해보자. 힙(Heap)이란? 자료구조 중 힙(Heap)은 특정한 순서에 따라 정렬된 요소들을 저장하는 트리 기반의 자료구조이다. Heap은 일반적으로 이진 힙(binary heap)으로

hoehen-flug.tistory.com

https://velog.io/@suk13574/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0Java-%ED%9E%99heap

 

[자료구조/Java] 힙(heap)

✔ 목차 힙(heap)이란? 힙 종류 힙 구현 힙 연산 시간복잡도 힙 응용 - 우선순위 큐 힙 응용 - 힙 정렬 🔎 힙(heap)이란? 완전 이진트리 중복값 허용 흽의 왼쪽 부트리와 오른쪽 부트리 모두 힙 최댓

velog.io

https://go-coding.tistory.com/25

 

[자료구조] 힙 개념과 JAVA로 구현

항상 문제를 풀때마다 힙(heap)에 대한 개념이 많이 헷갈려서 포스팅한다. 다른 분의 블로그에 매우 잘 정리된 포스팅을 가져와 정리해서 쓴 글이다. 힙(Heap) 힙은 이진트리의 일종이다. 반정렬 상

go-coding.tistory.com

https://hyunseo-fullstackdiary.tistory.com/16

 

JAVA-자료구조 (Heap)

1. 힙 (Heap) 이란? 힙: 데이터에서 최댓값과 최솟값을 빠르게 찾기 위해 고안된 완전 이진 트리 (Complete Binary Tree) 완전 이진 트리: 노드를 삽입할 때 최하단 왼쪽 노드부터 차례대로 삽입하는 트리

hyunseo-fullstackdiary.tistory.com

https://velog.io/@jeongbeom4693/Java-Heap-Sort

 

[Java] 힙 정렬(Heap Sort)

힙 정렬(heap sort)는 힙(heap)을 사용하여 정렬하는 알고리즘입니다. 힙은 "부모의 값이 자식의 값보다 항상 크다(작다)"라는 조건을 만족하는 완전이진트리입니다.

velog.io

https://needactionblog.com/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-java%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%ED%9E%99-%EC%A0%95%EB%A0%ACheap-sort%EC%9D%98-%EC%9B%90%EB%A6%AC%EB%B6%80%ED%84%B0-%EC%8B%A4%EC%A0%9C-%EA%B5%AC/#4_%ED%9E%99_%EC%A0%95%EB%A0%AC%EC%9D%98_%EC%9E%A5%EB%8B%A8%EC%A0%90