簡體   English   中英

“分配hash函數”是什么意思?

[英]What does "distribution of the hash function" mean?

在閱讀有關 Object.GetHashCode 方法的 MSDN 文檔時,我遇到了像 hash function 這樣的短語應該在 hash 表中提供隨機或有用的分布。 對於 hash function 或 hash 表,此分布意味着什么?

hash function 產生一個 32 位 integer 用於“平衡”hash 表。 假設你的表有一百個“桶”,你根據 hash function 的后兩位小數將表中的項目放入一個桶中。

現在假設 hash function總是產生 100 的偶數倍數 每個項目都將 go 放入同一個桶中,而 hash 表將是不平衡的。 那將是一個糟糕的 hash function。

一個好的 hash 算法會產生大致均勻的分布,無論您有多少個桶也無論您如何從 hash 中提取桶號

對於 hash 到 function 具有最大功效的表,hash 的值應盡可能唯一以防止沖突。 例如,讓我們考慮一個非常簡單的 hash function:假設您的對象是名字和姓氏,對於 hash 值,您選擇首字母。 所以 Ginger Rodgers 的 hash 值為 GR,Fred Astaire 的 hash 值為 FA。 到目前為止一切順利,但是當 Frank Allen 的 FA 值為 hash 時會發生什么? 現在 Fred Astaire 和 Frank Allen 發生了沖突,hash 表實現必須將此作為特殊情況處理,這會降低效率。

最好的 hash 函數采用輸入空間 (Fred Astaire),並產生一個(理想情況下)輸入空間唯一的隨機值。 只要 hash 的大小小於數據的大小,就無法完全避免沖突,但應通過謹慎選擇 hash 算法將沖突降至最低。

正如下面 Eric 所指出的,平衡 hash 表的 hash 算法必須非常快,因此您必須在速度和沖突之間取得平衡。 您可以研究 SHA-1 (http://en.wikipedia.org/wiki/SHA-1) 等加密算法 hash 以了解生成唯一哈希的復雜性,但用於平衡 hash 表的 hash 算法需要盡可能快.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM