本文へジャンプ
  • ながの子育て応援宣言
  • 行動宣言募集
  • 婚活サポーター募集中
  • 婚活の秘訣
  • ながの結婚支援ネットワーク

投稿

heap 예제

2019年8月2日

힙은 루트 노드 키가 자식과 비교되고 그에 따라 정렬되는 균형 잡힌 이진 트리 데이터 구조의 특별한 경우입니다. α에 자식 노드 β가 있는 경우 – 예를 들어$ $X$$$가 $$Y$$의 상위 노드인 경우$ $X$$의 값은 $$Y$$$의 값과 관련하여 특정 순서를 따르며 동일한 순서가 트리 전체에서 수행됩니다. 힙 응용 프로그램: 1) 힙 정렬: 힙 정렬 O(nLogn) 시간에 배열을 정렬 하려면 이진 힙을 사용 합니다. 2) extractMin(): MinHeap에서 최소 요소를 제거합니다. 이 작업의 시간 복잡성은 루트를 제거한 후 heapify()를 호출하여 힙 속성을 유지해야 하므로 O(Logn)입니다. 바이너리 힙은 어떻게 표현합니까? 이진 힙은 완전한 이진 트리입니다. 이진 힙은 일반적으로 배열로 표시됩니다. 참고 – 최소 힙 생성 알고리즘에서, 우리는 부모 노드의 값이 자식 노드보다 적을 것으로 예상한다. 2) 이진 힙은 최소 힙 또는 최대 힙입니다. 최소 이진 힙에서 루트의 키는 이진 힙에 있는 모든 키 중에서 최소여야 합니다. 이진 트리의 모든 노드에 대해 동일한 속성이 재귀적으로 true여야 합니다. 최대 이진 힙은 MinHeap과 유사합니다. 2) 우선 순위 대기열: 우선 순위 대기열은 O(logn) 시간에 삽입(), delete() 및 extractmax() 및 extractmax() 작업을 지원하기 때문에 이진 힙을 사용하여 효율적으로 구현할 수 있습니다.

바이노모리얼 힙과 피보나치 힙은 바이너리 힙의 변형입니다. 이러한 변형은 또한 효율적으로 결합을 수행합니다. 힙은 일반적으로 배열로 구현됩니다. 모든 이진 트리는 배열에 저장할 수 있지만 이진 힙은 항상 완전한 이진 트리이므로 컴팩트하게 저장할 수 있습니다. 포인터에는 공간이 필요하지 않습니다. 대신 각 노드의 상위 노드와 자식은 배열 인덱스의 산술 연산으로 찾을 수 있습니다. 이러한 속성은 이 힙 구현을 암시적 데이터 구조 또는 Ahnentafel 목록의 간단한 예로 만듭니다. 세부 정보는 루트 위치에 따라 달라지며, 구현에 사용되는 프로그래밍 언어의 제약 조건 또는 프로그래머 기본 설정에 따라 달라질 수 있습니다.

특히 산술 연산을 단순화하기 위해 루트가 인덱스 1에 배치되는 경우가 있습니다. {8, 7, 6, 3, 2, 4, 5}의 값을 갖는 7개의 요소를 위의 예로 들어 보겠습니다. 4) 힙을 사용하여 많은 문제를 효율적으로 해결할 수 있습니다. 다음을 참조하십시오. a) 배열에서 K`th 가장 큰 요소입니다. b) 거의 정렬된 배열/c) K 정렬 배열 병합을 정렬합니다. 다음에 빌드 최대 힙 함수는 최대-Heapify를 상향식으로 반복적으로 사용하여 n 노드가 있는 완전한 이진 트리를 최대 힙으로 저장하는 배열 A를 변환합니다. 바닥(n/2) + 1, 바닥(n/2) + 2, …, n은 모두 트리의 잎(인덱스가 1에서 시작된다고 가정)에 의해 인덱싱된 배열 요소가 각각 하나의 요소 힙이라는 관찰에 근거합니다. 최대 힙 빌드는 나머지 각 트리 노드에서 Max-Heapify를 실행합니다. 이진 힙 삽입의 예로 최대 힙이 생성되는 방법을 보여 주는 동일한 예제를 사용한다고 가정해 보겠습니다. 최소 힙을 만드는 절차는 비슷하지만 최대 값 대신 최소 값을 구합니다.

힙은 일반적으로 배열(고정 크기 또는 동적 배열)에서 구현되며 요소 간에 포인터가 필요하지 않습니다. 요소를 힙에 삽입하거나 삭제한 후 힙 속성이 위반될 수 있으며 힙의 균형을 내부 작업으로 조정해야 합니다. 상위 값이 자식값보다 크면 이 속성은 최대 힙을 생성합니다. 이 기준에 따라, 힙은 두 가지 유형이 될 수 있습니다 – 최소 힙에 대한 작업 : 1) getMini (): 그것은 민 힙의 루트 요소를 반환합니다.

グローバルメニューへジャンプ

ページのトップへ