해시테이블은 해시와 테이블 두 글자로 나누어서 의미를 곱씹어보면 개념은 쉽게 다가온다.
우리는 비밀번호와 같은 암호화가 필요한 부분들을 해시화 한다고 표현한다.
이와 마찬가지로 해시 테이블도 암호화된 테이블 정도로 생각하면 쉽게 해시테이블에 다가갈 수 있으리라 생각한다.
해시테이블은 해시함수에 key라는 값을 input으로 받고 output으로 해시주소라는 값을 반환한다.
이 해시 주소를 통해서 테이블의 주소를 참조해 테이블에 데이터를 저장하는 구조이다.
그림과 설명으로만 봤을때는 굉장히 쉬워 보이는데 코드로 접근하면 상당히 화가 난다...
코드 예제를 살펴 보기 전에 해시테이블과 관련된 용어들을 정리하고 넘어가겠다.
다행인건 파이썬의 딕셔너리 타입이 해쉬의 구조와 같기 때문에 별도의 해쉬를 구현할 필요는 없다는 점이다.
hash_table = list([i for i in range(10)])
hash_table # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
def hash_func(key):
return key % 5
data1 = 'SON'
data2 = 'MESSI'
data3 = 'KDB'
data4 = 'REBY'
# ord(): 문자의 아스키코드 반환
print(ord(data1[0]), ord(data2[0]), ord(data3[0]), ord(data4[0]))
# 83 77 75 82
def storage_data(data, value):
key = ord(data[0])
hash_address = hash_func(key)
hash_table[hash_address] = value
storage_data('SON', '01055553333')
storage_data('MESSI', '01044443333')
storage_data('KDB', '01022223333')
storage_data('REBY', '01033334444')
def get_data(data):
key = ord(data[0])
hash_address = hash_func(key)
return hash_table[hash_address]
get_data('SON') # 01055553333