Python线性探测哈希表插入或修改方法异常问题求助
Python线性探测哈希表插入或修改方法异常问题求助
嘿,各位大佬,我最近实现了一个用线性探测解决冲突的哈希表,每个键对应一个整数列表作为值,但现在遇到了个棘手的问题,怀疑是插入或者修改方法出了问题,想请大家帮忙看看!
情况是这样的:我往哈希表里插入了20000个带字符串名称的键,每个键都对应一个包含8个整数的列表;之后我调用修改方法做了100万次修改操作——本来应该是通过键找到对应的键值对,然后修改列表里的数值,但结果是大部分键的数值根本没变化,只有极少数能成功被修改。
下面是我写的哈希表代码(insert方法没写完,到线性探测的循环部分就断了,但先贴出来供大家参考):
class hashtable: def __init__(self, size): self.size = size self.data = [None] * size self.count = 0 def hash_function(self, key):#Δίνω κλειδί, επιστρέφει το υπόλοιπο της διαίρεσης του κωδικοποιημένου (μέσω της hash) κλειδιού, για ναναι εντός ορίου hash_value = 0 for char in key: hash_value = (hash_value * 31 + ord(char)) % self.size return hash_value def insert(self, key): index = self.hash_function(key) # Linear probing while self.data[index...
我自己梳理了几个可能的方向,但还没定位到问题:
- 会不会是
insert方法里的线性探测逻辑有问题?比如遇到冲突时没正确找到空位置或者已存在的键,导致后续修改找不到目标? - 我没贴出来的
change方法大概率是重灾区?比如线性探测找键的时候,循环条件写错了,提前终止了遍历,导致大部分键都没被找到? - 哈希表的大小设置得不合理,负载因子太高,导致线性探测的链太长,查找时出错?
有没有大佬能给点排查思路或者指出可能的问题点呀?感激不尽!
备注:内容来源于stack exchange,提问作者Aris App123
相关产品推荐
相关产品推荐

