데이터를 다루는 기법 중 하나로 검색과 저장을 빠르게하는 자료구조이다.
연관 배열구조이다.해시 함수 예시
1)Division Method: 나눗셈을 이용하는 방법으로 입력값을 테이블의 크기로 나누어 계산한다. ex) 주소 = 입력값 % 테이블의 크기
2)Digit Folding: 각 Key의 문자열을 ASCII(아스키) 코드로 바꾸고 값을 합한 데이터를 테이블 내의 주소로 사용하는 방법이다.
3)Multiplication Method: 숫자로 된 Key값 K와 0과 1사이의 실수 A, 보통 2의 제곱수인 m을 사용하여 다음과 같은 계산을 해준다. h(k)=(kAmod1) × m
4)Univeral Hashing: 다수의 해시함수를 만들어 집합 H에 넣어두고, 무작위로 해시함수를 선택해 해시값을 만드는 방법이다.
장점
배열(버킷)을 사용하여 데이터를 저장하기 때문에 검색 속도가 빠르다.해시테이블은 각각의 key값에 해시 함수를 적용해 배열의 고유한 인덱스를 생성하고 이 index를 활용해 값을 저장하거나 검색하게 된다. 여기서 실제 값이 저장되는 장소를 버킷 또는 슬롯이라고 한다.
단점
해쉬 함수를 통해 나온 값이 동일한 슬롯에 해시되는 것을 해쉬 충돌이라고 한다.
저장소에서 충돌이 일어나면 기존 값과 새로운 값을 연결리스트로 연결하는 방법이다.
장점
충돌이 나면 그때 공간을 만들어서 연결시킬 수 있다. 메모리 사용량을 줄여준다.
해시 테이블의 확장이 필요없어 간단하게 구현이 가능하고, 손쉽게 삭제할 수 있다.
단점
같은 해쉬에 자료들이 많이 연결되면 검색시 효율이 낮아진다.
데이터의 수가 많아지면 동일한 버킷에 chaining되는 데이터가 많아지며 그에 따라 캐시의 효율성이 감소한다.
추가적인 메모리를 사용하는 Chaining 방식과 다르게 비어있는 해시 테이블의 공간을 활용하는 방법이다.
장점
추가적인 메모리 공간을 사용하지 않기 때문에 Separate Chaining 방식보다 메모리를 덜 사용한다.
단점
해시 테이블을 재정리 해주는 작업이 필요하다.
삭제하는 방법이 비교적 어렵다.