一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - hashtable桶數通常會取一個素數分析

hashtable桶數通常會取一個素數分析

2020-07-17 13:20liuqiyao Java教程

這篇文章主要介紹了hashtable桶數通常會取一個素數分析的相關資料,需要的朋友可以參考下

為什么一般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 )的運算,從而在常見應用中減小沖突幾率..

(個人意見:有時候不取質數效率也不會太差..但是無疑取質數之比較保險的..)

以上就是我的理解

補充一點,這里是說在常見應用中,往往有些數據會比較相近,這時候用質數比較好,比如要存放的數據是壓縮的狀態,比如存儲一個描述當前搜索狀態的表,的這時候哈希不用質數沖突機率就比較大。

如果是隨機分布的整數,那么哈希模數只要取到足夠大,在概率上來說都是一樣的,但是這顯然脫離實際應用。

你說的情況 是比較特殊的,因為選取了比較小的一個質數,當選去大質數N時,就可以僅在N進制的某一位失效,結合計算機系統的特性,N進制位表示法往往是不關鍵的,而常用的2^N進制比較關鍵,所以可以避免沖突。

其實,偶用一些大數做過測試,用來存放一個壓縮為二進制的鄰接矩陣,當模數足夠大時,即便是合數也能有很接近質數的效果,但在某些(幾十個)合數上會造成效率嚴重下降,所以質數是比較保險的。

你不妨自己做實驗,不要去選隨機整數,而要考慮一些常見應用,用質數和合數進行測試,主要考察平均裝載因子,你得到的結論可能和我一樣:合數絕大多數時候效果也不錯,但在一部分合數上效果差得出奇,而質數幾乎全部都有很好的效果。

我個人認為更普遍意義的理解,如果不取素數的話是會有一定危險的,危險出現在當假設所選非素數m=x*y,如果需要hash的key正好跟這個約數x存在關系就慘了,最壞情況假設都為x的倍數,那么可以想象hash的結果為:1~y,而不是1~m。但是如果選桶的大小為素數是不會有這個問題。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://blog.csdn.net/liuqiyao_01/article/details/14475159

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费一区二区视频 | 国产精品成人免费 | 任我行视频在线观看国语 | 久久久91精品国产一区二区 | 国产高清视频在线 | 506070老熟肥妇bbwxx视频 500第一精品 | 草莓香蕉绿巨人丝瓜榴莲18 | 天天操天天干天天舔 | 王雨纯羞羞 | 武侠艳妇屈辱的张开双腿 | 91国语自产拍在线观看 | 欧美日韩国产成人综合在线影院 | 变形金刚第一部 | 精品国语国产在线对白 | 免费高清观看 | 国产欧美日韩不卡 | 日韩一品在线播放视频一品免费 | 国产精品麻豆 | 亚洲系列国产精品制服丝袜第 | 亚洲天堂视频在线观看 | 经典WC女厕所里TV | 紧身牛仔裤美女被啪啪久久网 | 亚洲国产欧美另类va在线观看 | 色婷婷综合久久久 | 92国产福利视频一区二区 | 成人私人影院在线版 | 丝袜老师好湿好紧我要进去了 | 成人欧美一区二区三区黑人 | 香蕉97超级碰碰碰免费公 | chinese男同志videos | 2020年国产精品午夜福利在线观看 | 毛片免费在线视频 | jizz农村野外jizz农民 | 动漫美女人物被黄漫在线看 | 男神插曲女生动漫完整版动漫 | 欧美日韩一区二区三区在线观看 | www在线观看视频免费 | 国产1区2区三区不卡 | kk4kk免费毛片 | 黄瓜视频导航 | 99热久久这里只有精品23 |