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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

哈希表的大小为何最好是素数

發(fā)布時間:2025/3/12 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哈希表的大小为何最好是素数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

引言

為什么散列函數(shù)采用取模運算?又為什么取模運算的被取模數(shù)最好是素數(shù)?素數(shù)是如何在取模運算中很好的規(guī)避沖突的?

這些問題可能困擾諸多程序員很久了。我們總是說素數(shù)可以更好的避免沖突,但總是對各種長篇大論的分析望而卻步。

這篇文章是我在學(xué)習(xí)散列時針對素數(shù)在哈希函數(shù)中的如何成功避免大量沖突的原因總結(jié)。

盡可能言簡意賅地描述為什么素數(shù)那么香。

一、結(jié)論

素數(shù)能夠在取模運算中避免沖突并不是一個數(shù)學(xué)定律,而且能夠避免沖突也不是絕對的。

從規(guī)律上來看,如果待存儲的數(shù)列間隔恰好是是被取模數(shù)因子大小,那么合數(shù)要比素數(shù)更容易呈現(xiàn)周期性取模重復(fù)

這僅僅是一個規(guī)律,目前數(shù)學(xué)家也無法對這一規(guī)律進行嚴格定義,畢竟這個規(guī)律也并不是絕對的。

二、演示

我們通過一個簡單的例子來印證一下上面的這個規(guī)律:

從規(guī)律上來看,如果待存儲的數(shù)列間隔恰好是是被取模數(shù)因子大小,那么合數(shù)要比素數(shù)更容易呈現(xiàn)周期性取模重復(fù)

這個規(guī)律不是絕對的。下面選取了一個合數(shù)和一個素數(shù),待存儲的數(shù)列間隔為 2 或 3,請仔細觀察規(guī)律:

1

數(shù)列間隔 3

(3是12的因子)

數(shù)列343740434649525558
2mod 11 =1471025803
3mod 12 =101471014710
4mod 13 =81114710036
5mod 14 =691214710132
6

數(shù)列間隔 2

(2是12、14的因子)

數(shù)列676971737577798183
7mod 11 =135790246
8mod 12 =79111357911
9mod 13 =24681012135
10mod 14 =1113135791113

上圖中,數(shù)列代表待存儲的整型數(shù)據(jù),一般在很多散列表(如HashMap)中,都是通過對關(guān)鍵字進行某種變換得到一個整型數(shù)字,比如,如果key是字符串,那么可以通過計算字符編碼得到一個整數(shù)值。

mod 11 代表對11取模,mod 12 代表對 12 取模,依此類推。

我們分別選取了比較普通的兩組數(shù)列,分別對合數(shù)(12、14)和素數(shù)(11、13)進行取模運算,可以看到,取模結(jié)果重復(fù)的已經(jīng)使用紅色標記。

當數(shù)列間隔為 3 時,由于 3 是 12 的因子,因此,可以看到表中 mod 12 的結(jié)果呈現(xiàn)了周期性的模沖突。而其他的 11、13、14,并沒有發(fā)現(xiàn)明顯的沖突問題,而是很好地分散了取模結(jié)果。

當數(shù)列間隔為 2 時,由于 2 是 12、14 的因子,因此,可以看到表中 mod 12 和 mod 14 的結(jié)果都呈現(xiàn)了周期性的模沖突,而 11、13 兩個素數(shù)并沒有發(fā)現(xiàn)明顯的沖突問題,而是很好地分散了取模結(jié)果。

總結(jié)

從實驗結(jié)果可以清晰的看到,素數(shù)要比合數(shù)更適合取模運算。在不知道數(shù)列間隔的情況下,擁有較少因子的素數(shù)可以有效的避免規(guī)律性的取模沖突。

大家如果對我的結(jié)論感興趣,可以通過對比試驗來嘗試尋找數(shù)列間隔與因子之間的關(guān)系。

總結(jié)

以上是生活随笔為你收集整理的哈希表的大小为何最好是素数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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