by haifengli
一 基本思想:
cuckoo hash是一種解決hash沖突的方法,其目的是使用簡單的hash 函數來提高hash table的利用率,同時保證O(1)的查詢時間
基本思想是使用2個hash函數來處理碰撞,從而每個key都對應到2個位置。
插入操作如下:
1. 對key值hash,生成兩個hash key值,hashk1和 hashk2, 如果對應的兩個位置上有一個為空,那么直接把key插入即可。
2. 否則,任選一個位置,把key值插入,把已經在那個位置的key值踢出來。
3. 被踢出來的key值,需要重新插入,直到沒有key被踢出為止。
查找思路與一般hash一致。
cuckoo hash的擴展:
1、減小hash碰撞
一個key對應的hash table位置處存儲多個value(從slot way到 多個 slot way),從而以增加查找與插入時間為代價減小hash碰撞。
做了個實驗,比較不同slot way 下 同樣裝載率(75%)下的碰撞率(hash 函數使用的是cityhash):
slot way Num | 1 | 2 | 4 | 8 |
collision Factors | 同樣條件最大裝載率為30% | 9% | 3.6% | 1.1% |
表1
注:表1中的”同樣條件“是指cuckoo hash中特有的,在hash collision 時的搜索路徑的次數一定時。
從圖中我們可以看到,在使用cityhash, 1 slot way 時,hash collision 的概率是很高的。
參考鏈接如下:
http://www.it-c.dk/people/pagh/papers/cuckoo-undergrad.pdf
http://www.it-c.dk/people/pagh/papers/cuckoo-jour.pdf
http://en.wikipedia.org/wiki/Cuckoo_hashing
http://hi.baidu.com/algorithms/blog/item/eb89b582add48f95f703a61e.html