日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

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

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

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

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

  

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

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

總結

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。