欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

hashtable桶數(shù)通常會取一個素數(shù)分析

 更新時間:2016年12月22日 17:18:40   投稿:lqh  
這篇文章主要介紹了hashtable桶數(shù)通常會取一個素數(shù)分析的相關(guān)資料,需要的朋友可以參考下

為什么一般hashtable的桶數(shù)會取一個素數(shù)

設(shè)有一個哈希函數(shù)

H( c ) = c % N;

當(dāng)N取一個合數(shù)時,最簡單的例子是取2^n,比如說取2^3=8,這時候

H( 11100(二進制) ) = H( 28 ) = 4
H( 10100(二進制) ) = H( 20 )= 4

這時候c的二進制第4位(從右向左數(shù))就”失效”了,也就是說,無論第c的4位取什么值,都會導(dǎo)致H( c )的值一樣.這時候c的第四位就根本不參與H( c )的運算,這樣H( c )就無法完整地反映c的特性,增大了導(dǎo)致沖突的幾率.

取其他合數(shù)時,都會不同程度的導(dǎo)致c的某些位”失效”,從而在一些常見應(yīng)用中導(dǎo)致沖突.

但是取質(zhì)數(shù),基本可以保證c的每一位都參與H( c )的運算,從而在常見應(yīng)用中減小沖突幾率..

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

以上就是我的理解

補充一點,這里是說在常見應(yīng)用中,往往有些數(shù)據(jù)會比較相近,這時候用質(zhì)數(shù)比較好,比如要存放的數(shù)據(jù)是壓縮的狀態(tài),比如存儲一個描述當(dāng)前搜索狀態(tài)的表,的這時候哈希不用質(zhì)數(shù)沖突機率就比較大。

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

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

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

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

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

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

相關(guān)文章

  • java導(dǎo)出excel 瀏覽器直接下載或者或以文件形式導(dǎo)出

    java導(dǎo)出excel 瀏覽器直接下載或者或以文件形式導(dǎo)出

    這篇文章主要介紹了java導(dǎo)出excel 瀏覽器直接下載或者或以文件形式導(dǎo)出方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java 多態(tài)與抽象類詳解總結(jié)

    java 多態(tài)與抽象類詳解總結(jié)

    在面向?qū)ο蟮母拍钪?,所有的對象都是通過類來描繪的,但是反過來,并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類,而多態(tài)是同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力
    2021-11-11
  • java中四種操作xml方式的比較

    java中四種操作xml方式的比較

    本文主要介紹了java中四種操作xml的方式并對它們進行比較分析。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • 在IDEA中創(chuàng)建跑得起來的Springboot項目

    在IDEA中創(chuàng)建跑得起來的Springboot項目

    這篇文章主要介紹了在IDEA中創(chuàng)建跑得起來的Springboot項目的圖文教程,需要的朋友可以參考下
    2018-04-04
  • Java常用加密算法實例總結(jié)

    Java常用加密算法實例總結(jié)

    這篇文章主要介紹了Java常用加密算法,結(jié)合實例形式總結(jié)分析了base64、md5、sha、rsa、des等加密算法實現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • Spring Cloud Gateway 默認的filter功能和執(zhí)行順序介紹

    Spring Cloud Gateway 默認的filter功能和執(zhí)行順序介紹

    這篇文章主要介紹了Spring Cloud Gateway 默認的filter功能和執(zhí)行順序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • slf4j?jcl?jul?log4j1?log4j2?logback各組件系統(tǒng)日志切換

    slf4j?jcl?jul?log4j1?log4j2?logback各組件系統(tǒng)日志切換

    這篇文章主要介紹了slf4j、jcl、jul、log4j1、log4j2、logback的大總結(jié),各個組件的jar包以及目前系統(tǒng)日志需要切換實現(xiàn)方式的方法,有需要的朋友可以借鑒參考下
    2022-03-03
  • java必學(xué)必會之方法的重載(overload)

    java必學(xué)必會之方法的重載(overload)

    java必學(xué)必會之方法的重載,介紹了方法的重載、構(gòu)造方法的重載,想要學(xué)好java方法的重載的朋友一定要好好閱讀這篇文章
    2015-12-12
  • mybatis配置mapper-locations的坑及解決

    mybatis配置mapper-locations的坑及解決

    這篇文章主要介紹了mybatis配置mapper-locations的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java 關(guān)于遞歸的調(diào)用機制精細解讀

    Java 關(guān)于遞歸的調(diào)用機制精細解讀

    關(guān)于遞歸是什么,簡單的說: 遞歸就是方法自己調(diào)用自己,每次調(diào)用時 傳入不同的變量.遞歸有助于編程者解決復(fù)雜的問題,同時可以讓代碼變得簡潔
    2021-10-10

最新評論