如何解决我很难加速我的 HashMap
我得到了一个 .txt 文件,其中包含总共 100 万首歌曲及其各自的作者。我给定的任务是在 python 中编写一个 HashMap,它可以使用作者或歌曲作为键来存储这些信息。我编写了一个 HashMap,它可以工作,但运行速度非常慢,最多需要 2 分钟才能完成。 (根据我的导师的说法,预计时间显然最多几秒钟)
对于冲突处理,我决定使用链表,因为从我收集到的信息来看,这是一种处理冲突的有效方法,同时不会显着降低性能。
from HashNode import HashNode
class HashTabell:
def __init__(self,size):
self.size = size
self.dict = {}
self.krock = 0
def store(self,nyckel,data):
hashval = self.__hash(nyckel)
## Shit is empty
if self.dict.get(hashval) != None:
get_val = self.dict[hashval]
## Is list,append normally
if isinstance(get_val,list):
list2 = self.dict[hashval]
found = False
for (k,val) in enumerate(list2):
if val.get_nyckel == nyckel:
list[k] = HashNode(nyckel,data) ## Update old value
found = True
break
if found:
self.dict[hashval] = list2
else:
self.dict[hashval] = get_val + [HashNode(nyckel,data)]
self.krock += 1
else:
## Create list
if get_val.get_nyckel() == nyckel:
self.dict[hashval] = HashNode(nyckel,data) ## Update old value
else:
self.dict[hashval] = [get_val,HashNode(nyckel,data)] ## Append to existing node
self.krock += 1
else:
self.dict[hashval] = HashNode(nyckel,data)
def __getitem__(self,nyckel):
return search(nyckel)
def __contains__(self,nyckel):
return (search(nyckel) != None)
def search(self,nyckel):
hashval = self.__hash(nyckel)
## Get val
get_val = self.dict.get(hashval)
if get_val == None:
raise KeyError("Key not found")
## Check if has multiple entries or not
if isinstance(get_val,list):
## Multiple
for value in get_val:
if(get_val.get_nyckel() == nyckel):
return get_val
raise KeyError("Key not found")
else:
## Single
if get_val.get_nyckel() == nyckel:
return get_val
else:
raise KeyError("Key not found")
## Hash function
def __hash(self,input):
inp = str(input) ## Get chars
value = 0
for k in input:
value += ord(k)
return (value % self.size)
def get_dict(self):
return self.dict
def get_krock(self):
return self.krock
HashNode 类很简单:
class HashNode:
def __init__(self,data):
self.nyckel = nyckel
self.data = data
def get_nyckel(self):
return self.nyckel
def get_data(self):
return self.data
过去 2 周我一直对这个问题视而不见,我没有从我的讲师/助理那里得到任何帮助,非常感谢有关如何提高速度的任何建议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。