您好我是Python新手,我使用线性探测实现了哈希表来解决冲突。如果两个键散列到相同的位置,则碰撞仅发生一次,随后尝试解析它是探测长度。我修改了我的设置项功能,以跟踪碰撞次数和探头长度。但我不知道如何从函数中获取碰撞和探测长度,因为set item被调用如下:my_table [“Julian”] =“FIT1008”?
def __setitem__(self, key, value):
position = self.hash_value(key)
sameKeyCollision=False
for _ in range(self.table_size):
if self.array[position] is None:#found empty slot, collision resolve
self.array[position] = (key, value)
self.count += 1
sameKeyCollision=False
return
elif self.array[position][0] == key:#found key
self.array[position] = (key, value)#update value, no collision
return
elif self.array[position][0] !=key and sameKeyCollision==False:#not found try next,first time collision
position = (position+1) % self.table_size
self.totalProbeLength+=1
self.collision+=1
sameKeyCollision=True
elif self.array[position][0] !=key and sameKeyCollision==True:#probing
position = (position+1) % self.table_size
self.totalProbeLength+=1
raise ValueError("Table is Full!")
这是我的构造函数:
def __init__(self, size=30):
self.count = 0
self.table_size = size
self.array = build_array(self.table_size)
self.collision=0
self.totalProbeLength=0
我没有测试过我的代码,因为我不知道如何从我的set item函数中获取probeLength和collision,所以我为任何错误道歉并请指出它们。谢谢!
编辑:好的,我刚刚意识到我可以声明一个类变量,然后像self.collision和self.totalProbeLength那样直接访问它。但是,它们都继续返回0?