如果我有一個1000的密鑰集,我的哈希表的合適大小是什麼,以及這是如何確定的?爲哈希選擇合適的表大小
回答
它取決於加載因子(表格將增加其大小並重新分配其元素的「完整百分比」點)。如果您知道您有1000個條目,並且該數字永遠不會更改,您可以將負載因子設置爲1.0,並將初始大小設置爲1000以獲得最大效率。如果您不確定具體的尺寸,則可以將載入係數保留爲其默認值0.75,並將初始尺寸設置爲1334(預計尺寸/ LF),這對於真正的性能良好,但需要額外的內存。
您可以使用下面的構造函數來設置負載係數:
Hashtable(int initialCapacity, float loadFactor)
這些因素的文檔中的一些討論,你需要在散列函數因素爲好。
一條經驗法則建議將表格大小增加一倍,以便有擴展空間,並希望保持較小的碰撞次數。
另一個經驗法則是假設你正在進行某種與模相關的散列,然後將你的表大小舍入到下一個最大的素數,然後使用該素數作爲模數值。
你有什麼樣的哈希?更多細節應該產生更好的建議。
兩次是好的。
您沒有大的鍵組。 不要擔心有關您的HashTable實施的困難討論,並去2000年。
2000並不是一個好的尺寸,因爲它不是素數。 2001年會很好,這不是主要的,但至少不會。將表中的密鑰分配得更好。一個好的散列表會照顧好散列函數,但大多數情況下都會使用這個散列表的大小。 – ReneS 2008-11-14 19:21:34
讓它成長。有了這個尺寸,自動處理就好了。除此之外,2 x大小+ 1是一個簡單的公式。素數也是一種很好的方式,但只要您的數據集達到一定的大小,哈希實現可能會決定重新哈希和增長表。
你的鑰匙正在推動有效性,並希望有足夠的分明。
底線:如果您遇到問題(例如尺寸或性能下降),請詢問尺寸問題,除此之外:別擔心!
我想重申一下上面說的https://stackoverflow.com/users/33229/wwwflickrcomphotosrene-germany。 1000對我來說似乎不是一個非常大的散列。我一直在java中使用大量有關這種大小的哈希表,而沒有看到很多性能問題。而且我幾乎不知道大小或負載係數。
如果你已經在你的代碼上運行一個分析器並確定哈希表是你的問題,那麼通過一切手段開始調整。否則,在你確定之前,我不會認爲你有問題。
畢竟,在大多數代碼中,性能問題不在您認爲的地方。我儘量不要預期。
- 1. 哈希表大小設置
- 2. SAS哈希合併 - 小數據集作爲哈希對象
- 3. Perl哈希陣列大小
- 4. 哈希字符串大小
- 5. 獲取合適的哈希索引C++
- 6. python,哈希函數選擇
- 7. Ruby集合哈希集合中的選擇性值
- 8. 哪種哈希算法最適合HMAC
- 9. 哈希表:爲什麼大小應該是素數?
- 10. 什麼是MongoDB哈希的大小?
- 11. 哈希合併行爲
- 12. 如何在Python中生成混合大小寫的哈希?
- 13. 選擇最合適的整數大小/範圍用於變量
- 14. 哈希函數和表格的大小表格2^p
- 15. 使TCL哈希不區分大小寫
- 16. 如何計算SHA-256哈希大小
- 17. pbkdf2 sha512密碼哈希大小
- 18. 哈希表vs哈希列表與哈希樹?
- 19. 哈希表中的搜索哈希
- 20. 如何實現動態大小的哈希表?
- 21. 修復了高速緩存的哈希表大小
- 22. 如何創建不區分大小寫的Glib哈希表?
- 23. C#創建一個固定大小的哈希表
- 24. 如何製作靈活大小的哈希表
- 25. 調整哈希表的大小有意義嗎?什麼時候?
- 26. 哈希表大小取決於密鑰的長度?
- 27. 合併哈希鍵
- 28. Clojure的合併在哈希表鍵值
- 29. 的UITableViewCell大小不合適
- 30. 適合JButton ImageIcon的大小
假設散列函數在期望的鍵集上表現良好。家庭釀造的散列函數在最小尺寸的表中可能表現不佳。對於家庭釀造的功能,您必須運行實驗。 – 2008-11-13 03:07:03
如果散列函數沒有良好的行爲,碰撞元素將被存儲在同一個桶中(在LinkedList中)。桌子最小尺寸對性能沒有任何影響。 – 2008-11-13 03:12:33