日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[原创] 为什么模除的时候一般建议选择素数来除?比如说hashtable的桶数会取一个素数...

發布時間:2025/7/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [原创] 为什么模除的时候一般建议选择素数来除?比如说hashtable的桶数会取一个素数... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

設有一個哈希函數
H( c ) = c % N;
當N取一個合數時,最簡單的例子是取2^n,比如說取2^3=8,這時候
H( 11100(二進制) ) = H( 28 ) = 4
H( 10100(二進制) ) = H( 20 )= 4

因為除以一個2^n,可以看為向左移動n位,而模除得到的余數其實就是這移掉的n位數,因此在這種情況下,除開這低位的n位數以外,剩余的高位數所有位都沒有利用上,也就是說無論高位上的位取什么數,都對最后的余數不影響,從而有很多不同的數,但由于低n位是一樣的,所以依然發生沖突。也就是導致沖突的幾率增大。

關于為什么模除以素數就比除以合數沖突概率小?以下是個人推測:

  當除以一個素數的時候(素數定義:只有1和它本身兩個因數的自然數),由于該數不是2的倍數,因此除法不能完整的說是左右多少位,如果硬要除以該素數按進行移位來算的話,可以說移掉的低多少位,不再是一個整數,那么模除將影響的不再是低多少位數,而是相比于合數來說,要影響更多位,甚至說基本上會影響一個數所有的而二進制位。從而讓一個數的所有二進制位都對最后產生的模除結果發揮了作用,相比于模除一個合數僅僅是低n位發揮作用來說,模除以一個素數發生沖突的概率就會更小。

  

轉載于:https://www.cnblogs.com/lordcheng/p/7344652.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的[原创] 为什么模除的时候一般建议选择素数来除?比如说hashtable的桶数会取一个素数...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。