Post

자료구조 - 해시(Hash Table)

해시 테이블(Hash Table)의 개념, 동작 방식, 충돌 처리 방법, 시간복잡도 및 활용 예시를 정리한 글입니다.

자료구조 - 해시(Hash Table)

해시(Hash Table)란?

해시 테이블(Hash Table)은 데이터를 키(key)값(value)의 쌍으로 저장하는 자료구조입니다.

검색, 삽입, 삭제가 평균적으로 O(1)의 시간복잡도를 가지기 때문에 매우 빠른 연산이 가능한 것이 특징입니다.

왜 해시를 사용할까?

  • 빠르게 데이터를 찾고 싶을 때 (ex. 전화번호부, 사전)
  • 특정 키를 기반으로 데이터를 효율적으로 저장/관리하고 싶을 때

해시 테이블의 동작 원리

  1. 키(key)를 입력받습니다.
  2. 해시 함수(hash function)를 사용하여 키를 숫자로 변환합니다.
  3. 그 숫자를 배열의 인덱스(index)로 사용하여 값을 저장하거나 꺼냅니다.

예시

1
hash("apple")  42  # 해시 함수 결과

arr[42] = "apple과 관련된 데이터"

해시 함수란?

해시 함수는 키를 숫자로 바꿔주는 함수입니다.

  • 같은 키는 항상 같은 결과를 반환해야 합니다.
  • 결과값은 배열의 크기 범위 내여야 합니다.
  • 효율적인 해시 함수는 충돌이 적고 고르게 분포됩니다.

충돌(Collision)이란?

두 개의 다른 키가 같은 인덱스로 해시되는 경우를 말합니다.

충돌 해결 방법

방법설명
체이닝(Chaining)같은 인덱스에 여러 값을 연결 리스트로 저장
개방 주소법(Open Addressing)충돌 시 다음 빈 공간에 저장 (선형 탐사 등)

해시 예시 (Python)

파이썬의 dict 자료형은 해시 테이블로 구현되어 있습니다.

1
2
3
4
5
6
7
8
9
10
11
phone_book = {}

# 삽입
phone_book["Alice"] = "010-1234-5678"
phone_book["Bob"] = "010-9876-5432"

# 검색
print(phone_book["Alice"])  # 출력: 010-1234-5678

# 삭제
del phone_book["Bob"]

해시 테이블의 시간복잡도

연산평균 시간복잡도최악의 경우설명
검색O(1)O(n)충돌이 많을 경우 O(n)까지 느려질 수 있음
삽입O(1)O(n) 
삭제O(1)O(n) 

해시의 장점과 단점

장점

  • 평균적으로 매우 빠른 연산 속도 (O(1))
  • 키 기반으로 직관적이고 유연한 데이터 저장 가능

단점

  • 해시 함수가 좋지 않으면 성능이 급격히 저하됨
  • 메모리를 많이 사용할 수 있음
  • 데이터가 정렬되지 않음 (순회가 필요할 경우 비효율적)

해시 활용 예시

활용 분야설명
사전(Dictionary)단어를 키로 하여 정의를 빠르게 검색
캐시(Cache) 시스템최근 사용 데이터를 빠르게 저장/검색
중복 체크데이터셋 내에서 중복 여부를 빠르게 판단
집합(Set) 구현중복 없는 요소 저장 및 빠른 포함 여부 판단

실생활 비유로 이해하기

🗂️ 해시 테이블은 서랍장이 있는 사무실 캐비닛과 같습니다. 각각의 키(예: 성 이름)는 특정 서랍 번호(해시값)로 변환되어, 그 서랍을 열면 해당 사람의 정보가 저장되어 있는 구조입니다.

정리

항목해시 테이블
구조키-값 쌍 저장
주요 연산삽입, 검색, 삭제
시간복잡도평균 O(1), 최악 O(n)
충돌 해결 방식체이닝, 개방 주소법 등
활용 예시사전, 캐시, 중복 검사 등
This post is licensed under CC BY 4.0 by the author.