해쉬 테이블(Hash Table)이란? (파이썬의 Dictionary)
- 키에 데이터를 저장하는 데이터 구조이다.
- 데이터 검색 속도가 매우 빠르다
- 배열로 미리 해쉬 테이블 사이즈만큼 생성 후 사용한다.
용어
- 해쉬(Hash) : 임의의 값을 고정 길이로 변환하는 것
- 해싱함수(Hashing Function) : key를 가지고 연산하여 데이터의 위치를 찾을 수 있는 함수
- 해쉬 값(Hash Value) : 해싱함수를 이용하여 key에 대한 연산을 통해 해쉬값을 알아냄
- 해쉬 주소(Hash Address) : 해쉬 값을 기반으로 key에 대한 데이터의 위치를 찾아냄
- 슬롯(Slot) : 한개의 데이터를 저장할 수 있는 공간
장점
- 데이터 검색속도가 빠름 (데이터 저장, 데이터 읽기) // 배열과 비교하여 알아두기
- 해당 키에 대한 중복 데이터 확인이 쉬움
단점
- 저장공간이 더 많이 필요함 // 대신 속도가 빠름
- 데이터 저장 시 충돌의 경우를 대비하여 이를 해결하기 위한 별도의 자료구조가 필요함
충돌(Collision) 해결 알고리즘
1. Chaining : 개방해싱(Open Hashing) 기법중 하나로 해쉬 테이블 저장공간 이외의 공간을 활용하여 충돌을 해결.
(충돌 시 해당 주소의 뒤에 링크드 리스트를 연결시켜 데이터를 저장한다.)
2. Linear Probing : 폐쇄해싱(Close Hashing) 기법 중 하나로 해쉬 테이블 저장공간 안에서 충돌을 해결.
(충돌 시 해당 해싱주소의 다음 주소부터 빈공간이 나오는 순서대로 저장, 저장공간의 활용도를 높인다.)
3. 해쉬 함수를 재정의하여 저장공간을 확대하는 기법
해쉬 테이블의 시간복잡도는?
- 일반적인 경우로 충돌이 없다면 O(1)로 말할 수 있지만 최악의 경우 충돌이 모두 발생한다면 O(n)
728x90
'자료구조 & 알고리즘 & cs > 자료구조' 카테고리의 다른 글
[TIL] 힙 - Heap (0) | 2023.03.08 |
---|---|
[TIL] 트리 - Tree (0) | 2023.03.06 |