雜湊表取模選擇素數分析

2021-09-28 08:01:40 字數 794 閱讀 2336

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

雜湊函式即是將元素對映到對應槽位置的方法。

除法雜湊法 :h(k) = k mod m

通過取 k 除以 m 的餘數,將關鍵字 k 對映到 m 個槽上。

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

數列a:1,3,5,7,9,11,13,15

假設選取 8 取模,結果為:

每個數間隔 2,2 是 8 的乙個因數,容易發生衝突,不均勻分布。

假設選取 7 取模,結果為:

每個數間隔 2,2 不是 7 的因數,均勻分布。

一雜湊表長度m為100,採用除留餘數法構造雜湊函式,即h()=k%p(),,為使雜湊函式具有較好的效能,p的選擇應是()。

a、99

b、100

c、97

d、93

答案:c

分析:應選擇與100最近的最大素數,故97為最佳。

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

蟬的生命週期為13年或17年,卻很少有14 15或16年,為什麼呢?蟬是弱勢群體,有很多天敵,選擇素數作為其生命週期能最大減少與其天敵們共存的時間,增加自己的存活率,這也是自然選擇的結果。從蟬的哲學中獲得啟示,將雜湊取餘的基底選擇為素數能最大減少雜湊衝突情況的發生,使雜湊分布更均勻。假設hash k...

為什麼求模運算要用素數(質數) 雜湊表設計

為什麼求模運算要用素數 質數 雜湊表設計 by admin 2013 年 7 月 25 日 雜記,程式設計技術 在設計用除法來散射的雜湊表時,我們都會用數值模雜湊表大小,得到的餘數來作為id存入雜湊表對應格仔中。所有文章都表明要用乙個較大的素數來作為雜湊表的大小,也就是要模乙個較大的素數。但為什麼就...

雜湊和素數打表

舉例子吧 乙個陣列a 7 然後再定義乙個a陣列中最大元素 1的陣列b 14 for i 0 i 7 i b a i 1 如果輸了乙個數w,則需要判斷b w 是不是為1,如果是1,a陣列裡有這個數 舉例子吧 乙個陣列a 7 然後再定義乙個a陣列中最大元素 1的陣列b 14 for i 0 i 14 i...