자료구조 - 힙(heap)

2024. 3. 18. 00:30·이론공부/개념

힙(heap) : 데이터에서 최대값과 최소값을  빠르게 찾기 위해 고안된 완전 이전 트리

                     ※ 완전 이전 트리 : 노드를 삽입할 때 최하단 왼쪽 노드부터 차례대로 삽입하는 트리

  • 힙을 사용하는 이유
    • 배열에 데이터를 넣고, 최대값과 최소값을 찾으려면 O(n) 이 걸림
    • 이에 반해, 힙에 데이터를 넣고, 최대값과 최소값을 찾으면, 𝑂(𝑙𝑜𝑔𝑛)이 걸림
    • 우선순위 큐와 같이 최대값 또는 최소값을 빠르게 찾아야 하는 자료구조 및 알고리즘 구현 등에 활용됨

□ 힙의 구조

  • 힙은 최대값을 구하기 위한 구조 (최대 힙, Max Heap) 와, 최소값을 구하기 위한 구조 (최소 힙, Min Heap) 로 분류할 수 있음
  • 힙은 다음과 같이 두 가지 조건을 가지고 있는 자료구조임
    1. 각 노드의 값은 해당 노드의 자식 노드가 가진 값보다 크거나 같다. (최대 힙의 경우)
      • 최소 힙의 경우는 각 노드의 값은 해당 노드의 자식 노드가 가진 값보다 크거나 작음
    2. 완전 이진 트리 형태를 가짐

□ 힙에 데이터 삽입하기 - 기본동작

 

□ 힙에 데이터 삽입하기 - 삽입할 데이터가 힙의 데이터보다 클 경우(Max Heap의 예)

 

□ 힙에 데이터 삽입하기 - 삽입할 데이터가 힙의 데이터보다 클 경우(Max Heap의 예)

□ 힙의 구현

  • 일반적으로 힙 구현시 배열 자료구조를 활용함
  • 배열은 인덱스가 0번부터 시작하지만, 힙 구현의 편의를 위해, root 노드 인덱스 번호를 1로 지정하면, 구현이 좀더 수월함
    • 부모 노드 인덱스 번호 (parent node's index) = 자식 노드 인덱스 번호 (child node's index) // 2
    • 왼쪽 자식 노드 인덱스 번호 (left child node's index) = 부모 노드 인덱스 번호 (parent node's index) * 2
    • 오른쪽 자식 노드 인덱스 번호 (right child node's index) = 부모 노드 인덱스 번호 (parent node's index) * 2 + 1

□ 힙(heap) 시간 복잡도

  • depth (트리의 높이) 를 h라고 표기한다면,
  • n개의 노드를 가지는 heap 에 데이터 삽입 또는 삭제시, 최악의 경우 root 노드에서 leaf 노드까지 비교해야 하므로 ℎ=𝑙𝑜𝑔2𝑛ℎ 에 가까우므로, 시간 복잡도는 𝑂(𝑙𝑜𝑔𝑛)
    • 참고: 빅오 표기법에서 𝑙𝑜𝑔𝑛 에서의 log의 밑은 10이 아니라, 2입니다.
    • 한번 실행시마다, 50%의 실행할 수도 있는 명령을 제거한다는 의미. 즉 50%의 실행시간을 단축시킬 수 있다는 것을 의미함

 

'이론공부 > 개념' 카테고리의 다른 글

혼자공부하는 컴퓨터 구조와 운영체제 Ch1~5  (0) 2024.06.14
개발로드1. 인터넷의 작동원리  (0) 2024.05.09
자료구조 - 트리(tree)  (1) 2024.03.17
자료구조 - 해쉬 테이블(hash table)  (0) 2024.03.16
자료구조 - 알고리즘 복잡도  (0) 2024.03.16
'이론공부/개념' 카테고리의 다른 글
  • 혼자공부하는 컴퓨터 구조와 운영체제 Ch1~5
  • 개발로드1. 인터넷의 작동원리
  • 자료구조 - 트리(tree)
  • 자료구조 - 해쉬 테이블(hash table)
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
        • 개념
        • 정보처리기사 필기
        • 정보처리기사 실기 기출
        • 네트워크관리사 2급
        • SQLD
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • 웹
      • git & github
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java this
    java 멤버
    java two-pointer
    java 에라토스테네스의 체
    java 세수의합
    프로그래머스 java 기초 트레이닝
    데이터 크기
    Java 생성자
    java 메서드
    java
    java enhance switch
    프로그래머스 java 기초트레이닝
    java 제어자
    java기초
    데이터 타입
    개발로드맵
    java super
    java arrays.copyofrnage()
    자료구조
    java 유클리드 호제법
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
자료구조 - 힙(heap)
상단으로

티스토리툴바