1. 해시 테이블 (Hash Table)
- 원소가 저장될 자리가 원소의 값 (키 key)에 의해 결정되는 자료구조
- 평균 상수 시간에 삽입, 삭제, 검색을 할 수 있다.
-
해시 함수
h
를 사용하여 키k
를T[h(k)]
에 저장한다.T
: 해시 테이블; (T[1]
: 해시 테이블의 인덱스 1번 엔트리)h
: U → {0, 1, ..., m-1}U
: 가능한 모든 키들의 집합m
: 해시 테이블의 크기h(k)
: 입력 키 k에 대한 해시 값- 키 k에 대한 해시 테이블의 저장 위치를 나타낸다.
저장/검색의 복잡도
- 순차 검색 (배열):
- 이진 검색 트리: 최악의 경우- / 평균-
- 균형 잡힌 이진 검색 트리 (ex: AVL 트리, 레드 블랙 트리): 최악의 경우-
- 해시 테이블: 평균
적재율 (Load Factor)
해시 테이블에 원소가 차 있는 비율은 해시 테이블의 성능에 메우 중요한 영향을 미친다. 해시테이블에 원소가 얼마나 차 있는지 나타내는 수치를 적재율 (Load Factor)이라고 한다. 즉, 해시 테이블에서의 검색 효율은 적재율과 밀접한 관련이 있다.
적재율이 높아지면 일반적으로 해시 테이블의 효율이 떨어진다.
해시 테이블의 크기가 이고, 저장된 원소의 총 수가 일 때 적재율은 으로 표기한다.
일반적으로 임계값을 미리 설정해 놓고 적재율이 이에 이르면 해시 테이블의 크기를 두 배로 늘인 다음 해시 테이블에 저장되어 있는 모든 원소를 다시 해싱하여 저장한다.
2. 해시 함수 (Hash function)
해시 함수는 키 값을 입력으로 받아 해시 테이블 상의 주소를 리턴한다. 좋은 해시 함수는 다음의 조건들을 만족한다.
- 입력 원소가 해시 테이블에 고루 저장되어야 한다. (가장 중요)
- 해시 값이 키의 특정 부분에 의해서만 결정되지 않아야 한다.
- 계산이 간단해야 한다.
해시 함수 구현 방법
-
나누기 방법 (Division Method)
- : 해시 테이블 크기
-
곱하기 방법 (Multiplication Method)
- 인 상수
2.1. 해시 함수: 나누기 방법
- ex)
- 장점: 한 번의
mod
연산으로 계산되므로 빠르다 -
단점
- 특정 값에 대해서는 해시 값이 키 값의 특정 부분에 의해 결정된다.
- 라면, 입력 원소의 하위 비트에 의해 해시 값이 결정된다.
- 일 때, 2561(0xA01), 2577(0xA11), 2593 (0xA21)은 모두 해시 값이 1이다.
- 을 소수로 선택하면 해결 가능하다
2.2. 해시 함수: 곱하기 방법
- 인 상수
-
의 주소 결정 방법
- 의 소수부만을 택한다.
- 소수부에 을 곱하여 정수부를 취한다
- 나누기 방법과 달리 은 소수(prime number)일 필요가 없으며 보통 컴퓨터 환경에 맞게 로 잡는다.
- 대신 상수 값이 해시 값 분포에 많은 영향을 끼치는데 크누스는 를 제안하였다.
-
ex)