Javascript Hash Table
#javascript#data-structure#algorithm
• • •
Hash
hash는 잘게 자르다, 뒤섞다, 다져서 섞은 음식 따위를 일컫는 단어
- 원래 형태를 알아보기 어렵게 섞어버리는 공통 특성이 존재
- CS 세계에서는 어떤 데이터를 받아서 짧고 일정한 값으로 뒤섞어 변환하는 것을 의미
- hash의 성질은 다음과 같음
- 같은 입력은 항상 같은 출력
- 출력 길이는 고정
- 입력이 조금만 달라도 출력은 크게 달라짐
- 되돌릴 수 없음
Hash Table
- 값을 저장할 위치를 계산해서 바로 찾아가는 테이블
- 데이터 ──▶ 해시 함수 ──▶ 인덱스 ──▶ 저장 위치
- 일반 배열을 통해 값을 찾으려면 처음부터 끝까지 순회하는
O(n)의 시간 복잡도
- 해시 테이블은 위치를 계산해서 바로 점프할 수 있기 때문에 평균
O(1)의 시간 복잡도
- 핵심 용어
- Key: 검색 기준
- Value: 실제 저장할 데이터
- Hash Function: key를 숫자로 변환, 테이블 크기에 맞게 조정
- Bucket: 실제로 데이터가 들어가는 칸, 배열의 한 슬롯
- Collsion: 서로 다른 key가 같은 bucket으로 가는 경우 발생하는 충돌
- [[ modulo ]] 연산은 Key 값을 테이블 크기로 나누어 나머지를 인덱스로 변환하는 기법
Javascript's Hash Table
Object
- JS에서 가장 오래된 해시 기반 구조
- 키는
string, symbol만 가능
- V8 엔진의 경우 [[ Hidden Class ]] 지원으로 해시 기반 접근보다 빠를 수 있음
Map
- 모든 타입을 키로 사용 가능
- 삽입 순서 보장
- 프로토타입 이슈 없음
- 키-값 쌍의 빈번한 추가/제거에 관해서는 객체보다 성능이 좋다고 함
Set
- 내부적으로 해시 기반
- 값의 존재 여부 체크에 최적
WeakMap, WeakSet
- 키는 객체만 가능
- 약한 참조라서 GC에 의해 자동 정리
- 순회 불가
published 11 months ago · last updated 10 days ago