我目前正在做我的類哈希。 我需要創建一個雙哈希函數,它需要一個列表並使用雙散列並返回一個新列表。雙重哈希函數 - 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不被加入。
任何幫助表示讚賞。謝謝。
感謝幫助我的人。也感謝你指出我的錯誤。我知道我在做一些愚蠢的事情。 –