티스토리 뷰
해시(Hash)
Abstract
- 데이터를 효율적으로 관리하기 위해, 임의의 길이 데이터(input)을 고정된 길이의 데이터(key)로 매핑하는 것
- 해시 함수를 구현하여 데이터를 해시 값으로 매핑
사용 이유
- 적은 자원으로 많은 데이터를 효율적으로 관리 하기 위함
- 하드 디스트나 클라우드에 존재하는 무한한 데이터들을 유한한 개수의 해시값으로 매핑하면 적은 메모미로도 프로세스 관리가 가능해짐
- input에 대해 언제나 동일한 Hash 값을 리턴, index를 알면 빠른 데이터 검색 이 가능해짐
- 검색시 해시 테이블의 시간 복잡도는 O(1) (이진탐색트리는 O(logN)
해시 충돌(Hash Collsion)
- 데이터가 많아지면, 다른 데이터에 대해 동일한 해시 값으로 충돌이 일어나는 현상(비둘기집 원리)
해시 충돌(Hash Collision) 대처 방안
- 체이닝(Chaining) : 연결리스트로 동일한 hash값을 찾는 노드를 계속 추가해나가는 방식(메모리 문제가 생길 수 있음)
- 개방주소법(Open Addressing) : 해시 함수로 얻은 주소가 아닌 다른 주소에 데이터를 저장(새로운 키 값에도 데이터가 저장되어 있다면 다음 주소에 저장)
- 선형탐사 : 해시함수로 얻은 주소에서 다음 주소로 넘어가며 비어있는 주소를 탐색
- 제곱탐사 : 해시함수로 얻은 주소에서 n^2만큼 다음주소로 넘어가서 비어있는 주소를 탐색
- 이중해시 : 다른 해시 함수를 한 번 더 적용
- 재해싱 : Hash Table의 크기를 리고, 새로운 Hash Table에 크기게 맞추어 모든 데이터를 다시 해싱, 상당한 비용 발생
'자료구조' 카테고리의 다른 글
B 트리(B-Tree) (0) | 2021.12.24 |
---|---|
트라이(Trie) (0) | 2021.12.24 |
이진탐색트리(Binary Search Tree, BST) (0) | 2021.12.23 |
트리(Tree) (0) | 2021.12.23 |
힙(Heap) (0) | 2021.12.23 |
Comments