fffo
해시 테이블 본문
해시 테이블
해시
- 해시 : 데이터를 새로운 형태의 데이터로 바꿈
- 해시 테이블 : 데이터의 해시 값을 테이블 내의 주소로 이용
- 길이가 서로 다른 입력 데이터에 대해 일정한 길이의 출력을 만들 수 있음
나눗셈법
- 해시 함수가 테이블 크기로 키값을 나눈 나머지를 반환
- 나눗셈법으로 구현된 해시 함수가 테이블 내의 공간을 효율적으로 사용하기 위해서는 테이블의 크기를 2의 제곱수와 거리가 먼 소수로 지정 하는 것이 좋음
자릿수 접기
- 숫자 자릴를
충돌과 클러스터 (Collision, Cluster)
- 충돌 : 키 값이 다른 두 자료에 대해 해시 함수가 같은 해시 값을 낼 때
- 클러스터 : 해시 테이블 내의 일부 지역에 데이터가 모이는 문제
충돌 해결법
체이닝
- 충돌이 일어날 때 데이터를 해당 주소에 있는 링크드 리스트에 삽입
- 해시 테이블의 주소 바깥에 새로운 공간을 할당 → 개방 해싱
- 해시 함수에 의해 얻어진 주소만 사용 → 폐쇄 주소법
- 링크드 리스트를 이진 탐색 트리로 만들면 체이닝의 성능을 더 끌어올릴 수 있음
개방 주소법
- 충돌이 일어날 때 다른 비어있는 주소를 사용하는 것을 허용 → 개방 주소법
- 선형 탐사 : 충돌이 일어났을 때 선형적으로 빈 공간을 탐사 → 클러스터 유발 가능
- 제곱 탐사 : 클러스터를 방지하기 위해 탐사 폭이 제곱수만큼 늘어남 →같은 해시 값을 갖는 데이터에 대해 2차 클러스터를 막아주지 못함
- 이중 해싱 : 탐사 폭 또한 해시 함수를 통해 주소의 규칙성을 제거
- 재해싱 : 해시 테이블의 크기를 늘리고 늘어난 테이블 크기에 맞춰서 모든 데이터를 재해싱(통계적으로 공간 사용률 70%~ 80%에 재해싱 권장)
'Programming > Algorithm' 카테고리의 다른 글
| 문자열 - 뉴스 클러스터링 (0) | 2021.09.24 |
|---|---|
| 문자열 - 올바른 괄호 (0) | 2021.09.24 |
| 문자열 - 다음 큰 숫자 (0) | 2021.09.23 |
| 스택/큐 - 다리를 지나는 트럭 (0) | 2021.09.23 |
| 우선순위 큐와 힙 (0) | 2021.09.23 |
Comments