激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
572
主站蜘蛛池模板: 一级片a| 免费一级高清毛片 | 日韩精品99久久久久久 | 一级做受毛片免费大片 | 国产成人精品一区二区视频免费 | 欧美18—19sex性hd按摩 | 欧美伦理一区二区 | 欧美性成人 | 精品亚洲视频在线观看 | 最新黄色电影网站 | 亚洲最黄视频 | 视频在线亚洲 | 一级做人爱c黑人影片 | 亚洲综合91 | 一本色道久久99精品综合蜜臀 | 国产日韩线路一线路二 | 精品国产一区二区在线 | 久久经典国产视频 | 欧美a在线| 黄免费在线 | 国产视频软件在线 | 国产精品免费一区二区三区四区 | 国产一区二区三区视频观看 | 亚洲日本韩国精品 | 未成年人在线观看 | 又黄又爽免费无遮挡在线观看 | 欧美日韩a∨毛片一区 | 色人阁五月天 | 一区二区三区四区高清视频 | 法国性经典xxxhd | www.com国产精品| 精品亚洲综合 | 亚洲天堂成人在线观看 | 被玩坏了的女老师(高h np) | 丰满年轻岳中文字幕一区二区 | 香蕉秀| 国产精品午夜未成人免费观看 | 久久国产精品久久久久久久久久 | 羞羞视频免费网站 | 国产午夜精品久久久久婷 | 一级做受毛片免费大片 |