繁体   English   中英

在Python中使用二次探测进行字符串哈希

[英]String hashing with quadratic probing, in Python

我正在尝试用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块中,但是,我似乎找不到解决方案。 任何帮助表示赞赏,谢谢。

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

发生这种情况的原因是,当您执行以下操作时,实际上是使slot比边界大

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

通过设计,哈希通常是给定的长度,而您只是将其延长,因此超出了hashTable的范围。

您需要修改整个新插槽,以防止其越界。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM