Cuckoo hash算法分析


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

http://blog.csdn.net/suwei19870312/article/details/7442786


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM