Post

⚡ 자료구조 - 해시 테이블

⚡ 자료구조 - 해시 테이블

🔹 해시 테이블

  • 키를 해시 함수로 변환해 데이터를 저장하는 자료구조로, 배열 기반이며 충돌 해결 방법이 중요함
  • 해시 함수의 역할과 충돌 해결 방법을 이해해야 함
  • 장점: 평균적으로 검색, 삽입, 삭제가 매우 빠름
  • 단점: 충돌이 발생하면 성능 저하가 있고 해시 함수 설계가 중요하며 메모리 사용이 많을 수 있음

▫️ 맵(Map)

  • 키와 값의 쌍을 저장하는 자료구조로, 보통 해시 테이블로 구현됨
  • 해시맵의 내부 구조와 키 중복 처리 방식을 이해해야 함
  • 장점: 키를 통해 값에 빠르게 접근하고 수정할 수 있으며 키 중복을 허용하지 않음
  • 단점: 키에 대한 해시 함수 성능에 크게 의존하며 메모리 사용량이 증가할 수 있음

▫️ 셋 (Set)

  • 유일한 값만 저장하는 자료구조로, 내부적으로 맵과 유사하게 구현됨
  • 셋의 중복 제거 기능과 멤버십 테스트가 중요한 상황을 설명할 수 있어야 함
  • 장점: 중복된 값을 허용하지 않으며 멤버 존재 여부를 빠르게 검사할 수 있음
  • 단점: 값 자체가 키 역할을 하기 때문에 복잡한 데이터 구조에는 부적합할 수 있음

▫️ 차이점 정리

구분해시 테이블
저장 방식키를 해시 함수로 변환해 저장키와 값 쌍으로 저장유일한 값만 저장
목적키 기반 빠른 검색, 삽입, 삭제키로 값에 접근하고 관리중복 없는 값 저장 및 빠른 검색
중복 허용없음없음없음
주요 연산검색, 삽입, 삭제키로 값 조회 및 수정값 존재 여부 확인, 추가, 삭제
구현배열 기반 해시 함수와 충돌 해결법해시 테이블 기반이 일반적해시 테이블이나 트리 기반

🔹 해시 함수 역할과 충돌 해결 방법(체이닝, 오픈 어드레싱 등)

  • 해시 함수는 임의 크기 데이터를 고정 크기 값으로 바꾸는 함수
  • 해시 테이블에서 키를 해시 함수에 넣어 배열 인덱스로 바꿔 저장하거나 검색
  • 좋은 해시 함수는 서로 다른 키가 같은 인덱스로 가는 충돌을 최소화해야 함
  • 충돌은 서로 다른 키가 같은 인덱스로 매핑될 때 생김.
  • 해결 방법은 두 가지임.

▫️ 체이닝

  • 같은 인덱스에 연결 리스트 같은 구조로 여러 데이터를 묶어 저장함
  • 충돌 발생해도 각 버킷에 여러 원소 저장 가능해서 구현 쉬움

▫️ 오픈 어드레싱

  • 충돌 나면 테이블 내 다른 빈 공간 찾아 저장함
  • 선형 탐사, 이차 탐사, 이중 해싱 등이 있음
  • 메모리 효율 좋지만 탐색 시간이 길어질 수 있음.

🔹 해시맵 내부 구조와 키 중복 처리 방식

  • 해시맵은 키와 값을 쌍으로 저장하는 자료구조
  • 내부는 해시 테이블 쓰고, 키를 해시 함수에 넣어 인덱스 계산 후 값 저장
  • 충돌 나면 체이닝이나 오픈 어드레싱으로 해결
  • 키 중복은 같은 키가 여러 번 삽입될 때 발생
  • 대부분 해시맵은 새 값이 기존 키 값 덮어씀
  • 즉, 중복 키 허용 안 하고, 삽입 시 기존 키 있으면 값 갱신함

🔹 셋의 중복 제거 기능과 멤버십 테스트 중요 상황

  • 셋은 중복 허용 안 하는 데이터 집합
  • 내부는 해시맵과 비슷하며 값이 키 역할
  • 중복 값 들어오면 기존 값 유지하고 새 값 무시
  • 중복 제거는 데이터 정제, 필터링, 집합 연산 등에 중요함
  • 멤버십 테스트는 특정 값 집합 포함 여부 빠르게 확인하는 작업
  • 예로 사용자 권한 검사, 방문 페이지 추적, 실시간 중복 체크 등에 사용
This post is licensed under CC BY 4.0 by the author.