이진 힙에 대한 많은 토론에서 일반적으로 감소 키만 최소 힙에 대해 지원되는 작업으로 나열됩니다. 예를 들어 CLR 챕터 6.1 및 이 위키 백과 페이지 입니다. min-heap에 대해 증가 키가 일반적으로 나열되지 않는 이유는 무엇입니까? 자식이 x보다 크지 않을 때까지 증가 된 요소 (x)를 자식의 최소값으로 반복적으로 교환하여 O (높이)에서 그렇게 할 수 있다고 생각합니다.
예 :
IncreaseKey(int pos, int newValue)
{
heap[pos] = newValue;
while(left(pos) < heap.Length)
{
int smallest = left(pos);
if(heap[right(pos)] < heap[left(pos)])
smallest = right(pos);
if(heap[pos] < heap[smallest])
{
swap(smallest, pos);
pos= smallest;
}
else return;
}
}
위의 내용이 맞습니까? 그렇지 않다면 왜? 그렇다면 왜 최소 힙에 대해 키를 올리지 않습니까?