CS

Hash Table

서머스 2022. 10. 1. 04:06

해싱(Hashing)

- key-value를 해시 함수를 이용하여 매핑하는 것

- 빠르게 요소에 접근할 수 있다.

 

해시 테이블(Hash Table)

- 해시 함수를 이용하여 변환한 값들을 index 삼아 key-value 쌍으로 저장한 자료 구조

- 저장/검색을 하는 데 있어 복잡도가 평균적으로 O(1)로, 가장 낮다.

- 매우 빠른 응답

- 파이썬의 Dictionary, 루비의 Hash, 자바의 Map이 이에 해당한다.

- IP와 이에 해당하는 컴퓨터 이름, 주민등록 시스템 등 다양한 방식으로 응용 가능하다.

- 최소 원소를 찾는 등의 작업은 지원 X

 

Load factor ⍺

- 해시 테이블의 검색 효율과 밀접한 관련

- 해시 테이블 전체에서 얼마나 원소가 차 있는지를 나타내는 수치

- n개의 원소가 저장되어 있다면 ⍺= n/m

- Load Factor가 높아지면 해시 테이블의 효율이 떨어진다.

- 따라서 threshold를 미리 설정해 둔다. => 이를 넘어 서면 해시테이블의 크기를 두 배로 늘린 다음, 다시 해싱한다.

 

Hash Function(해시 함수)

- 해시 함수를 통해 인덱스 값이 결정된다.

- 입력 원소가 해시 테이블에 고루 저장되어야 한다.

- 계산이 간단해야 한다.

- Division method와 Multiplication method가 있다.

 

Division method

h(x) = x mod m

- m: table 사이즈(주로 소수임)

 

Multiplication method

h(x) = (xA mod 1) * m

- A : 0 < A < 1 인 상수

- m = 2^p (p는 정수)

 

 

Collision

- 해시 테이블의 한 주소를 놓고 두 개 이상의 원소가 자리를 다투는 것

- chaining과 Open Addressing이 있다.

 

 

Chaining

- 같은 주소로 해싱되는 원소를 모두 하나의 Linked List로 관리한다.

- 추가적인 Linked List 필요

 

Open Addressiong

- 빈 자리가 생길 때까지 해시값을 계속 만들어낸다.

- Linear probing, Quadratic probing, Double hashing의 방법이 있다.

 

Linear Probing

- 하지만 *Primary Clustering에 약하다.

- Primary Clustering : 특정 영역에 원소가 몰리는 현상

 

Quadratic Probing

- 하지만 *Secondary Clustering에 약하다

- Secondary Clustering : 여러 개의 원소가 동일한 초기 해시 함수 값을 갖는 현상

 

Double Hashing

- 삭제 후에는 삭제 되었다는 표시를 해야 한다.

 

 

 

 

참조 --

https://www.geeksforgeeks.org/hashing-data-structure/

 

Hashing Data Structure - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

https://nlp.chonbuk.ac.kr/AL/ch06.pdf

 

https://velog.io/@edie_ko/hashtable-with-js

 

자료구조 | 해시 테이블 hash table

오늘은 해시 테이블의 기본 개념을 정리하고, 자바스크립트의 Object와 Map이 과연 정말로 해시 테이블인지 생각해본다.

velog.io

 

'CS' 카테고리의 다른 글

HTTP와 HTTPS  (0) 2022.10.08
Network 기본  (0) 2022.10.07
Red-Black Tree  (0) 2022.10.01
Binary Heap  (1) 2022.09.30
Tree  (0) 2022.09.24