해시 맵과 같은 표현
키를 값에 매핑할 수 있는 구조인 연관 배열 추상 자료형(ADT)을 구현하는 자료구조
가장 큰 특징 : 대부분의 연산이 분할 상환 분석에 따른 시간 복잡도가 O(1).
=> 덕분에 데이터 양에 관계 없이 빠른 성능 기대 가능
임의 크기 데이터를 고점 크기 값으로 매핑하는 데 사용할 수 있는 함수
가장 널리 쓰이는 정수형 해싱 기법 : 나눗셈 방식
h(x) = x mod m
h(x) : 결과
x : 입력 값
m : 해시 테이블 크기, 일반적으로 2의 멱수에 가깝지 않은 소수가 좋음
해싱(Hashing) : 해시 테이블을 인덱싱 하기 위해 해시 함수를 사용하는 것
=> 정보를 가능한 한 빠르게 저장 & 검색하기 위해 사용하는 중요 기법 중 하나.
최적 검색이 필요한 분야에 사용됨. 심볼 테이블 등의 자료구조를 구현하기에도 적합함.
성능 좋은 해시 함수들 특징
로드 팩터(Load Factor)
해시 테이블에 저장된 데이터 개수 n을 버킷 개수 k로 나눈 것
load factor = n/k
=> 로드 팩터 비율에 따라 해시 함수의 재작성 및 크기 조정 여부 결정 & 효율성 측정 가능
로드 팩터 크기와 해시 테이블 성능은 반비례
java 10에서는 0.75 정도를 판단의 기점으로 생각(0.75보다 높으면 재설계)
해시 값이 같을 때를 일컫음.
해결 방법
오픈 어드레싱 방식이 개별 체이닝보다 일정 로드 팩터까지는 효율 우수
Dictionary, 오픈 어드레싱 방식으로 구현되어있음
Phthon의 로드 팩터 : 0.66
출처 : 파이썬 알고리즘 인터뷰