[JAVA] Heap 개념 정리

LeeSeungEun·2023년 5월 13일
0

JAVA

목록 보기
28/28

1. 개념

  • Heap은 동적으로 메모리를 할당하고 해제하는 데 사용되는 자료구조이다. 힙은 객체를 저장하기 위한 메모리 공간으로 사용되며, 주로 동적인 데이터 구조를 구현하는 데 활용된다.

2. 장단점

  • 장점

    • 동적 메모리 할당: 힙은 실행 중에 동적으로 메모리를 할당하고 해제할 수 있다. 이는 프로그램이 실행 중에 필요한 만큼의 메모리를 사용할 수 있게 해준다.

    • 객체의 임의적인 크기: 힙은 객체의 크기가 런타임 시에 결정되므로, 객체의 크기가 변경될 수 있는 상황에 유연하게 대응할 수 있다.

    • 힙 정렬: 힙은 효율적인 정렬 알고리즘인 힙 정렬(Heap Sort)을 구현하는 데 사용될 수 있다.

    • 자료구조 구현: 힙은 완전 이진 트리 형태로 구현된다. 완전 이진 트리는 마지막 레벨을 제외한 모든 레벨이 완전히 채워져 있고, 마지막 레벨도 왼쪽부터 채워져 있는 트리를 말한다. 힙은 주로 배열로 구현된다.

  • 단점

    • 힙은 배열로 구현되어 있기 때문에 메모리를 연속적으로 할당해야 한다. 따라서, 힙이 커지면 메모리의 단편화 문제가 발생할 수 있다.
    • 힙에서 임의의 요소를 찾는 연산은 선형 시간(O(n))이 걸리므로, 힙은 임의 접근에는 적합하지 않다.
    • 힙을 구현하는 데 필요한 추가적인 공간이 필요하다.
  • 요약하자면, 자바의 힙은 동적 메모리 할당에 유용한 자료구조로, 객체를 저장하고 관리하는 데 사용된다. 힙은 배열로 구현되며, 삽입과 삭제에 효율적인 성능을 보인다. 그러나 메모리 단편화 문제와 임의 접근에는 비효율적인 단점이 있다.

3. 메소드

  • insert(element): 힙에 새로운 요소(element)를 삽입한다.
  • delete(): 힙에서 최상위 요소(루트)를 삭제하고 반환한다.
  • peek(): 힙의 최상위 요소(루트)를 반환합니다. 삭제하지는 않는다.
  • size(): 힙에 저장된 요소의 개수를 반환한다.
  • isEmpty(): 힙이 비어 있는지 여부를 확인한다.
  • clear(): 힙의 모든 요소를 삭제하여 비운다.

4. 시간 복잡도

  • 삽입(Insertion): O(log n)
  • 삭제(Deletion): O(log n)
  • 최대/최소 값 찾기: O(1)

0개의 댓글