내 잡다한 노트

해시(Hash)와 해시테이블 본문

자료구조

해시(Hash)와 해시테이블

peanutwalnut 2022. 7. 11. 22:19

# 정의

해시테이블은 해시함수를 이용하여 키를 해시값으로 매핑하고 이 해시값을 인덱스삼아

데이터를 key와 함께 저장하는 자료구조이다.

 

# 해시함수

해시 함수의 정의는 key를 고정된 길이의 hash로 변경해주는 역할을 한다.

이 과정을 해싱이라고 한다.

key ---(해시함수)---> 해시

해시는 저장위치 즉 인덱스가 된다.

 

# 해시테이블 구성

key : 해쉬 함수의 input이고, key를 그대로 인덱스로 사용할 경우에는 key의 길이만큼의 정보를

저장해야하는 공간도 따로 마련해야 해서 고정된 길이의 해시로 변경하는 것이다.

 

해시 함수 : key를 고정된 길이의 해시로 변경해주는 역할을 한다.

서로 다른 key가 해싱후 같은 해시 값이 나오는 경우가 있다. 이를 해시충돌이라고 한다.

이 충돌이 안나올수록 좋다.

 

해시테이블 : 해시값을 주소나 인덱스 삼아 데이터와 함께 저장하는 자료구조.

 

# 장점

-- 빠른 검색 속도 : 평균적으로 O(1)
-- 빠른 삽입 및 삭제 : 평균적으로 O(1)
-- 키-값 쌍
-- 가변 크기

 

# 단점

-- 공간 효율성 : 메모리 사용이 비효율적일 수 있다. 충돌을 방지하기 위해
추가적인 공간을 할당해야 할 수도 있다.
-- 충돌 : 두 개 이상의 키가 동일한 해시 값을 가지는 경우를 충돌이라 한다.
해결 방법으로는 개방 주소법, 체이닝이 필요하다.
-- 해시 함수의 중요성 : 좋은 해시 함수는 데이터를 균일하게 분산시키지만, 나쁜 해시 함수는 많은 충돌을 일으킨다.
-- 순서 정보 부재 : 데이터의 순서를 유지하지 않는다.

 

# 해시 충돌시 해결 방법

1. Chaining

체이닝은 저장소에서 충돌이 일어나면 기존 값과 새로운 값을 연결리스트로 연결

장점 : 미리 충돌을 대비해 공간을 많이 잡을 필요가 없다.

단점 : 같은 해쉬에 자료들이 많이 여녀되면 검색시 효율이 낮아진다.

 

2. 개방주소법

비어있는 해시를 찾아 저장하는 방법. 그래서 1:1관계를 유지하도록 한다.

선형으로 찾거나 제곱으로 탐색하는 등 여러 방법이 있음.

 

3. division method

기본적인 해시함수로 숫자로 된 키를 해시테이블 크기 m으로 나눈 나머지를 해시값으로 변환.

 

 

 

'자료구조' 카테고리의 다른 글

힙 Heap  (0) 2022.05.16
트리 (Tree)  (0) 2022.05.07