蟬的生命週期為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...