공부/자료구조

해시 테이블(Hash-Table)이란?

셩잇님 2023. 6. 3. 02:58
반응형

 

 

1. 해시 테이블이란?

해시 맵이라고도 하는 해시 테이블은 키-값 쌍을 효율적으로 저장하고 검색할 수 있는 데이터 구조입니다. 즉, 각 데이터는 고유 키를 기반으로 테이블에 저장됩니다. 또한 해싱이라는 기술을 사용하여 키를 기본 배열의 특정 위치에 매핑하여 관련 값에 빠르게 액세스할 수 있도록 합니다. 해시 테이블은 버킷 배열로 구성되며, 각 버킷은 앞에서 설명한 것과 같이 하나 이상의 키-값 쌍을 저장할 수 있습니다.

 

해시 테이블은 해시 함수를 사용하여 키를 가져와서 해시 함수를 적용하는 방식으로 작동합니다. 해시 함수는 키-값 쌍이 저장되어야 하는 배열의 인덱스를 반환합니다. 그 다음 해시 값을 사용하여 테이블에서 데이터 위치를 결정합니다. 해시 함수는 두 개의 키가 동일한 인덱스에 해시할 때 발생하는 충돌을 최소화하기 위해 신중하게 설계해야 합니다. 또한 해시 테이블은 데이터를 저장하고 검색하는 데 매우 효율적입니다. 데이터를 저장하거나 검색하는 데 걸리는 시간은 일반적으로 테이블의 크기에 관계없이 일정합니다. 

 

2. 해시 테이블의 속성

해시 함수: 해시 테이블은 해시 함수를 사용하여 키를 배열 인덱스로 변환합니다. 해시 함수는 키를 입력으로 받아 정수 값인 해시 코드를 생성합니다. 해시 코드는 배열에서 해당 값이 저장될 인덱스를 결정하는 데 사용됩니다.

배열 저장소: 해시 테이블은 일반적으로 배열을 기본 저장 구조로 사용합니다. 배열의 크기는 예상되는 요소 수 또는 원하는 로드 계수에 따라 결정됩니다. 각 배열 인덱스를 "버킷" 또는 "슬롯"이라고 하며 하나의 키-값 쌍을 저장할 수 있습니다.

충돌 처리: 일반적으로 가능한 키의 수가 배열 슬롯의 수보다 많기 때문에 여러 개의 키가 동일한 인덱스에 매핑되어 충돌이 발생할 수 있습니다. 이러한 상황을 처리하기 위해 분리된 체인* 및 개방형 주소 지정* 등 다양한 충돌 해결 기술이 사용됩니다. 이러한 기법은 각 키-값 쌍이 올바르게 저장되고 모호함 없이 검색될 수 있도록 보장합니다.

 * 분리된 체인: 링크된 목록을 사용하여 동일한 해시 값을 가진 모든 데이터를 저장합니다.
 * 개방형 주소 지정: 프로빙 알고리즘을 사용하여 테이블에서 데이터의 빈 슬롯을 찾습니다.

 

검색 및 삽입: 해시 테이블에서 값을 검색하려면 키가 해시 함수를 통과하여 해당 인덱스를 생성합니다. 그러면 해당 인덱스와 연관된 값이 반환됩니다. 마찬가지로 새 키-값 쌍을 삽입할 때도 해시 함수가 적절한 인덱스를 결정하고 해당 위치에 값이 저장됩니다.

효율성: 해시 테이블의 가장 큰 장점은 효율적인 조회 시간입니다. 이상적인 시나리오에서 해시 함수는 배열 전체에 키를 균일하게 분배하여 충돌을 최소화하고 검색, 삽입 및 삭제 작업에 대해 일정한 시간 복잡성(O(1))을 제공합니다. 그러나 충돌이 있는 경우 사용되는 충돌 해결 기법과 충돌 횟수에 따라 효율성이 저하될 수 있습니다.

로드 계수: 해시 테이블의 로드 계수는 배열의 총 슬롯 수에 대한 저장된 요소의 비율을 나타냅니다. 로드 계수가 높을수록 충돌 가능성이 높아져 잠재적으로 성능에 영향을 미칠 수 있습니다. 배열 크기를 늘려 해시 테이블의 크기를 조정하면 낮은 로드율을 유지하여 충돌을 최소화하고 효율적인 작업을 보장할 수 있습니다.

 

3. 해시 테이블의 장점

빠른 조회: 해시 테이블에서 데이터를 조회하는 데 걸리는 시간은 일반적으로 테이블의 크기에 관계없이 일정합니다. 따라서 해시 테이블은 데이터베이스 및 검색 엔진과 같이 데이터에 빠르게 액세스해야 하는 애플리케이션에 이상적입니다.

공간 효율성: 해시 테이블은 특히 키가 고르게 분산되어 있는 경우 공간 효율성이 매우 높습니다.

사용의 용이성: 해시 테이블은 비교적 사용하기 쉽습니다.

 

4. 해시 테이블의 단점
충돌: 두 개의 키가 동일한 해시 값을 생성할 때 충돌이 발생할 수 있습니다. 충돌로 인해 조회 작업 속도가 느려질 수 있습니다.

해시 함수 선택: 해시 함수의 선택은 해시 테이블의 성능에 상당한 영향을 미칠 수 있습니다.

로드 계수: 해시 테이블의 로드 계수는 테이블의 항목 수와 테이블 크기의 비율입니다. 로드 계수가 높으면 성능이 저하될 수 있습니다.

 

5. 결론

해시 테이블은 다양한 문제를 해결하는 데 사용할 수 있는 강력한 데이터 구조입니다. 해시 테이블은 효율적이고 다재다능하며 사용하기 쉽습니다. 데이터를 빠르게 저장하고 검색할 수 있는 데이터 구조를 찾고 있다면 해시 테이블이 좋은 선택입니다. 빠른 액세스 시간으로 인해 해시 테이블은 다양한 애플리케이션에서 널리 사용됩니다. 해시 테이블은 사전과 같은 효율적인 연산을 제공하므로 데이터베이스의 인덱싱, 캐싱 및 데이터 저장과 같은 작업에 적합합니다. 많은 프로그래밍 언어에서 Python의 "딕셔너리", Java의 "해시맵", C++의 "unordered_map" 등 해시 테이블 구현을 내장하고 있습니다.

 

 

 

반응형

'공부 > 자료구조' 카테고리의 다른 글

딕셔너리(Dictionary)란?  (0) 2023.06.02
레드 블랙 트리(red-black tree)란?  (0) 2023.06.02
이진 트리(Binary Tree)란?  (0) 2023.04.02
트리(Tree)란?  (0) 2023.04.01
해시 맵(Hash map)이란?  (0) 2023.03.31