Java에서 바이너리 힙을 구현하는 방법 이해



이 기사는 예제를 통해 Java에서 바이너리 힙을 구현하는 방법에 대한 상세하고 포괄적 인 지식을 제공합니다.

이 기사에서는 힙 정렬 작업에 대한 전체 개요를 제공하고 나중에 Java에서 바이너리 힙을 구현하는 방법을 배웁니다.

이 기사의 의제는 다음과 같습니다.





  1. 힙 정렬이란 무엇입니까?
  2. 최대 힙
  3. 최소 힙
  4. 자바에서 힙 구현
    • 도표
    • 암호

의 시작하자!

힙 정렬이란 무엇입니까?

힙은 기본적으로 트리 기반 데이터 구조입니다. 노드가 있습니다. 노드는 특정 요소로 구성됩니다. 모든 노드는 하나의 요소를 포함합니다.



노드에는 자식이있을 수 있습니다. 자식이없는 경우를 Leaf라고합니다.

따라야 할 두 가지 규칙이 있습니다.

  • 모든 노드의 값은 하위에 저장된 모든 값보다 작거나 같아야합니다.
  • 높이가 가장 적습니다.

힙은 추출에 매우 효율적입니다.최소 또는 최대 요소.



이제 min heap으로 넘어 갑시다!

최소 힙

최소 힙은 루트 요소의 값이 하위 요소 중 하나보다 작거나 같은 완전한 이진 트리입니다.

최소 힙의 표현

도착 [(i-1) / 2] : 이것은 부모 노드를 반환합니다.

Arr [(2 * i) + 1] : 이것은 왼쪽 자식 노드를 반환합니다.

Arr [(2 * i) + 2] : 이것은 오른쪽 자식 노드를 반환합니다.

mongodb는 무엇을 위해 사용됩니까?

Min Heap에는 다음과 같은 특정 방법이 있습니다.

  • 끼워 넣다(): 트리 끝에 새 키가 추가됩니다. 새 키가 부모보다 크면 아무것도 할 필요가 없습니다. 그렇지 않으면 힙 속성을 설정하기 위해 탐색해야합니다.
  • getMin () : 이 메서드는 루트 요소를 반환하는 데 도움이됩니다.
  • extractMin () : 이 메서드는 최소값을 반환합니다.요소.

이제 Max 힙으로 이동합니다.

최대 힙

최대 힙은 루트 요소의 값이 자식 요소 중 하나보다 크거나 같은 완전한 이진 트리입니다.

최대 힙도 여러 가지 방법으로 구성됩니다!

  • 삽입 () : 힙에 요소를 삽입합니다.
  • 지우다() : 힙에서 요소를 삭제합니다.
  • FindMax () : 힙에서 최대 요소를 찾습니다.
  • printHeap () : 힙의 내용을 인쇄합니다.

이제 다이어그램을 통해 힙 구현을 보여주고 나중에 Java암호.

자바에서 힙 구현

도표:

Heap

위의 다이어그램은 Java의 바이너리 힙을 보여줍니다. 두 개의 힙 (최소 힙과 최대 힙)이 있다는 것을 배웠 듯이 다음은 다이어그램입니다.

이제 다음 세그먼트로 이동하여 Java에서 바이너리 힙을 구현하는 방법을 살펴 보겠습니다.

암호:

public class BinaryHeap {private static final int d = 2 private int [] heap private int heapSize / ** * 기본 크기로 힙을 초기화합니다. * / public BinaryHeap (int capacity) {heapSize = 0 heap = new int [capacity + 1] Arrays.fill (heap, -1)} / ** * 힙이 비어 있는지 여부를 확인합니다. * Complexity : O ( 1) * / public boolean isEmpty () {return heapSize == 0} / ** * 힙이 꽉 찼는 지 여부를 확인합니다. * 복잡성 : O (1) * / public boolean isFull () {return heapSize == heap .length} private int parent (int i) {return (i-1) / d} private int kthChild (int i, int k) {return d * i + k} / ** * 힙에 새 요소를 삽입합니다. * 복잡성 : O (log N) * 최악의 시나리오로 루트까지 트래버스해야합니다. * / public void insert (int x) {if (isFull ()) throw new NoSuchElementException ( 'Heap is full, No space to insert new element ') heap [heapSize ++] = x heapifyUp (heapSize-1)} / ** * 인덱스 x에서 요소를 삭제합니다. * 복잡성 : O (log N) * * / public int delete (int x) {if (isEmpty ()) throw new NoSuchElementException ( 'Heap is empty, No element to delete') int key = heap [x] heap [x] = heap [heapSize -1] heapSize-- heapifyDown (x) retu rn key} / ** *이 메소드는 요소를 삽입하는 동안 힙 속성을 유지하는 데 사용됩니다. * * / private void heapifyUp (int i) {int temp = heap [i] while (i> 0 && temp> heap [parent (i)]) {heap [i] = heap [parent (i)] i = parent (i)} heap [i] = temp} / ** *이 메서드는 요소를 삭제하는 동안 힙 속성을 유지하는 데 사용됩니다. * * / private void heapifyDown (int i) {int child int temp = heap [i] while (kthChild (i, 1)heap [rightChild]? leftChild : rightChild} / ** * 힙의 모든 요소를 ​​인쇄하는 데 사용되는이 메서드 * * / public void printHeap () {System.out.print ( 'nHeap =') for (int i = 0 i

이것으로 우리는 Java의 Binary Heap에 대한이 기사를 마칩니다. 확인 전 세계에 걸쳐 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 작성했습니다. Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Java 개발자가 되고자하는 학생과 전문가를 위해 설계되었습니다. 이 과정은 Java 프로그래밍을 시작하고 Hibernate & Spring과 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념 모두에 대해 교육하도록 설계되었습니다.

질문이 있으십니까? 이 'Java ArrayList'블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 연락 드리겠습니다.