테이블과 해쉬 테이블

zlwmxkdla·2023년 7월 29일

표의 형태인 테이블도 하나의 자료구조에 해당한다. 하지만 모든 표를 가리켜 테이블이라고 하지는 않는다. 표에 있는 하나의 키(key)값에 하나의 값(value)가 대응되는 경우에만 표를 테이블이라고 지칭한다.

자료구조인 테이블에 저장되는 데이터는 키(key)와 값(value)이 하나의 쌍을 이룬다. 키(key)가 존재하지 않는 값은 테이블에 저장할 수 없으며 모든 키는 중복되지 않는다.

하지만 테이블에 데이터를 저장할 때 다음과 같은 문제점이 발생한다.

1) 데이터의 양이 무수하게 많을 경우 테이블의 크기도 무수하게 커진다.
2) 테이블을 배열로 구현할 때 배열의 인덱스를 키 값으로 이용하여 특정 데이터를 참조하게 되는데 이 때 키 값을 인덱스 값으로 사용하기에 적당하지 않다.

-->위의 두 가지 문제를 해결하기 위해 '해쉬 함수' 를 사용할 수 있다.

->위와 같이 테이블에 저장되는 데이터의 범위가 너무 크다면 우리는 해쉬 함수를 이용하여 해당 데이터의 범위를 줄일 수 있다.

하지만! 위의 해쉬 함수에서도 문제점이 발생한다.

->서로 다른 키가 해쉬 함수를 지나쳤을 때 같은 키 값으로 변경되는 경우가 이와 같은 문제점이라고 할 수 있다. 이러한 상황을 '충돌' 이라고 한다.

따라서, 좋은 해쉬 함수란, 데이터가 테이블의 전체 영역에 고루 분포될 수 있도록 만드는, 충돌이 적은 해쉬함수라고 할 수 있다.
좋은 해쉬 함수는 키의 일부분을 참조하여 해쉬 값을 만들지 않고, 키 전체를 참조하여 해쉬 값을 만들어 낸다.
하지만 가장 우선적으로는 해쉬 함수를 디자인할 때에는 키의 특성과 저장공간의 크기를 먼저 고려하는 것이 우선이다.

profile
개발 공부 기록

0개의 댓글