SMALL
해싱
특정 항목 검색 시, 탐색 키에 대한 산술적 연산으로 키가 있는 위치를 계산하여 바로 찾아가는 방법
- O(1) 시간에 자료에 접근
직접 번지 테이블
모든 가능한 키들의 집합 U, 실제 사용되는 키들의 집합 k가 있고 자료가 담긴 테이블 T가 있음
T(k)를 통해 자료를 검색할 수 있음
해시테이블
모든 가능한 키들의 집합 U에 비해 실제 사용되는 키들의 집합 k가 작을 경우 메모리가 낭비됨
→ 실제 사용되는 집합 k의 사이즈로 줄임
키 값 k의 자료를 저장할 위치를 계산하는 해시 함수(h)를 사용하여 자료를 h(k)에 저장
해시 함수
모든 키들의 집합 U={0,1,2,...N}를 해시 테이블 T[0 .. m-1]의 위치에 대응시킴
테이블의 인덱스 범위를 줄여줌
h(k)는 키 k의 해시 값(주소)이라 함
키 두 개가 동일한 위치가 되는 상황을 충돌이라 함
- 서로 다른 키 값을 해시 함수에 적용했는데, 반환된 해시 주소가 동일한 경우
- 해시 함수가 아무리 해시 주소를 공평하게 분배해도 해시 테이블에 저장되는 키에 해당하는 자료의 수가 증가하면 충돌남
- 해결법 - 체이닝(Chaining), 개방주소법(Open addressing)
체이닝(Chaining)
해시 테이블의 구조를 변경하여 각 버킷에 하나 이상의 키 값을 가지는 자료가 저장될 수 있도록 하는 방법
하나의 버킷에 여러 개의 키 값을 저장하도록 연결 리스트 활용

개방주소법(Open addressing)
해시 함수로 구한 주소에 빈 공간이 없어 충돌이 발생하면, 그 다음 공간에 빈 공간 여부를 조사
- 빈 공간이 있으면, 거기에 저장
- 빈 공간이 없으면, 나올때까지 반복

'Coding Test > SWEA' 카테고리의 다른 글
| [Advanced] 8. 문자열 탐색 - 이론편(3) (0) | 2021.07.30 |
|---|---|
| [Advanced] 8. 문자열 탐색 - 이론편(2) (0) | 2021.07.30 |
| [Advanced] 7. 그래프의 최소 비용 문제 - 이론편 (0) | 2021.07.29 |
| [Advanced] 6. 그래프의 기본과 탐색 - 이론편 (0) | 2021.07.27 |
| [Advanced] 5. 백트래킹 - 이론편 (0) | 2021.07.25 |
댓글