[JAVA] ⚙️ 자료구조 : Heap | 간단 정리 및 삽입•삭제 과정 💬

2025. 8. 21. 20:10·✏️공부/💡JAVA
728x90
반응형

Heap ⚙️

최대 힙 / 최소 힙


📌 Heap (힙)

  • 완전 이진 트리(Complete Binary Tree) 기반의 자료구조
  • 부모 노드와 자식 노드 간의 우선순위 관계를 만족
  • 두 가지 종류가 있음:
    • 최대 힙(Max Heap): 부모 ≥ 자식 (부모가 항상 가장 큼)
    • 최소 힙(Min Heap): 부모 ≤ 자식 (부모가 항상 가장 작음)

📌 예시

1️⃣ 최대 힙 (Max Heap)

         50
       /    \
     30      20
    /  \    /  \
   15  10  8    16
  • 부모 ≥ 자식 규칙 만족 → 루트(50)가 최댓값

 

2️⃣ 최소 힙 (Min Heap)

         5
       /   \
     10     15
    / \    /  \
   20 30  25  40
  • 부모 ≤ 자식 규칙 만족 → 루트(5)가 최솟값

📌 특징

특징 설명
구조 완전 이진 트리 → 배열로 효율적으로 표현 가능
루트 Max Heap → 최대값 / Min Heap → 최소값
삽입 새로운 원소는 마지막 레벨에 추가 후 위로 Heapify Up (Bubble Up)
삭제 루트 제거 후 마지막 원소를 루트로 올리고 Heapify Down (Bubble Down)

🔗 삽입 과정 (예: Max Heap)

초기 상태:

       50
      /
    30

 

40 삽입:

       50
      /  \
    30   40

✅ (40 ≤ 50 → 규칙 유지)

 

60 삽입:

       50
      /  \
    30   40
   /
  60

✅ Heapify Up (Bubble Up): 60 > 30 → 교환

 

       50
      /  \
    60   40
   /
  30

✅ 60 > 50 → 교환

 

최종

       60
      /  \
    50   40
   /
  30

 


🔗 삭제 과정 (예: Max Heap)

삭제는 항상 루트(최댓값) 부터

 

초기 상태:

       60
      /  \
    50   40
   /
  30

 

루트(60) 삭제 후 마지막 원소(30)를 루트로 이동:

       30
      /  \
    50   40

✅ Heapify Down: 30 < 50 → 교환

 

최종

       50
      /  \
    30   40

30과 자식 비교 → 규칙 만족 (종료)


📌 시간 복잡도

  • 삽입 (Insert): O(log n) → 마지막에 넣고 Heapify Up
  • 삭제 (Extract Max/Min): O(log n) → 루트 제거 후 Heapify Down
  • 최대/최소값 접근: O(1) → 루트 확인

📁 활용

  • 우선순위 큐 (Priority Queue)
  • 힙 정렬 (Heap Sort)
  • 다익스트라 알고리즘 (최단 경로 탐색)
  • 허프만 코딩 (데이터 압축)

✅ 정리

  • Heap은 완전 이진 트리 기반의 자료구조
  • Max Heap: 부모 ≥ 자식 (루트 = 최대값)
  • Min Heap: 부모 ≤ 자식 (루트 = 최소값)
  • 삽입 → 아래에 넣고 위로 올림, 삭제 → 루트 빼고 아래로 내림

 

728x90
반응형

'✏️공부 > 💡JAVA' 카테고리의 다른 글

[JAVA|DB] 동시성과 공유 자원 🗂️ | 꼬이지 않게 관리하는 법  (0) 2025.11.13
[JAVA] Lombok & Validation 정리 | 필수 어노테이션 가이드 📖 | @Getter / @Setter | @NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor  (0) 2025.09.21
[JAVA] ⚙️ 자료구조 : Tree & Binary Search Tree 🌲 | 트리 순회 | 간단 정리 및 비교 💬  (0) 2025.08.21
[JAVA] ⚙️ 자료 구조 : Stack / Queue / Deque | 간단 비교 및 정리 💬  (0) 2025.08.21
[JAVA | 테스트] TDD (Test-Driven Development) | 자동테스트, red•green•blue 단계  (4) 2025.08.11
'✏️공부/💡JAVA' 카테고리의 다른 글
  • [JAVA|DB] 동시성과 공유 자원 🗂️ | 꼬이지 않게 관리하는 법
  • [JAVA] Lombok & Validation 정리 | 필수 어노테이션 가이드 📖 | @Getter / @Setter | @NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor
  • [JAVA] ⚙️ 자료구조 : Tree & Binary Search Tree 🌲 | 트리 순회 | 간단 정리 및 비교 💬
  • [JAVA] ⚙️ 자료 구조 : Stack / Queue / Deque | 간단 비교 및 정리 💬
망꼬누나
망꼬누나
공부한 내용을 정리하는 공간입니다.
  • 망꼬누나
    망꼬누나의 개발 공부
    망꼬누나
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • ℹ️ 정보 및 실습 (19)
        • ☑️ Git & GitHub (8)
        • ☑️ 프로젝트 (6)
        • ☑️ 회고 및 후기 (5)
      • 🛠 CS (1)
      • 💻코딩 (88)
        • 💡Baekjoon (17)
        • 💡Programmers (71)
      • ✏️공부 (48)
        • 💡OS (1)
        • 💡Network (6)
        • 💡SpringBoot (9)
        • 💡JAVA (21)
        • 💡SQL (1)
        • 💡DB (2)
        • ☁️ Cloud (4)
        • 💡알고리즘 (4)
      • 📌 자격증 (6)
        • 📝정보처리기사 (3)
        • 📝SQLD (3)
  • 블로그 메뉴

    • 홈
    • github
  • 나의 GitHub Contribution 그래프
    Loading data ...
  • 인기 글

  • 태그

    알고리즘
    Set
    S3
    트랜잭션
    네트워크
    프로그래머스
    백엔드
    GIT
    코딩테스트
    동시성제어
    map
    자료구조
    데브코스
    프로그래머스 #JAVA
    Stream
    github
    자바
    AWS
    Java
    baekjoon
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.5
망꼬누나
[JAVA] ⚙️ 자료구조 : Heap | 간단 정리 및 삽입•삭제 과정 💬
상단으로

티스토리툴바