binary heap 구현 시,

root 를 0 으로 하는 것과 1 로 하는 것의 차이를 보자.


* i 의 child 

 
left child
right child
0-based i * 2 + 1(i+1) * 2
1-basedi * 2i * 2 + 1

 

* i 의 parent

 
i 가 left 일 때
i 가 right 일 때
0-basedi / 2(i-1) / 2
1-basedi / 2i / 2


root 의 index 를 1 로 하여 구현하는 것이 계산이 더 간단하다.



뿐만 아니라 다음과 같은 이점이 있다.











depth 01






depth 123





depth 24567



depth 389101112131415


index 를 2 진수로 변환하면, 같은 depth 인 경우 자리 수가 같아진다.











depth 01






depth 11011





depth 2100101110111



depth 310001001101010111100110111101111



또한 가장 왼쪽 node 의 index 는 항상 첫 자리가 1 이고 나머지 자리는 모두 0 이 된다.

가장 마지막 node 의 index 는 항상 모든 자리가 1 이다.


이런 이유로, index 값만으로 depth 를 알 수 있고 그 외 유용한 연산을 더 빠르고 간편하게 해 낼 수 있다.

특별한 이유가 없다면 binary heap 구현은 root index 를 1 로 하는 게 좋다.


: