데이터를 효율적으로 관리하기 위해, 임의의 길이 데이터를 고정된 길이의 데이터로 매핑하는 것
해시 함수를 구현하여 데이터 값을 해시 값으로 매핑한다.
정의
정의
해시 함수를 사용하여 key를 해시값으로 매핑하고, 이 해시값을 색인(인덱스) 또는 주소삼아 데이터를 key와 함께 저장하는 자료구조 이다.
단순하게, key & value로 이루어진 자료구조 라고 생각하면 된다.
구성
key
- 고유한 값, hash function 의 Input이 된다.
- key 값을 그대로 저장소의 색인으로 사용할 경우 key의 길이만큼의 정보를 저장해야 하는 공간도 따로 마련해야 하기 때문에(key의 길이가 제각각 일 수 있다.), 고정된 길이의 해시로 변경한다.
hash function
- key를 고정된 길이의 hash 로 변경해 주는 역할을 한다.
- 서로 다른 key가 hashing 후 같은 hash 값이 나오는 경우가 있다. 이를 해시 충돌이라고 부른다. 해시 충돌 발생확률이 적을 수록 좋다.
- 해시 충돌이 균등하게 발생하도록 하는것도 중요하다. 모든 키가 같은 해시값이 나오게 되면, 데이터 저장시 비효율성도 커지고 보안지 취약해져서 좋지 안다.
value
- 저장소(버킷, 슬롯)에 최종적으로 저장되는 값으로, hash와 매칭되어 저장되어진다.
has table
- 해시 함수를 사용하여 키를 해시값으로 매핑하고, 이 해시값을 주소 또는 색인 삼아 데이터(value)를 key와 함께 저장하는 자료구조 이다.
- 데이터가 저장되는 곳을 버킷, 슬롯 이라고 한다.
장점
단점
체이닝
연결 리스트로 노드를 계속 추가해 나가는 방식
제한 없이 계속 연결 가능, but 메모리 문제
Open Addressing
해시 함수로 얻은 주소가 아닌, 다른 주소에 데이터를 저장할 수 있도록 허용하는 방식
해당 키 값에 저장되어 있으면 다음 주소에 저장
선형 탐사
제곱 탐사