0

我正在尝试用 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 out of range 并且我确定问题出在 else 块中,但是我似乎无法找到解决方案。任何帮助表示赞赏,谢谢。

4

1 回答 1

0

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

发生这种情况的原因是slot,当您:

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

按照设计,散列通常是给定的长度,你只是让它更长,因此超出了你的hashTable.

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

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

于 2016-03-18T14:52:06.033 回答