(key, value)로 데이터를 저장하는 자료구조 중 하나
데이터의 크기에 관계 없이 빠르게 데이터를 검색할 수 있다.
그래서 해시테이블의 평균 시간복잡도는 O(1)이다.
임의의 길이의 값을 해시함수를 사용해 고정된 크기의 값으로 변환하는 작업
그리고 HashTable은 이 해싱 작업을 사용하여 데이터를 저장하는 자료구조 이다.
키 값을 주소로 사용하는 테이블 키 값이 21이면 배열 인덱스 21에 원하는 데이터를 저장할 수 있다. 가장 간단한 형태의 해시테이블
Insert, Searching, Deletion 작업 모두에 O(1)의 시간 복잡도를 가진다.
충돌이 발생하지 않는 해시 테이블의 탐색, 삽입, 삭제 연산은
O(1)의 시간복잡도를 가지나
충돌이 발생하면 O(k)까지 걸리게 된다.
이는 같은 인덱스에 모든 키 값과 데이터가 저장된 경우라
모든 알고리즘 수행 단계에서 충돌이 발생했음을 의미한다.
때문에 이 충돌을 최대한으로 줄여 연산속도를 빠르게 만드는 것이
해시테이블의 핵심이다.
해시 테이블에서 충돌 발생시 충돌이 발생한 (데이터-키값)들을 동일한 버킷에 저장하는데
이 버킷내의 (데이터-키값)을 연결리스트 형태로 저장하는 방법이다.
원래는 해시 함수로 얻은 해시 값에 따라 (데이터-키값)을 저장하나
동일한 주소에 다른 데이터가 있다면 다른 주소도 이용할 수 있게 하는 방법이다.
지금까지 풀어본 해시 관련 코딩 테스트 문제들을 보면
딕셔너리를 활용하여 얼마나 빨리 값에 접근할 수 있는지를 보는 것 같았다.
코테에서 위에 기술한 지식까지는 사용되진 않는듯..?
references
1. Data Structure and Algorithms - Hash Table
https://www.tutorialspoint.com/data_structures_algorithms/hash_data_structure.htm
2. [DS] 해쉬 테이블(Hash Table)이란?
https://baeharam.netlify.app/posts/data%20structure/hash-table
3. Hashing Data Structure
https://www.geeksforgeeks.org/hashing-data-structure/