為什麼一般hashtable的桶數會取乙個素數

2021-08-27 21:30:17 字數 423 閱讀 7834

為什麼一般hashtable的桶數會取乙個素數

設有乙個雜湊函式

h( c ) = c % n;

當n取乙個合數時,最簡單的例子是取2^n,比如說取2^3=8,這時候

h( 11100(二進位制) ) = h( 28 ) = 4

h( 10100(二進位制) ) = h( 20 )= 4

這時候c的二進位制第4位(從右向左數)就」失效」了,也就是說,無論第c的4位取什麼值,都會導致h( c )的值一樣.這時候c的第四位就根本不參與h( c )的運算,這樣h( c )就無法完整地反映c的特性,增大了導致衝突的機率.

取其他合數時,都會不同程度的導致c的某些位」失效」,從而在一些常見應用中導致衝突.

但是取質數,基本可以保證c的每一位都參與h( c )的運算,從而在常見應用中減小衝突機率

為什麼一般hashtable的桶數會取乙個素數

為什麼一般hashtable的桶數會取乙個素數 設有乙個雜湊函式 h c c n 當n取乙個合數時,最簡單的例子是取2 n,比如說取2 3 8,這時候 h 11100 二進位制 h 28 4 h 10100 二進位制 h 20 4 這時候c的二進位制第4位 從右向左數 就 失效 了,也就是說,無論第...

盤盈的存貨一般應作為什麼處理

企業進行存貨清查盤點,應當編制 存貨盤存報告單 並將其作為存貨清查的原始憑證。經過存貨盤存記錄的實存數與存貨的賬面記錄核對,若賬面存貨小於實際存貨,為存貨的盤盈 反之,為存貨的盤虧。對於盤盈 盤虧的存貨要記入 待處理財產損溢 科目,查明原因進行處理。企業在財產清查中盤盈的存貨,根據 存貨盤存報告單 ...

一般人為什麼不成功? 陳安之

一般人為什麼不成功?陳安之 在研究如何成功致富之前,我們一定要了解,一般人為什麼會失敗。一般人都在研究成功者如何成功時,卻從來沒有思考過失敗者為何失敗,所以也就沒有避免失敗者所犯的錯誤。我以前每天都在研究成功者如何成功,卻從未研究失敗者如何失敗。失敗是成功之母,檢討是成功之父。我發現,如果你沒做成功...