Cuckoo Hash——Hash衝突的解決辦法
參考文獻:
用途:
Cuckoo Hash(布穀鳥散列)。問了解決哈希衝突的問題而提出,利用較少的計算換取較大的空間。佔用空間少,查詢速度快。經常應用於Bloom Filter和內存管理中。之所以起這個名字是因爲布穀鳥生性貪婪,不自己築巢,而是在別的鳥巢裏面鳥蛋孵化,先成長的幼鳥會將別的鳥蛋擠出,這樣獨享“母愛”,類似於哈希衝突處理過程。
算法描述:
使用hashA、hashB計算對應的key位置:
1、兩個位置均爲空,則任選一個插入;
2、兩個位置中一個爲空,則插入到空的那個位置
3、兩個位置均不爲空,則踢出一個位置後插入,被踢出的<key,value>對調用該算法,再執行該算法找其另一個位置,循環直到插入成功。
如果被踢出的次數達到一定的閾值,則認爲hash表已滿,並進行重新哈希rehash
優化(減少哈希碰撞):
1、將一維改成多維,使用桶(bucket)的4路槽位(slot);
2、一個key對應多個value;
3、增加哈希函數,從兩個增加到多個;
4、增加哈希表,類似於第一種;