반응형

🚀 1. 해시 테이블(Hash Table)란?
**해시 테이블(Hash Table)**은 키(Key)와 값(Value)을 저장하는 자료구조로, 데이터를 빠르게 검색할 수 있어요.
💡 쉽게 이해하기
- 📦 **사전(Dictionary)**과 비슷하게 동작해요!
- 🔢 데이터를 저장할 때, **해시 함수(Hash Function)**를 사용해 특정 위치(해시 버킷)에 저장해요.
- 🚀 해시 함수를 통해 O(1) 시간 복잡도로 데이터 검색이 가능해요!
📌 해시 테이블의 기본 개념
# Python의 딕셔너리를 활용한 해시 테이블 구현
hash_table = {}
hash_table['apple'] = 5
hash_table['banana'] = 3
print(hash_table['apple']) # 출력: 5
➡ 딕셔너리는 내부적으로 해시 테이블을 사용하여 빠르게 데이터를 검색합니다.
🚀 2. 해시 함수(Hash Function)란?
해시 함수는 임의의 데이터를 일정한 크기의 값(해시 값)으로 변환하는 함수예요.
📌 좋은 해시 함수의 특징
- 🎯 항상 같은 입력에 대해 같은 해시 값을 반환해야 해요.
- 🔄 충돌(Collision)이 최소화되어야 해요.
- ⚡ 빠르게 계산할 수 있어야 해요.
💡 Python에서 내장된 hash() 함수 활용하기
print(hash("apple")) # 실행할 때마다 동일한 해시 값 출력
print(hash("banana"))
➡ 해시 함수는 특정 값을 일정한 길이로 변환하는 역할을 합니다.
🚀 3. 해시 충돌(Hash Collision)과 해결 방법
해시 테이블은 같은 해시 값을 갖는 두 개 이상의 키가 존재할 수도 있어요. 이를 **해시 충돌(Hash Collision)**이라고 해요.
📌 해시 충돌 해결 방법
✅ 1) 체이닝(Chaining)
- 🚀 같은 해시 값의 데이터를 연결 리스트(Linked List)로 저장하는 방식
- 📌 Python의 defaultdict(list)을 사용해 구현할 수 있어요.
from collections import defaultdict
hash_table = defaultdict(list)
hash_table[hash("apple")].append("apple")
hash_table[hash("banana")].append("banana")
print(hash_table)
✅ 2) 개방 주소법(Open Addressing)
- 📦 충돌이 발생하면 빈 공간을 찾아 데이터를 저장하는 방식
- 🔄 선형 탐사(Linear Probing), 이차 탐사(Quadratic Probing) 등의 기법을 활용
➡ Python의 dict는 체이닝 방식을 사용합니다!
🚀 4. 해시 테이블의 시간복잡도
연산 종류 평균 시간복잡도 최악 시간복잡도 (충돌 발생 시)
삽입(Insert) | O(1) | O(n) |
삭제(Delete) | O(1) | O(n) |
검색(Lookup) | O(1) | O(n) |
➡ 일반적으로 해시 테이블은 O(1)의 속도로 매우 빠르지만, 해시 충돌이 많아지면 O(n)까지 성능이 저하될 수 있어요.
🚀 5. 해시 테이블 활용 예시
📌 해시 테이블은 어디에서 사용될까요?
- 사전(Dictionary) 구현 → 키-값 쌍을 저장하는 가장 기본적인 활용법
- 캐싱(Cache) → 웹 페이지나 데이터베이스 결과를 빠르게 저장하여 다시 사용할 때
- 중복 검사(Duplicate Check) → 한 번 등장한 데이터를 빠르게 확인하기 위해 사용
- 빈도수 계산(Frequency Count) → 문자열 내 단어 빈도 수 세기 등
- 데이터베이스 인덱싱(Indexing) → 데이터베이스에서 빠른 검색을 위해 사용
➡ 해시 테이블은 실생활에서 매우 자주 활용되는 자료구조입니다! 😊
✅ 마무리 정리
- 해시 테이블은 키-값을 저장하는 빠른 자료구조로, 해시 함수를 활용해 데이터를 저장합니다.
- 해시 충돌을 해결하는 방식으로 체이닝과 개방 주소법이 존재합니다.
- 해시 테이블은 O(1) 시간복잡도를 가지지만, 충돌이 많아지면 O(n)까지 느려질 수 있습니다.
- Python의 딕셔너리는 해시 테이블을 기반으로 구현됩니다.
반응형
'IT > algorithm' 카테고리의 다른 글
[Python] 알고리즘 개념12 - 트리(Tree)와 이진 탐색 트리(BST) (0) | 2025.02.23 |
---|---|
[Python] 알고리즘 개념11 퀴즈 - 우선순위 큐와 힙 (0) | 2025.02.23 |
[Python] 알고리즘 개념11 - 우선순위 큐와 힙(Heap) (0) | 2025.02.23 |
[Python] 알고리즘 개념10 퀴즈 - 해시 테이블과 해싱 (0) | 2025.02.23 |
[Python] 알고리즘 개념9 퀴즈 - 재귀 함수의 스택 메커니즘 (0) | 2025.02.23 |
[Python] 알고리즘 개념9 - 재귀 함수의 스택 메커니즘 (0) | 2025.02.23 |
[Python] 알고리즘 개념8 퀴즈 - 큐 (0) | 2025.02.21 |
[Python] 알고리즘 개념7 퀴즈 - 스택 (0) | 2025.02.21 |
댓글