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

11-1  해시법









                        해시법은 검색과 더불어 데이터의 추가와 삭제도 효율적으로 수행할 수 있는 방법입니다.



                        정렬된 배열에 새로운 값 추가하기

                        아래 그림 11-1  a 의 배열 a를 봅시다. 요소가 13개인 배열의 앞쪽 10개의 요소에 데이터가
                        오름차순으로 정렬된 상태로 저장되어 있습니다.


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

                        b    5   6    14  20   29  34   35  37   51  69   75   -   -

                                                           추가하는 위치에 따라 모든 요소를 이동해야
                                                           할 수도 있습니다.
                                           [그림 11-1] 정렬된 배열에 데이터를 추가


                        이 배열에 35를 추가하려면 아래와 같은 작업이 필요합니다.


                         1. 삽입할 위치가 a[5]와 a[6] 사이임을 이진검색법으로 조사합니다.
                         2. 그림  b  와 같이 a[6] 이후의 모든 요소를   하나씩 뒤로 이동합니다.
                         3. a[6]에 35를 대입합니다.



                        요소 이동에 필요한 복잡도(time-complexity)는 O(n)이며 이 비용은 적은 비용이 아닙니다.
                           데이터를 삭제할 때도 같은 비용 O(n)이 발생합니다.




                        해시법
                        해시법(hashing)은 데이터를 저장할 위치(인덱스)를 간단한 연산으로 구하는 것으로, 검색뿐만
                        아니라 추가, 삭제도 효율적으로 수행하는 방법입니다. 다음 그림 11-2의  a 에서 볼 수 있는

                        배열의 키 값(각 요소의 값)을 배열의 요소 개수 13으로 나눈 나머지로 다시 정리하면 표 11-1
                        과 같습니다. 이렇게 표에 정리한 값을 해시 값(hash value)이라고 하며, 이 해시 값은 데이터
                        에 접근할 때 사용합니다.

                           hash는 ‘다진 고기 요리’, ‘뒤범벅’, ‘뒤죽박죽’, ‘잡동사니’라는 뜻이 담겨 있습니다.
                                                                                          11•해시  429
   424   425   426   427   428   429   430   431   432   433   434