簡體   English   中英

最壞情況哈希函數

[英]Worst Case Hash Function

在類中提到的“最壞情況哈希函數,h(x)= 1”

(我的導師已經離開了幾個星期;我顯然會問他是否可以)。

我的問題:“最壞情況哈希函數”究竟是什么意思? 是這樣的,每個元素被賦予相同的值1(或1%tableSize),或者給予elementOne哈希值1,elementTwo 2,elementThree 3,依此類推?

可能是一個菜鳥問題,但我想我無論如何都會問它。

散列函數的質量取決於與多個不同對象發生沖突的概率。 完美的哈希函數將所有對象映射到完全沒有沖突的數字,從而保證桶之間的項目均勻分布。

相反,最糟糕的哈希函數通過為所有對象返回相同的值來保證沖突,而不管您傳遞的對象是什么。 這會將基於散列的查找轉換為沖突解決方案查找,從而消除了首先使用基於散列的容器的任何優勢。

最差的哈希函數是返回常量值的函數。 即,該類型的所有對象具有相同的哈希值,導致大量的沖突。

雖然通常不能完全避免碰撞,但最小化碰撞對於使用哈希的任何事物的性能都很重要。

應該注意的是,雖然它是一個糟糕的散列函數,但它在技術上是正確的,因為對散列函數的要求只是為被認為相等的對象返回相同的值(這通常會這樣做,因為它返回相同的值,對於一切)。

在最壞的情況下,每個對象都具有相同的散列(例如1)。 這與equals一致,只要兩個相等的對象總是具有相同的哈希值,那么它就可以工作; 但它不會給你一個好的哈希給出的任何查找好處,因為每次你嘗試查找一個對象時,你必須查看集合中的每個對象(因為它們都有相同的哈希值)。

最差的哈希函數是一個返回常量值的函數。 在基於散列的集合中,根據散列值存儲對象。
因此,如果對於任何對象,您獲得相同的哈希值,則意味着所有對象最終都存儲在同一位置。
因此,集合需要始終迭代始終與與此哈希值關聯的存儲桶/槽相同以檢索對象。

你失去了使用哈希函數的興趣。

無論x是什么,您定義的h(x)=1的哈希函數都會生成相同的值。 理想的散列函數將為x的每個值生成唯一的密鑰。 常量哈希函數將最終為x的每個值生成相同的哈希值。 因此,如果你采用哈希表的情況,它將是一個具有巨大鏈表的單個元素表

暫無
暫無

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

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