我讀到有關Hashtable和找到一個很好的來源,以容易理解Here. 但我糊塗了雙散列函數。這裏是雙哈希函數的細節。 雙散列使用在發生衝突時將第二個散列函數應用於 鍵的想法。第二個散列函數 的結果將成爲插入衝突點的位置數量。 有幾個的所述第二功能的要求: it must never evaluate to 0
must make sure that all cells can be probe
我正在爲使用雙哈希方法的整數實現哈希類。輸入將是隨機整數,可以是正數也可以是負數。 我的問題是我將如何計算負整數的哈希值? 這是方法: hash function 1 h: h(k) = k mod (p)
hash function 2 s(k)= p –2 – (k mod(p-2))
p = table size, k = key
計算H(K)之後,如果不存在衝突,則在它的位置插入。
public class HashTable <K, V> implements Table<K, V>{
PairHolder table[];
int idx;
public HashTable(int size){
table=new PairHolder[size];
}
public void put(K key, V val
我這裏有一個大約雙散列家庭作業和I堆棧上的一個點: 我有陣列:17,6,5,8,11,28,14,15 (k)= k mod 11 +(j(k)= k mod 11, h 2(k)= k mod 11, h 2 。+(K MOD 9) 現在我計算hashvalues: h(17) = k mod 11 = 6 - OK
h(6) = 6 = collision => 6 + (1 + (6 mo