如何在python中的哈希表实现的set item函数中跟踪冲突和总探测长度?

时间:2018-05-19 09:28:44

标签: python hashtable

您好我是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?

0 个答案:

没有答案