heap 예제

2) 이진 힙은 최소 힙 또는 최대 힙입니다. 최소 이진 힙에서 루트의 키는 이진 힙에 있는 모든 키 중에서 최소여야 합니다. 이진 트리의 모든 노드에 대해 동일한 속성이 재귀적으로 true여야 합니다. 최대 이진 힙은 MinHeap과 유사합니다. 참고 – 최소 힙 생성 알고리즘에서, 우리는 부모 노드의 값이 자식 노드보다 적을 것으로 예상한다. 힙은 일반적으로 배열로 구현됩니다. 모든 이진 트리는 배열에 저장할 수 있지만 이진 힙은 항상 완전한 이진 트리이므로 컴팩트하게 저장할 수 있습니다. 포인터에는 공간이 필요하지 않습니다. 대신 각 노드의 상위 노드와 자식은 배열 인덱스의 산술 연산으로 찾을 수 있습니다.

이러한 속성은 이 힙 구현을 암시적 데이터 구조 또는 Ahnentafel 목록의 간단한 예로 만듭니다. 세부 정보는 루트 위치에 따라 달라지며, 구현에 사용되는 프로그래밍 언어의 제약 조건 또는 프로그래머 기본 설정에 따라 달라질 수 있습니다. 특히 산술 연산을 단순화하기 위해 루트가 인덱스 1에 배치되는 경우가 있습니다. 바이너리 힙은 어떻게 표현합니까? 이진 힙은 완전한 이진 트리입니다. 이진 힙은 일반적으로 배열로 표시됩니다. 이진 힙은 다음과 같은 속성을 가진 이진 트리입니다. 1) 그것은 완전한 나무입니다 (모든 레벨은 아마도 마지막 레벨을 제외하고 완전히 채워지고 마지막 수준은 가능한 한 남아있는 모든 키를 가지고 있습니다). 이 이 진 힙의 속성은 배열에 저장하기에 적합합니다.

다음에 빌드 최대 힙 함수는 최대-Heapify를 상향식으로 반복적으로 사용하여 n 노드가 있는 완전한 이진 트리를 최대 힙으로 저장하는 배열 A를 변환합니다. 바닥(n/2) + 1, 바닥(n/2) + 2, …, n은 모두 트리의 잎(인덱스가 1에서 시작된다고 가정)에 의해 인덱싱된 배열 요소가 각각 하나의 요소 힙이라는 관찰에 근거합니다. 최대 힙 빌드는 나머지 각 트리 노드에서 Max-Heapify를 실행합니다. 최대 힙: 이러한 유형의 힙에서 상위 노드의 값은 항상 트리 전체의 자식 노드 값보다 크거나 같으며 값이 가장 높은 노드는 트리의 루트 노드가 됩니다. 힙은 루트 노드 키가 자식과 비교되고 그에 따라 정렬되는 균형 잡힌 이진 트리 데이터 구조의 특별한 경우입니다. α에 자식 노드 β가 있는 경우 – 2) 우선 순위 대기열: 우선 순위 대기열은 삽입(), delete() 및 extractmax() 및 deleteKey() 작업을 O(logn) 시간에서 지원하기 때문에 이진 힙을 사용하여 효율적으로 구현할 수 있습니다. 바이노모리얼 힙과 피보나치 힙은 바이너리 힙의 변형입니다. 이러한 변형은 또한 효율적으로 결합을 수행합니다.

이진 힙 삽입의 예로, 힙의 일반적인 구현은 트리가 이진 트리인 최대 힙이 있다고 가정해 보겠습니다.). 힙 데이터 구조, 특히 이진 힙은 1964년 J. W. J. Williams가 힙 정렬 알고리즘의 데이터 구조로 도입했습니다. [3] 힙은 Dijkstra의 알고리즘과 같은 몇 가지 효율적인 그래프 알고리즘에서도 중요합니다. 힙이 완전한 이진 트리인 경우 가능한 높이가 가장 작은 경우 N 노드가 있는 힙과 각 노드에 대해 분기는 항상 loga N 높이를 가지 않습니다. {8, 7, 6, 3, 2, 4, 5}의 값을 갖는 7개의 요소를 위의 예로 들어 보겠습니다. 2) extractMin(): MinHeap에서 최소 요소를 제거합니다. 이 작업의 시간 복잡성은 루트를 제거한 후 heapify()를 호출하여 힙 속성을 유지해야 하므로 O(Logn)입니다.

동일한 예제를 사용하여 최대 힙이 생성되는 방법을 보여 줍니다. 최소 힙을 만드는 절차는 비슷하지만 최대 값 대신 최소 값을 구합니다. 힙 응용 프로그램: 1) 힙 정렬: 힙 정렬 O(nLogn) 시간에 배열을 정렬 하려면 이진 힙을 사용 합니다. 우리는 최대 힙에서 삭제하는 알고리즘을 파생 보자. 최대(또는 최소) 힙의 삭제는 항상 루트에서 최대값(또는 최소) 값을 제거합니다. 예를 들어$ $X$$가 $$Y$$의 상위 노드인 경우$ $X$$의 값은 $$Y$$$의 값과 관련하여 특정 순서를 따르고 트리 전체에서 동일한 순서가 따릅니다. 자세한 내용은 이진 힙의 배열 표현을 참조하십시오.