Notice
Recent Posts
Recent Comments
Link
헬창 개발자
해시 함수 : 파이썬 본문
설계도
a 테이블은 밸류값이 들어가 있고 각 값들을 이스크 코드값으로 변환시켜 키값을 만든다. 만든 키값에 테이블 사이즈만큼 나눠줘 진짜 키값을 만들어준다.
이제 키값과 밸류값으로 해시 함수를 통해 테이블에 넣기만 하면 된다.
코드
table_size=13 # 태이블 사이즈
class hash:
# 해시 함수
def fx(self, num):
self.key = self.find_key(num)
self.re_key = []
for i in self.key:
self.re_key.append(i % 12)
return self.re_key
# 이중 해싱 함수
def fx2(self, key):
self.re_key = key % 5
return self.re_key
#선형 조사법
def hash_lp_add(self, a, data):
self.key = self.fx(a)
for i, j in zip(self.key, a):
if data[i] != None:
self.k = i
while data[self.k] != None:
self.k = (self.k + 1) % table_size
data[self.k] = j
else:
data[i] = j
return data
#이차 조사법
def hash_qp_add(self, a, data):
self.key = self.fx(a)
for i, j in zip(self.key, a):
if data[i] != None:
self.k = i
self.w = 0
while data[self.k] != None:
self.w += 1
self.k = (self.k + self.w * self.w) % table_size
data[self.k] = j
else:
data[i] = j
return data
#이중 해싱법
def hash_dh_add(self, a, data):
self.key = self.fx(a)
for i, j in zip(self.key, a):
if data[i] != None:
self.k = i
self.w = 1
self.kk = 11 - (self.k % 11)
self.kkk = (self.k + self.kk * self.w) % table_size
while data[self.kkk] != None:
self.w += 1
self.kkk = (self.k + self.kk * self.w) % table_size
data[self.kkk] = j
else:
data[i] = j
return data
# 키값 변환
def find_key(self, a):
self.key = []
for i in a:
self.b = list(i)
self.k = 0
for j in self.b:
self.k += ord(j)
self.key.append(self.k)
return self.key
if __name__=="__main__":
data1 = list(None for i in range(table_size))
data2 = list(None for i in range(table_size))
data3 = list(None for i in range(table_size))
a = ["do", "for", "if", "case", "else", "return", "function"]
hashtable = hash()
print(hashtable.hash_lp_add(a, data1))
print(hashtable.hash_qp_add(a, data2))
print(hashtable.hash_dh_add(a, data3))
결과 화면
'자료구조' 카테고리의 다른 글
AVL 트리 구현 : 파이썬 (2) | 2021.09.07 |
---|---|
그래프 브릿지 찾기 : 파이썬 (0) | 2021.08.23 |
큐를 이용한 은행 업무 시스템 : 파이썬 (0) | 2021.07.30 |
스택을 이용한 후위 표기, 연산 : 파이썬 (0) | 2021.07.29 |
이진 트리를 이용한 연락처 프로그램 : C언어 (0) | 2021.07.28 |
Comments