해시테이블이란, 해시함수를 이용해 키를 값에 매핑하는 자료구조입니다.
해시함수란, 임의 크기 데이터를 고정 크기 값으로 매핑하는데 사용할 수 있는 함수로, 쉽게 말해 임의의 값을 넣어도 예상 크기 내에서 결과가 나오는 함수입니다. 예를 들면 ‘나머지를 반환하는 함수’가 좋은 해시 함수의 예입니다.
HashTable
해시함수를 이용해 키를 값에 매핑하는 자료구조
해시함수
- 임의 크기 데이터를 고정 크기 값으로 매핑하는데 사용할 수 있는 함수
- 쉽게 말해 임의의 값을 넣어도 예상 크기 내에서 결과가 나오는 함수
- ‘나머지를 반환하는 함수’가 좋은 해시 함수의 예
def modThree(n):
return n % 3
print(modThree(0)) # 0
print(modThree(1)) # 1
print(modThree(2)) # 2
print(modThree(0)) # 0
- 아무리 좋은 해시 함수라도 충돌을 피하기는 어렵다.
- 입력값이 달라도 똑같은 결과가 나오면 충돌이라고 한다.
- 충돌을 다루는 방식은 체이닝(Chaining), 오픈 어드레싱(Open Addressing) 두 가지
- 체이닝은 충돌 발생 시 ‘연결’해가는 것이고, 오픈 어드레싱은 탐사를 통해 ‘빈 공간을 찾아나서는’ 방식
체이닝 ▽
오픈 어드레싱 ▽
- 체이닝은 메모리 오버헤드가 길어질 경우 탐색이 느려진다.
- 오픈 어드레싱은 값이 뭉치는 클러스터링이 발생할 수 있다
- 그래서 각 언어 별로 해시테이블의 구현 방식이 상이함
: C++, Java, Go는 체이닝을 택하고 Python, Ruby는 오픈 어드레싱을 택하고 있다.
'Python 문법 정복하기' 카테고리의 다른 글
[Python] Max Heap (0) | 2024.04.14 |
---|---|
[Python] Tree (0) | 2024.04.10 |
[Python] LinkedList 예제 (Palindrome) (0) | 2024.03.23 |
[Python] Queue 예제 (Josephus) (0) | 2024.03.23 |
[Python] Queue (FIFO) (0) | 2024.03.23 |