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

[표 11-1] 키 값과 해시 값의 대응
                    키 값                    5     6    14   20    29   34    37   51    69   75

                    해시 값(13으로 나눈 나머지)      5     6    1     7    3     8    11    12   4     10


                   해시 값이 인덱스가 되도록 원래의 키 값을 저장한 배열이 아래의 해시 테이블(hash table)입
                   니다. 해시 테이블은 그림 11-2의  a  처럼 나타낼 수 있습니다.

                      예를 들어, 14를 a[1]에 저장하는 이유는 해시 값(13으로 나눈 나머지)이 1이기 때문입니다.


                         0   1    2   3    4   5    6   7    8   9    10  11   12
                    a   -    14  -    29  69   5    6   20  34   -   75   37  51

                    b   -    14  -    29  69   5    6   20  34   35  75   37  51
                                    새로운 값(35)을 추가하더라도 다른 요소가 이동할
                                    필요가 없습니다.

                                      [그림 11-2] 해시에 새로운 값(35)을 추가


                   그러면 배열에 35를 추가하는 경우를 생각해 보겠습니다. 35를 13으로 나눈 나머지는 9이므
                   로  b  처럼 a[9]에 값(35)을 저장합니다. 이전의 ‘추가한 값’ 이후의 배열 요소를 모두 옮겼던
                   경우와는 다르게 새로운 값을 추가하더라도 다른  배열 요소를 뒤로 옮기지 않아도 됩니다.

                   이렇게 키 값(35)을 가지고 해시 값(9)을 만드는 과정을 해시 함수(hash function)라고 합니다.
                   보통 해시 함수는 여기에서 살펴봤듯이 ‘나머지를 구하는 연산 또는 이런 나머지 연산을 다시
                   응용한 연산’을 사용합니다. 그리고 해시 테이블의 각 요소를 버킷(bucket)이라고 합니다. 지
                   금부터는 해시 테이블의 요소를 버킷이라고 부르겠습니다.




                   충돌

                   이어서 배열에 새로운 값 18을 추가하는 경우를 생각해 보겠습니다. 18을 13으로 나눈 나머
                   지인 해시 값은 5이고 저장할 곳은 버킷 a[5]입니다. 그런데 그림 11-3처럼 이 버킷은 이미
                   채워져 있습니다. 이 경우에서 볼 수 있듯이 키 값과 해시 값의 대응 관계가 반드시 1대1이라

                   는 보증은 없습니다(보통 n대1입니다). 이렇게 저장할 버킷이 중복되는 현상을 충돌(collision)
                   이라고 합니다.


                     0    1   2    3   4    5   6    7   8    9   10   11  12
                     -   14   -   29   69   5   6   20   34  35   75   37  51
                                              삽입할 x[5]는 이미 채워져 있습니다.
                                           18

                                      [그림 11-3] 해시에 추가할 때의 충돌

                   430   C 알고리즘
   425   426   427   428   429   430   431   432   433   434   435