[소프트 테스트] 데이터 구조 - 해시 테이블 구조

1. 해시 테이블이란 무엇입니까?

해시 테이블(Hash Table)은 데이터 구조이다.
해시 테이블(Hash Table)은 일반적으로 사용되는 데이터 구조로, 빠른 검색과 동적 저장을 구현할 수 있다.
해시 테이블은 검색 엔진, 데이터베이스, 캐시 등 실제 응용 분야에서 널리 사용됩니다.

둘째, 해시 테이블의 장점과 단점

2.1 해시 테이블의 주요 특징/장점

2.1.1 키-값 저장

키-값 쌍은 해시 테이블에 저장됩니다. 즉, 키를 통해 해당 값을 빠르게 찾을 수 있습니다.

2.1.2 빠른 찾기 및 삽입

키는 해시 함수를 통해 배열의 인덱스 위치에 매핑되며, 이 위치에서 직접 검색이 가능하며 시간 복잡도는 O(1)이다.
조회와 삽입 모두 시간 복잡도가 낮으며 일반적으로 O(1)입니다.

2.1.3 동적 저장

해시 테이블은 삽입, 삭제 및 조회 작업을 동적으로 수행할 수 있습니다.

2.1.4 충돌 처리

해시 값 계산에 충돌이 있을 수 있으므로, 즉 서로 다른 키가 동일한 해시 값을 계산하므로 해시 충돌 문제를 해결해야 합니다.

2.2 해시 테이블의 단점

  • 해시 테이블과 가능한 충돌 해결을 저장하려면 추가 공간이 필요합니다.

세 번째, 해시 테이블의 기본 원리

주어진 키에 대해 해시 함수를 통해 배열 인덱스가 계산되고, 키-값 쌍이 인덱스 위치에 저장됩니다.
검색 시에는 해시 함수를 통해 해당 키에 해당하는 인덱스도 계산하고, 이 위치에서 직접 검색을 수행하므로 검색의 시간 복잡도를 크게 줄일 수 있다.

넷째, 해시 테이블의 구현

해시 테이블의 구현에는 일반적으로 다음 단계가 포함됩니다.
(1) 해시 테이블에서 키의 위치를 ​​결정하기 위해 키를 정수에 매핑하는 해시 함수를 정의합니다.
(2) 해시 테이블의 요소를 저장할 배열을 만듭니다.
(3) 해시 함수를 사용하여 키를 배열의 해당 위치에 매핑하고 해당 값을 저장합니다.
(4) 조회 시 동일한 해시 함수를 사용하여 키를 배열의 위치에 매핑하고 해당 위치의 값이 원하는 값과 일치하는지 확인합니다.

해시 테이블의 구현은 배열, 연결 목록, 레드-블랙 트리 등과 같은 다양한 데이터 구조를 기반으로 할 수 있습니다.
일반적인 해시 함수에는 모듈로 해시, 곱셈 해시, 나누기 해시 등이 포함됩니다.

5. 해시 테이블과 해시 함수

해시 테이블은 해시 함수를 사용하여 키를 위치에 매핑하여 조회를 보다 효율적으로 만듭니다.

해시 테이블은 키를 값에 매핑합니다.
해시 테이블은 키(key)를 값(value) 연관에 매핑합니다.
해시 테이블의 성능은 해시 함수의 선택과 해시 테이블의 부하율에 따라 달라집니다.
좋은 해시 함수는 충돌 및 조회 시간을 줄이기 위해 키를 배열의 위치에 최대한 균등하게 매핑해야 합니다.
동시에 적절한 부하율은 해시 테이블의 효율성과 공간 활용을 보장할 수 있습니다.

해시 테이블은 키의 해시 값을 계산하고 키-값 쌍을 배열의 특정 위치에 저장함으로써 빠른 조회, 삽입 및 삭제 작업을 구현합니다.

6. 기능 구축

7. 해시 충돌 처리

7.1 해시 충돌이란 무엇입니까?

해시 충돌은 두 개의 서로 다른 키가 해시 테이블의 동일한 값에 매핑되는 경우입니다.
실제 적용에서는 일반적으로 해시 테이블의 성능 요구 사항과 해시 충돌 확률에 따라 해시 충돌을 해결하는 적절한 방법이 선택됩니다.

7.2 해시 충돌을 해결하는 방법은 무엇입니까?

해시 충돌을 해결하기 위해 일반적으로 개방형 주소 지정 방법, 체인 주소 방법, 다단계 해시 테이블 구축 등의 방법이 사용됩니다.

7.2.1 오픈 주소 방식

개방형 주소 지정은 충돌하는 요소를 사용 가능한 다음 위치로 이동하여 해시 충돌을 해결하는 방법입니다.

일반적인 개방형 주소 방법에는 선형 프로빙, ​​2차 프로빙 및 이중 해싱이 포함됩니다.

7.2.1.1 선형 프로빙

선형 프로빙은 가장 간단한 개방 주소 방법입니다.

빈 슬롯을 찾거나 미리 정해진 횟수에 도달할 때까지 충돌 요소를 다음 위치로 이동시킵니다.
그러나 선형 프로빙을 사용하면 해시 테이블이 과도하게 채워져 조회 효율성이 저하될 수 있습니다.

7.2.1.2 이중 검출 방법

이중 감지 방식은 개선된 오픈 주소 방식입니다.

다음 위치를 선택하기 위해 2차 함수를 사용합니다.
이 방법은 해시 테이블의 채우기 속도를 줄일 수 있지만 해시 테이블의 분포가 고르지 않을 수 있습니다.

7.2.1.3 이중 해싱

이중 해싱은 두 개의 해시 함수를 기반으로 하는 개방형 주소 지정 방법으로,
키를 서로 다른 두 위치에 매핑하고 그 중 하나에 요소를 삽입합니다.
이 방법은 해시 충돌 가능성을 줄일 수 있지만 추가 저장 공간이 필요합니다.

7.2.2 체인 주소 방식

체인 주소 방식은 해시 충돌을 해결하는 방법으로
충돌하는 요소를 연결 목록에 저장합니다. 검색 시 해당 요소를 찾기 위해서는 연결리스트 전체를 순회해야 합니다.
체인 주소 방법은 해시 충돌을 해결할 수 있지만 검색 시간 복잡도를 증가시킵니다.

7.2.3 다중 레벨 해시 테이블 구축

다단계 해시 테이블은 해시 충돌을 해결하는 방법으로,
해시 테이블을 여러 개의 하위 테이블로 나누고 서로 다른 해시 함수를 사용하여 키를 서로 다른 하위 테이블에 매핑합니다.
이 방법은 해시 충돌 가능성을 줄일 수 있지만 추가 저장 공간과 해시 함수 설계가 필요합니다.

여덟번째, 검색을 누르세요

추천

출처blog.csdn.net/wstever/article/details/129977985