Java에서 최대 힙을 사용하는 방법?

Java Eseo Choedae Hib Eul Sayonghaneun Bangbeob



프로그래머는 ' 최대 힙 ” 이진 트리. 이 트리에서와 같이 최대 요소는 항상 ' 뿌리 '노드. 또한 정렬된 순서를 유지하면서 효율적인 요소 삽입 및 삭제를 제공합니다. 또한 '최대 힙'은 우선 순위 또는 기타 기준에 따라 예약된 작업을 쉽게 수행할 수 있습니다.

이 문서에서는 다음 내용을 설명합니다.







Java에서 최대 힙을 사용하는 방법?

ㅏ ' 최대 힙 ”는 우선 순위 대기열을 구현하기 위한 기본 데이터 구조로 활용됩니다. 우선 순위 큐에서 데이터는 할당된 우선 순위 값에 따라 처리됩니다. 또한 데이터 요소를 내림차순으로 효율적으로 정렬하는 데 활용할 수도 있습니다.



'최대 힙'은 아래 코덱 예제에 설명된 두 가지 방법을 사용하여 생성할 수 있습니다.



방법 1: 'maxHeapify()' 방법 사용

maxHeapify() ” 메서드는 “ 최대 힙 ” 데이터 구조를 변환하여 기존 요소 컬렉션에서 가져옵니다. 또한 이 방법은 원래 배열을 수정하여 추가 메모리의 필요성을 줄이는 데 도움이 됩니다.





예를 들어 아래 코드를 방문하여 ' 최대 힙 ” “maxHeapify()” 방법 사용:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

공개 클래스 MaxHeapifyExam {
공공 정적 무효 메인 ( [ ] 인수 ) // 메인 생성 ( ) 방법
{
목록 < 정수 > testsEle = 새로운 ArrayList <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( ) ;
testEle.add ( 8 ) ;
testEle.add ( 2 ) ;
testEle.add ( 1 ) ;
testEle.add ( 7 ) ;
System.out.println ( '원본 목록: ' + 테스트 ) ;
maxHeapify ( 테스트 ) ;
System.out.println ( '생성된 최대 힙: ' + 테스트 ) ;
}

개인 정적 무효 maxHeapify ( 목록 < 정수 > 테스트 ) {
int k = testEle.size ( ) ;
~을 위한 ( 정수 i = k / 2 - 1 ; 나 > = 0 ; 나-- ) {
무거워지다 ( 테스트Ele, k, i ) ;
}
}

개인 정적 무효 heapify ( 목록 < 정수 > 테스트Ele, int k, int i ) {
더 큰 정수 = i;
정수 왼쪽 = 2 * 내가 + 1 ;
정수 오른쪽 = 2 * 내가 + 2 ;
만약에 ( 왼쪽 < 케이 && testEle.get ( 왼쪽 ) > testEle.get ( 보다 큰 ) ) {
큰 = 왼쪽;
}
만약에 ( 오른쪽 < 케이 && testEle.get ( 오른쪽 ) > testEle.get ( 보다 큰 ) ) {
더 큰 = 오른쪽;
}
만약에 ( 보다 큰 ! = 나 ) {
컬렉션.스왑 ( 테스트Ele, i, 그 이상 ) ;
무거워지다 ( 테스트Ele, k, 그 이상 ) ;
}
}
}

위 코드에 대한 설명:

  • 먼저 '목록 테스트 '는 '의 더미 데이터 요소로 초기화됩니다. 기본() ” 메서드를 사용하여 콘솔에 인쇄합니다.
  • 다음으로 'testEle' 목록이 'maxHeapify()' 함수에 전달되고 반환된 목록이 콘솔에 표시됩니다.
  • 그런 다음 ' maxHeapify() ” 메소드를 초기화하고 제공된 목록의 크기를 “ 크기() ' 방법.
  • 다음으로 ' ~을 위한 ” 루프를 사용하여 힙 구조를 설정하고 각 노드의 위치를 ​​계산합니다.
  • 이제 ' 히피파이() ' 메서드를 사용하고 'greater', 'leftSide' 및 'rightSide' 변수에 값을 각각 할당하여 'top', 'left' 및 'right' 노드의 위치를 ​​설정합니다.
  • 그 후 여러 ' 만약에 ” 조건문을 사용하여 “ 왼쪽 ” 노드가 “ 오른쪽 ” 노드와 그 반대의 경우도 마찬가지입니다. 결국 더 큰 값이 ' 보다 큰 '노드.
  • 마지막으로 새로운 ' 보다 큰 ”노드 값은 이미 저장되어 있는 값으로 “ 보다 큰 ” 노드 변수. 그리고 ' 교환() ” 기능은 그에 따라 작동하여 “ 보다 큰 변수.

실행 단계 종료 후:

스냅샷은 최대 힙이 ' maxHeapify() ” Java의 메소드.

방법 2: 'Collections.reverseOrder()' 방법 사용

Collections.reverseOrder() ” 방법은 간단하고 간결한 방법을 제공하여 “ 최대 힙 ” 컬렉션을 역순으로 정렬합니다. 이렇게 하면 코드를 재사용할 수 있고 사용자 지정 ' 무거워지다 ” 로직, 아래 코드 스니펫과 같이:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

공개 클래스 ReverseOrderExample {
공공 정적 무효 메인 ( [ ] 인수 ) // 메인 생성 ( ) 방법
{
목록 < 정수 > testsEle = 새로운 ArrayList <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 38 ) ;
testEle.add ( 98 ) ;
testEle.add ( 26 ) ;
testEle.add ( 1 ) ;
testEle.add ( 73 ) ;
System.out.println ( '원본 목록: ' + 테스트 ) ;
컬렉션.정렬 ( 테스트Ele, Collections.reverseOrder ( ) ) ;
System.out.println ( '생성된 최대 힙: ' + 테스트 ) ;
}
}

위 코드에 대한 설명:

  • 먼저 ' 배열목록 ”, “ 컬렉션 ' 그리고 ' 목록 ” Java 파일의 유틸리티.
  • 그런 다음 ' 목록 ' 명명 된 ' 테스트 ” 목록에 더미 요소를 삽입합니다.
  • 다음으로 “ 종류() ” 방법은 데이터 요소를 오름차순으로 정렬하고 목록을 매개 변수로 전달하는 데 사용됩니다. Collections.reverseOrder() ' 방법. 이렇게 하면 ' 테스트 ” 역순으로 나열합니다.

실행 단계 종료 후:

스냅샷은 'Collections.reverseOrder()' 메서드를 사용하여 '최대 힙'이 생성되고 정렬되었음을 보여줍니다.

결론

'를 생성하여 최대 힙 ”, 사용자는 “maxHeapify()” 및 “Collections.reverseOrder()” 메서드를 사용할 수 있습니다. 최대 요소에 빠르게 액세스하고 정렬된 순서를 효율적으로 유지 관리할 수 있는 방식으로 요소 컬렉션을 관리합니다. 특정 요구 사항과 힙 생성 프로세스에 필요한 제어 수준에 따라 다릅니다.