Hash Table : Key , Value 로 구성됨. 파이썬에서는 딕셔너리라는 이름으로 구현 되어 있음.딕셔너리가 없는 언어에서의 구현 순서
# 1. 배열로 hashTable 생성.
hash_table = [0 for i in range(10)]
# 2. hashFunc(key) -> hashTableIndex
def hash_func(key):
hashValue=ord(key) # 여기서는 ord()가 hashFunc
hashAdress = hashValue%10 # 여기서는 나머지연산이 addressFunc
return hashAdress
# 3. 저장기능 , 읽기기능 구현
def save_data(key,value):
idx=hash_func(key)
hash_table[idx]=value
def read_data(key):
idx = hash_func(key)
return hash_table[idx]
list의 어떤 자료를 검색할 때 드는 시간복잡도 O(n)Hash Table의 자료를 검색할 때 드는 시간복잡도 O(1)
hash_table = [0 for i in range(10)]
def hash_func(key):
hashValue=ord(key)
hashAddress = hashValue%10
return hashAddress
def save_data(key, value):
hashAddress = hash_func(key)
if hash_table[hashAddress] != 0:
for index in range(len(hash_table[hashAddress])):
if hash_table[hashAddress][index][0] == key:
hash_table[hash_address][index][1] = value
return #기존의 존재하는 key의 value를 재입력하는 상황
hash_table[hash_address].append([key, value])
else:
hash_table[hash_address] = [[key, value]]
# 오픈해슁은 3차원 hash_table을 가진다.
def read_data(key):
hashAddress = hash_function(key)
if hash_table[hashAddress] != 0:
for index in range(len(hash_table[hashAddress])):
if hash_table[hashAddress][index][0] == key:
return hash_table[hashAddress][index][1]
return None
else:
return None
hash_table = [0 for i in range(8)]
def hash_func(key):
hashValue=ord(key)
hashAddress = hashValue%10
return hashAddress
def save_data(key, value):
hashAddress = hash_func(key)
if hash_table[hashAddress] != 0:
for index in range(hashAddress, len(hash_table)):
if hash_table[index] == 0:
hash_table[index] = [key, value]
return
elif hash_table[index][0] == key:
hash_table[index][1] = value
return
else:
hash_table[hashAddress] = [key, value]
def read_data(key):
hashAddress = hash_func(key)
if hash_table[hashAddress] != 0:
for index in range(hashAddress, len(hash_table)):
if hash_table[index] == 0:
return None
elif hash_table[index][0] == key:
return hash_table[index][1]
else:
return None