在Python中使用二次探测进行字符串散列

时间:2016-03-18 14:20:32

标签: python hashtable quadratic-probing

我正在尝试在Python中编写一个函数,它将向哈希表添加字符串并使用二次探测解决任何冲突,而无需导入数学。

def addString(string, hashTable):
    collisions = 0
    stop = False
    slot = (hashString(string, len(hashTable)))
    while not stop:
        if hashTable[slot] == None:
            hashTable[slot] = string
            stop = True
        else:
            slot = slot + (collisions**2)%len(hashTable)
            collisions = collisions + 1
        print('collisions: ', collisions)

我的问题是我一直得到IndexError:list index超出范围而且我确定问题出在else块中,但是我似乎无法找到它的解决方案。任何帮助表示感谢,谢谢。

1 个答案:

答案 0 :(得分:0)

在不知道hashString()函数的内部工作原理的情况下,我假设您正在使用字符串并将其转换为给定长度的哈希值。如果这是真的,那么你的else语句会设置一个超出hashTable范围的值(再次,只是一个猜测,因为你没有给出hashTable的任何内部工作)。

发生这种情况的原因是因为当你实际上slot大于界限时<{1}}:

slot = slot + (collisions**2)%len(hashTable)

按照设计,哈希通常是一个给定的长度,而你只是使它更长,因此超出了hashTable的界限。

您需要修改整个新插槽以防止其超出范围。

slot = (slot + (collisions**2))%len(hashTable)