最近我一直在學習哈希表。有幾個碰撞解決方案的例子,其中一個是二次探測。爲什麼有人會使用二次探測?他知道散列表總是少於一半嗎?如果是的話,他爲什麼要用這麼大的桌子開始呢?使用二次探測實現哈希表的原因
回答
爲什麼有人會使用二次探測?
假設我們需要一些衝突分解算法,
二次探測可以在一個封閉的哈希表更有效的算法,因爲它更好地避免了可與線性探測發生聚類問題,儘管它不是免疫的。
二次探測是不完美的,但it does offer some advantages over alternatives:
的二次鏈接(或其他形式的)的優點是
- 簡單邏輯存儲管理(沒有動態分配)
- 更快的插入(由於si mpler存儲)
- 一般
減少存儲需求,他是否知道哈希表總是會比全少了一半?
不一定;它取決於所使用的調整策略,如果有的話。
考慮你對QP的學習主要是教育。根據我的經驗,實際的哈希表實現不經常使用open addressing,。
噢,好吧,你可以從任何大小開始,每當它滿足調整大小時,就可以調整大小。浪費空間嗎?改變散列函數不是更好嗎? – user2278279
@ user2278279-這不會浪費太多空間。通常,你的空間不會超過你需要的4倍,因爲任何時候你有2x空間你的桌子大小加倍。這是一個相當標準的實現。 – templatetypedef
現在我明白了。這取決於你如何實現散列表,如果你使用了一個指針數組,那麼相比於散列函數的簡單性,指針的兩倍並不是那麼糟糕,但是如果你使用一個大對象數組,那麼你將會浪費空間。 – user2278279
二次方rehash是避免線性散列聚類問題的一種非常簡單快速的方法。它通常只在表格大小爲素數時使用(這可能也適用於其他原因)。
爲了避免擔心「表格半滿」,在某些點切換到線性探頭是最簡單的。 (你可以把閾值測試用於這種切換內部通常如果(指數> =大小){索引 - =大小;}塊,以避免任何性能損失
- 1. 二次探測哈希表的限制
- 2. 探測哈希表
- 3. 在Python中使用二次探測的字符串哈希
- 4. 哈希表和Java中的二次探測幫助
- 5. 哈希表(線性探測)
- 6. 二次探測
- 7. 哈希表實現
- 8. 線性探測哈希表插入
- 9. 檢索用於線性/二次哈希的探針長度
- 10. 實現使用哈希表中的Java
- 11. 實現哈希表的
- 12. 用線性探測字符串哈希
- 13. 雙探針哈希表
- 14. 如何使用BST實現哈希表?
- 15. 使用矢量C++實現哈希表
- 16. 使用二叉搜索樹實現哈希表
- 17. 爲什麼隨機化探測在哈希表實現中更受歡迎?
- 18. 持久哈希表實現
- 19. Java哈希表實現
- 20. 實現在哈希表
- 21. Java哈希表實現
- 22. 關於二次在哈希
- 23. 計數探針探測二次
- 24. 哈希碼實現
- 25. 如何用鏈接實現哈希表?
- 26. 如何實現動態哈希表的哈希函數?
- 27. C++中的哈希表實現
- 28. 哈希表模板實現的問題
- 29. 在C中的哈希表實現?
- 30. python中的哈希表實現
你似乎是要求兩種完全不同的。 ,正交問題 –
我明白你的意思了,我把這個問題改寫得更清楚 – user2278279