해시 테이블

해시 테이블

해시 테이블(Hash Table)은 데이터를 효율적으로 저장하고 검색하기 위해 사용하는 자료구조임. 해시 테이블은 키(Key)와 값(Value)의 쌍으로 데이터를 저장하며, 키를 해시 함수(Hash Function)를 통해 해시값으로 변환하고, 이 해시값을 기반으로 데이터를 저장할 위치를 결정.

구성 요소

  • 해시 함수 (Hash Function)

    • 키를 입력으로 받아 해시값을 생성하는 함수.

    • 해시 함수는 입력된 키를 일정한 크기의 정수(인덱스)로 변환하여 해시 테이블의 특정 위치를 가리킴.

  • 버킷 (Bucket)

    • 해시 테이블에서 데이터를 저장하는 공간.

    • 각 버킷은 여러 개의 값을 저장할 수 있으며, 해시 함수에 의해 인덱싱된 위치에 데이터를 저장함.

  • 충돌 (Collision)

    • 서로 다른 키들이 동일한 해시값을 가질 때 발생하는 현상.

    • 충돌을 처리하기 위해 다양한 방법이 사용됨.

충돌 해결 방법

  • 체이닝 (Chaining)

    • 각 버킷에 연결 리스트(Linked List) 등을 사용해 여러 개의 값을 저장하여 충돌을 해결하는 방법.

    • 같은 인덱스에 여러 값이 저장될 수 있으며, 충돌이 발생하면 새로운 값을 리스트에 추가

  • 오픈 어드레싱 (Open Addressing)

    • 충돌이 발생하면 다른 빈 버킷을 찾아 값을 저장하는 방법.

    • 선형 탐사(Linear Probing), 이차 탐사(Quadratic Probing), 이중 해싱(Double Hashing) 등의 방식이 있음.

장점과 단점

  • 장점

    • 평균적으로 빠른 검색, 삽입, 삭제 성능 (O(1))

    • 효율적인 메모리 사용.

  • 단점

    • 해시 함수의 품질에 따라 성능이 크게 좌우될 수 있음.

    • 충돌 발생 시 성능이 저하될 수 있음.

    • 데이터의 순서를 유지하지 않음.

사용 예시

해시 테이블은 주로 데이터베이스, 캐싱 시스템, 키-값 저장소, 그리고 중복 검출과 같은 다양한 분야에서 널리 사용됨.

해시 테이블은 매우 효율적이지만 해시 함수의 선택과 충돌 처리 방법에 따라 성능이 크게 달라질 수 있으므로 상황에 맞게 설계하는 것이 중요함.

코드

Last updated