기록은 기억을 이기고 시간보다 오래 남는다.

Computer Science/Data Structure

해시 테이블의 이해: 구조, 충돌 해결 방법 with JS

준_준 2024. 5. 8. 16:22

해시 테이블은 효율적인 데이터 관리를 위한 필수 자료구조입니다.

이는 데이터를 빠르게 삽입하고 검색할 수 있게 해주는 강력한 기능을 제공합니다. 본 글에서는 해시 테이블의 원리, 문제점 및 해결책, 그리고 실제 사용 사례에 대해 자세히 살펴보겠습니다.

 


해시 테이블의 기본 구조

해시 테이블은 '키(key)'와 '값(value)'의 쌍을 저장합니다. 이때, 키는 해싱 함수를 통해 배열의 인덱스로 변환되어, 해당 인덱스에 값을 저장하게 됩니다. 이 구조 덕분에 데이터의 삽입, 삭제, 탐색 작업을 평균적으로 O(1)의 시간 복잡도로 수행할 수 있습니다.


해싱 함수

해싱 함수는 키를 배열의 유효한 인덱스로 변환하는 역할을 합니다. 이 함수는 고유하게 값을 분배하여 해시 테이블의 효율을 극대화하는 것이 중요합니다.


해시 충돌과 그 해결책

때때로, 두 개의 키가 같은 인덱스로 해싱될 때 '해시 충돌'이 발생합니다. 이를 해결하기 위한 몇 가지 기법은 다음과 같습니다:

  • 선형 탐사법(Linear Probing): 충돌이 발생하면, 다음 인덱스로 이동합니다.
  • 제곱 탐사법(Quadratic Probing): 충돌 횟수의 제곱만큼 인덱스를 이동시킵니다.
  • 이중 해싱(Double Hashing): 두 번째 해시 함수를 사용해 새로운 인덱스를 계산합니다.
  • 분리 연결법(Chaining): 각 인덱스를 연결 리스트로 관리하여 충돌이 발생해도 리스트에 데이터를 추가합니다.
  •  

해시 테이블의 실용적 사용 예

해시 테이블은 정보를 신속하게 검색해야 할 때 매우 유용합니다. 예를 들어, 학생 정보 시스템에서 학생의 세부 정보를 빠르게 찾기 위해 사용할 수 있습니다. 또한, 자바스크립트에서는 객체, Map 객체, Set을 통해 해시 테이블 구조를 사용할 수 있습니다.


자바스크립트에서의 해시 테이블 활용

  • 객체 사용법: 일반적인 객체를 통해 키-값 쌍을 저장할 수 있습니다.
  • Map 객체: ES6에서 도입된 Map 객체는 명시적인 키-값 쌍 관리가 가능하며, 순서도 보장합니다.
  • Set 사용법: Set은 중복 없이 값들을 저장할 때 유용합니다.
반응형