私は現在、自分のクラスでハッシングを行っています。 リストを受け取り、二重ハッシングを使用して新しいリストを返す二重ハッシュ関数を作成する必要があります。Homework on Double Hashing - 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)
私は、これは右に近いですが、私はちょうど愚かな間違いか何かを作っているかなり確信しています。私は二重ハッシングの仕組みを理解していますが、上記のコードはうまくいきません。
このため、出力は次のようになります
[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が追加されていません。
何か助けていただければ幸いです。ありがとうございました。
ありがとう:
は、以下の更新されたコードを(変更された行がコメントされている)を参照してください。私の間違いを指摘してくれてありがとう。私は何か愚かなことをしていることを知っていた。 –