雜湊取模餘的基底為什麼要選擇素數?

2021-09-13 14:12:25 字數 677 閱讀 6707

蟬的生命週期為13年或17年,卻很少有14、15或16年,為什麼呢?蟬是弱勢群體,有很多天敵,選擇素數作為其生命週期能最大減少與其天敵們共存的時間,增加自己的存活率,這也是自然選擇的結果。

從蟬的哲學中獲得啟示,將雜湊取餘的基底選擇為素數能最大減少雜湊衝突情況的發生,使雜湊分布更均勻。

假設hash(key) = key % m,

若 m = 2k, 則 key % m = key & (m - 1), 而

m - 1 = 00000…(n-k個0)…000000 1111…(k個1)…11111

key跟m - 1相與之後,永遠只擷取了最後k位,前n - k位對雜湊位址無影響,顯然這樣會增加雜湊衝突的概率。

m取其他非素數仍然會有類似的缺陷,只有當m為素數時,資料對雜湊表的覆蓋最充分、分布最均勻。

我們處理的資料一般都具有區域性性,通常像for或while迴圈一樣以一定的步長遍歷資料,遍歷方式如下所示:

由數論的知識可以知道當且僅當步長s與m的最大公因數為1時,遍歷的足跡才能覆蓋整個雜湊表。不同的程式**有不同的步長遍歷方式,他們可能都要使用同乙個雜湊表,當m為素數時才能保證m與所有的步長s的最大公因數都為1。即m取素數時才能使遍歷的足跡分布均勻,減少衝突發生的概率。

雜湊表除留取餘法的桶個數為什麼是質數

可先科普下質數的概念 質數,也就是素數,就是指乙個大於1的自然數,約數 因數 只有1和它自己,否則叫合數。除留取餘,就是雜湊函式將關鍵字被某個不大於雜湊表長m的數p除后所得餘數為雜湊位址。這是最常用 也最簡單的構造雜湊函式的方法。當然,也可以對關鍵字直接取模,也可以摺疊 平方取中等運算後取模。那麼問...

為什麼專用伺服器要選擇至強Xeon系列的處理器呢?

選擇一台伺服器的時候,考慮選擇什麼樣的處理器 cpu 是乙個關鍵點,它可以決定著你的伺服器的強大程度。現在有很多關於是否應該選擇xeon處理器或core i7處理器的理論。fdc伺服器是美國領先的資料中心之一,其所有專用伺服器都使用了xeon處理器。這時的你可能在想,為什麼都使用xeon處理器?它有...

超盟之家是做什麼的?為什麼做便利店要選擇超盟之家?

超盟之家是社群新零售的再一次公升級,以商圈本地化服務為宗旨,通過規模化實體店,為社群居民 商圈商家搭建乙個真實 快捷 就近 方便 安全的網路購物,商家服務和商業賦能的環境。超盟之家是什麼?超盟之家靠什麼盈利?超盟之家的服務主體為社群居民和商圈商家 你想購物,來超盟之家 你想學店鋪營銷,來超盟之家 你...