You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# 해쉬 테이블 공간 생성hash_table=list([0foriinrange(8)])
# 해쉬 키 생성defget_key(data) :
returnhash(data)
# 나머지를 이용한 해쉬 함수 (간단하게 표현하기위해 한번 더 해쉬함수를 돌린 것)defhash_function(key):
returnkey%8# 해쉬 함수로 산출한 해쉬 주소defsave_data(data, value):
hash_address=hash_fuction(get_key(data))
hash_table[hash_address] =valuedefread_data(data):
hash_address=hash_function(get_key(data))
returnhash_table[hash_address]
2. 충돌의 첫번째 경우 - Open Hasing
# 해쉬 테이블 공간 생성hash_table=list([0foriinrange(8)])
# 해쉬 키 생성defget_key(data) :
returnhash(data)
# 나머지를 이용한 해쉬 함수 defhash_function(key):
returnkey%8# 해쉬 함수로 산출한 해쉬 주소defsave_data(data, value):
index_key=get_key(data)
hash_address=hash_function(index_key)
# 1. 해쉬 충돌이 발생할 경우ifhash_table[hash_address] !=0:
forindexinrange(len(hash_table[hash_address])):
1-1.Key가동일하면데이터를덮어씀ifhash_table[hash_address][index][0] ==index_key:
hash_table[hash_address][index][1] =valuereturn# 1-2. Key가 동일하지 않으면 데이터를 연결해 저장 hash_table[hash_address].append([index_key, value])
# 2. 해쉬 충돌이 발생하지 않으면 해당 공간에 데이터 else:
hash_table[hash_address] = [[index_key, value]]
defread_data(data):
index_key=get_key(data)
hash_address=hash_function(index_key)
ifhash_table[hash_address] !=0:
forindexinrange(len(hash_table[hash_address])):
ifhash_table[hash_address][index][0] ==index_key:
returnhash_table[hash_address][index][1]
else:
returnNone
3. 충돌의 첫번째 경우 - Close Hasing
# 해쉬 테이블 공간 생성hash_table=list([0foriinrange(8)])
# 해쉬 키 생성defget_key(data) :
returnhash(data)
# 나머지를 이용한 해쉬 함수 defhash_function(key):
returnkey%8# 해쉬 함수로 산출한 해쉬 주소defsave_data(data, value):
index_key=get_key(data)
hash_address=hash_address(index_key)
# 1. 해쉬 충돌이 발생할 경우 ifhash_table[hash_address] !=0:
# 충돌이 일어난 주소부터 끝까지 스캔forindexinrange(hash_address, len(hash_table)):
# 동일한 Key일 경우 덮어씀ifhash_table[index][0] ==index_key:
hash_table[index][1] =valuereturn# 빈 공간을 찾으면 저장elifhash_table[index] ==0:
hash_table[index] = [index_key, value]
return# 2. 해쉬 충돌이 발생하지 않으면 해당 공간에 저장 else:
hash_table[hash_address] = [[index_key, value]]
defread_data(data):
index_key=get_key(data)
hash_address=hash_function(index_key)
ifhash_table[hash_address] !=0:
forindexinrange(hash_address, len(hash_address)):
ifhash_table[index][0] ==index_key:
returnhash_table[index][1]
# 빈 공간이 나올때까지 동일한 Key를 발견하지 못하면 데이터가 없다는 elifhash_table[index] ==0:
returnNoneelse:
returnNone