Page 256 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 256

힙은 루트가 가장 큰(혹은 작은)
                                                             값이어야 합니다.
                    a       4                     b      9
                                                                   모든 부모와 자식의 관계는 항상
                         6      8                    7      8      부모의 값 ≧ 자식의 값이 성립되어야 합니다.

                       7   5  9                     6  5   4
                                      [그림 6-33] 완전이진트리를 힙으로 전환하는 과정


                   힙에서 부모와 자식 관계는 일정하지만 형제 사이의 대소 관계는 일정하지 않습니다. 예를 들

                   어  그림  b      에서 형제인 7과 8의 작은 쪽 7은 왼쪽에 있지만 6과 5의 작은 쪽 5는 오른쪽에 있
                   습니다.
                      힙은 형제의 대소 관계가 정해져 있지 않은 특성이 있기 때문에 부분순서트리(partial ordered tree)라고도 합니다.


                   그림 6-34는 힙의 요소를 배열에 저장하는 과정을 나타낸 것입니다. 먼저 가장 위쪽에 있는
                   루트(9)를 a[0]에 넣습니다. 그리고 한 단계 아래 요소를 왼쪽에서 오른쪽으로 따라 갑니다.

                   이때 인덱스의 값을 1씩 늘리면서 배열의 각 요소에 힙의 요소를 대입합니다.


                                  0
                                  10
                                                         루트(가장 큰 값)
                             1         2
                             9         5
                                                      0   1   2   3   4   5   6   7   8   9
                          3      4  5      6          10  9   5   8   3   2   4   6   7   1
                          8     3   2      4
                        7   8  9
                        6  7   1

                                         [그림 6-34] 힙 요소와 배열 요소의 대응


                   이 과정을 거쳐 힙의 요소를 배열에 저장하면 부모와 자식의 인덱스 사이에 다음과 같은 관계
                   가 성립합니다.


                     1. 부모는 a[(i - 1) / 2]
                     2. 왼쪽 자식은 a[i * 2 + 1]
                     3. 오른쪽 자식은 a[i * 2 + 2]



                   정말로 이런 관계가 성립되는지 그림 6-34의 트리를 보면 a[3]의 부모는 a[1]이고 왼쪽, 오른
                   쪽 자식은 각각 a[7], a[8]입니다. 그리고 a[2]의 부모는 a[0]이고 왼쪽, 오른쪽 자식은 각각

                   a[5], a[6]입니다. 모두 위의 관계를 만족합니다.




                   256   C 알고리즘
   251   252   253   254   255   256   257   258   259   260   261