我目前正在做我的类哈希。 我需要创建一个双哈希函数,它需要一个列表并使用双散列并返回一个新列表。双重哈希函数 - python
我明白一个列表如何使用双重哈希,但我无法写下它的代码。
hashkey = key % len(list)
steps = q - (key % q)
new_hashkey = steps + hashkey
#q = double_hash_value
这是我在课堂上学到的双重哈希函数。我在代码中实现它时遇到了麻烦。
这是我尝试迄今:
def double_hashing(keys, hashtable_size, double_hash_value):
hashtable_list = [None] * hashtable_size
for i in range(len(keys)):
hashkey = keys[i] % hashtable_size
if hashtable_list[hashkey] is None:
hashtable_list[hashkey] = keys[i]
else:
new_hashkey = hashkey
while hashtable_list[new_hashkey] is not None:
steps = double_hash_value - (keys[i] % double_hash_value)
new_hashkey = hashkey + steps
hashtable_list[new_hashkey] = keys[i]
return hashtable_list
values = [26, 54, 94, 17, 31, 77, 44, 51]
double = double_hashing(values, 13, 5)
print('Double =', double)
我相当肯定这是紧挨是正确的,但我只是做一个愚蠢的错误或东西。我理解double hash是如何工作的,但上面的代码不起作用。
该输出应为:
[26, None, 54, 94, 17, 31, 44, 51, None, None, None, None, 77]
但我的输出是:
[26, None, 54, 94, 17, 31, 44, None, None, None, None, None, 77]
在索引位置处的值51不被加入。
任何帮助表示赞赏。谢谢。
感谢帮助我的人。也感谢你指出我的错误。我知道我在做一些愚蠢的事情。 –