python 간단 한 hashmap 구현
최근 데이터 구 조 를 뒤 져 보 니 자신 에 대한 지식 이 부족 하고 자신의 기록 이 라 고 할 수 있 으 며 데이터 구 조 를 공부 하고 있 는 늙 은 철 들 에 게 공유 하고 함께 공부 하고 싶 습 니 다.
원리 python 언어 중의 dict 바 텀 은 hashmap 구 조 를 바탕 으로 이 루어 진 것 이 므 로 dict 의 사용 은 말 하지 않 겠 습 니 다.관건 은 hashmap 가 한 무더기 의 데이터 에서 키 에 따라 value 를 찾 을 수 있다 는 것 이다. 이 관건 은 주로 hash 함수 에 의 해 이 루어 진다.상세 한 원 리 는 라 는 책의 8.9 장 을 보 세 요. 저 는 잘 말 한 것 같 습 니 다.
간단하게 구 조 를 실현 하 는 책 에서 주로 C 언어 로 hashmap 구 조 를 실현 합 니 다. 다음은 python 언어 로 이 루어 진 코드 를 드 리 겠 습 니 다.그리고 hash 충돌 문 제 를 해결 하기 위해 저 는 '체인 주소 법' 의 구 조 를 사 용 했 습 니 다.MyHash 내 부 는 items 목록 을 사용 하여 데 이 터 를 저장 합 니 다. items 는 하나의 목록 이 고 모든 요소 도 하나의 목록 입 니 다. 요소 목록 에 구체 적 인 (key, value) 원 그룹 이 저장 되 어 있 습 니 다. 서로 다른 key 는 hash 함수 에 따라 index 를 먼저 계산 합 니 다. 즉, 어느 목록 에 저장 되 어 있 는 지, 삽입 할 때 직접 append 입 니 다.찾 을 때 equals 방법 에 따라 찾 아야 할 key 와 목록 에 있 는 모든 원 그룹의 첫 번 째 값 (key) 을 비교 하고, 같은 값 을 찾 으 면 원 그룹의 두 번 째 값 (value) 을 되 돌려 주 며, 찾 지 못 하면 raise KeyError 이상 을 찾 습 니 다.
# coding=utf-8
class MyHash(object):
def __init__(self, length=10):
self.length = length
self.items = [[] for i in range(self.length)]
def hash(self, key):
""" key items list , key """
return key % self.length
def equals(self, key1, key2):
""" key , key """
return key1 == key2
def insert(self, key, value):
index = self.hash(key)
if self.items[index]:
for item in self.items[index]:
if self.equals(key, item[0]):
# key, ( value)
self.items[index].remove(item)
break
self.items[index].append((key, value))
return True
def get(self, key):
index = self.hash(key)
if self.items[index]:
for item in self.items[index]:
if self.equals(key, item[0]):
return item[1]
# key, KeyError
raise KeyError
def __setitem__(self, key, value):
""" myhash[1] = 30000 """
return self.insert(key, value)
def __getitem__(self, key):
""" myhash[1] """
return self.get(key)
myhash = MyHash()
myhash[1] = 30000
myhash.insert(2, 2100)
print myhash.get(1)
myhash.insert(1, 3)
print myhash.get(2)
print myhash.get(1)
print myhash[1]
몇 시
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.