2016-06-17 3 views
0

첫째, 나는 힙에서 7을 삭제해야하고 그 후 17, 14힙의 삽입과 삭제

enter image description here

추가 문제는 내가 그 힙이 무엇인지 잘 모릅니다이다. 최소 힙입니까? 또는 이항 힙?

각 작업을 수행하는 방법을 설명 할 수 있습니까?

감사

+3

이것은 힙이 아닙니다. 무의미한 방법을 이해하려고 시도하더라도 루트를 선택할 때 힙 불변성을 위반하는 트리가 생성됩니다. – user2357112

+0

운동에 따르면 나는 그것을해야한다 힙입니다. 어쨌든 나는 너와 같은 의견을 가지고있다. 나는 그 초안에서 힙을 인식 할 수 없다. – Nubzor

+0

사실 그것은 [pairing heap] (https://en.wikipedia.org/wiki/Pairing_heap)이 될 수 있으며 3을 루트로 사용합니다. 매우 기묘하게 그려지지만 페어링 힙의 조건을 만족하는 것 같습니다. –

답변

0

힙 내부의 모든 요소는 단순히 마지막 잎으로를 교체 한 후 마지막 잎Heapify operation을 적용하여 O(logn)에서 삭제할 수 있습니다.

오른쪽 하단에있는 첫 번째 빈 리프에 새 노드를 추가 한 다음 해당 리프를 정리해야합니다.

Heapify : 오래는 부모가 아닌 작은하고 루트 아니므로 부모 노드와 :

  • 반복적으로 ( 힙 조건을 위반하는 요소 일반) 새로운 요소를 교환한다.
  • 새로운 요소가 leave 또는 both 자식 노드가 될 때까지 요소 자체보다 더 큰 값을 가진 자식 요소와 새로운 요소를 반복적으로 교환하십시오.
+0

이것은 바이너리 힙에 대해 말하는 것으로 보입니다. O (logn) 시간에 삭제할 수있는 것이 사실이지만 O (n) 시간이 지나면 삭제할 노드를 찾습니다. –

+0

예, 11과 10을 스와핑하면 주어진 트리가 3을 루트로하는 이진 최소 힙이됩니다. – Prince

+0

아닙니다. 바이너리 힙은 왼쪽에 채워진 리프 레벨로 균형을 유지해야합니다. 그렇지 않으면 하위 노드를 찾는 계산이 작동하지 않습니다. –

관련 문제