Search

해시(Hash)

대분류
CS
소분류
알고리즘
유형
자료구조
부유형
해시 테이블
해시 맵
주요 레퍼런스
https://velog.io/@hanif/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%ED%95%B4%EC%8B%9C
최종 편집 일시
2024/10/27 15:32
생성 일시
2024/07/16 05:30
13 more properties

해시

데이터를 다루는 기법
검색과 저장을 아주 빠르게 하는 자료구조
데이터를 저장할 때 Key-Value형태(딕셔너리)로 데이터가 존재
Key값이 배열의 인덱스로 저장되기 때문에 검색과 저장이 빠르게 일어나게 됨

해시 함수(Hash Function) & 해싱(Hashing)

해시 함수
Key값을 고정된 길이의 해시로 변환하는 역할
해싱
해시 함수에서 Key값을 hash로 변환하는 과정
해시 값, 해시코드
해시 함수에서 Key값을 해싱 과정을 통해
해시 값
해시 코드
로 변경하며, 이 해시 값이 저장되는 위치가 됨.
해시 충돌
서로 다른 키(key)가 같은 해시가 되는 경우
해시 충돌을 일으키는 확률을 최대한 줄이는 함수를 만드는 것이 중요

해시 테이블

연관 배열구조를 이용하여 데이터를 Key와 Value로 저장하는 자료구조
연관 배열 : 키 하나와 값 하나가 연관되어 있으며 키를 통해 연관되는 값을 얻을 수 있는 자료구조 ex)맵, 딕셔너리, 연상 배열, 결합 배열 일반적인 명령 지원 - 키와 값이 주어졌을 때, 연관 배열이 그 두 값을 저장하는 명령 - 키가 주어졌을 때, 연관되는 값을 얻는 명령 - 키와 새로운 값이 주어졌을 때, 원래 키에 연관된 값을 새로운 값으로 교체하는 명령 - 키가 주어졌을 때, 그 키에 연관된 값을 제거하는 명령
해시 테이블 : 해시 함수를 사용하여 색인(index)을 버킷(bucket)이나 슬롯(slot)의 배열로 계산

장점

중복 제거
데이터 캐싱, 보안에 주로 사용
배열 인덱스로 접근하기 때문에 삽입, 삭제 등의 연상이 빠름

단점

공간 복잡도가 커짐
충돌이 발생할 가능성 있음
순서 배열에는 부적합

해시 테이블 & 해시 맵

Java의 경우, 해시 테이블과 해시 맵의 가장 큰 차이는 동기화 지원 여부와 널(Null) 처리여부
해시 테이블
해시 맵
동기화 고려
O
Null 허용
X

충돌

서로 다른 문자열이 해시 함수를 통하여 해싱한 해시값이 중복인 경우
충돌이 많아질수록 탐색의 시간 복잡도가 O(1)에서 점점 O(n)에 가까워지게 됨
충돌 해결 방법
Separating Chaining - LinkedList, Tree(Red-Black Tree)
Open addressing - Linear Probing, Quadratic Probing, Double hashing

Separating Chaining

JDK 내부에서 사용하는 충돌처리 방식
LinkedList를 사용하는 방식
Tree(Red-Black Tree)를 사용하기도 함