除留余数法学习
除留余數(shù)法介紹
除留余數(shù)法此方法為最常用的構(gòu)造散列函數(shù)方法。對于散列表長為m的散列函數(shù)公式為:
f( key ) = key mod p ( p ≤ m )
mod是取模(求余數(shù))的意思。事實(shí)上,這方法不僅可以對關(guān)鍵字直接取模,也可在折疊、
平方取中后再取模。
一個例子
? 很顯然,本方法的關(guān)鍵就在于選擇合適的p, p如果選得不好,就可能會容易產(chǎn)生同義詞。
? 下面我們來舉個例子看看:
? 有一個關(guān)鍵字,它有12個記錄,現(xiàn)在我們要針對它設(shè)計(jì)一個散列表。如果采用除留余數(shù)法,
? 那么可以先嘗試將散列函數(shù)設(shè)計(jì)為f(key) = key mod 12的方法。比如29 mod 12 = 5,所以
? 它存儲在下標(biāo)為5的位置。
? 不過這也是存在沖突的可能的,因?yàn)?2 = 2×6 = 3×4。
? 如果關(guān)鍵字中有像18(3×6)、30(5×6)、42(7×6)等數(shù)字,它們的余數(shù)都為6,這就和78所對應(yīng)
? 的下標(biāo)位置沖突了。
如何合理選取p值
? 使用除留余數(shù)法的一個經(jīng)驗(yàn)是,若散列表表長為m,通常p為小于或等于表長(最好接近m)的最小質(zhì)數(shù)或不包含小于20質(zhì)因子的合數(shù)。
? 這句話怎么理解呢?要不這樣吧,
? 我再舉個例子:某散列表的長度為100,散列函數(shù)H(k)=k%P,則P通常情況下最好選擇哪個呢?
? A、91 B、93 C、97 D、99
?實(shí)踐證明,當(dāng)P取小于哈希表長的最大質(zhì)數(shù)時,產(chǎn)生的哈希函數(shù)較好。我選97,因?yàn)樗请x長度值最近的最大質(zhì)數(shù)。
除留余數(shù)法此方法為最常用的構(gòu)造散列函數(shù)方法。對于散列表長為m的散列函數(shù)公式為:
f( key ) = key mod p ( p ≤ m )
mod是取模(求余數(shù))的意思。事實(shí)上,這方法不僅可以對關(guān)鍵字直接取模,也可在折疊、
平方取中后再取模。
一個例子
? 很顯然,本方法的關(guān)鍵就在于選擇合適的p, p如果選得不好,就可能會容易產(chǎn)生同義詞。
? 下面我們來舉個例子看看:
? 有一個關(guān)鍵字,它有12個記錄,現(xiàn)在我們要針對它設(shè)計(jì)一個散列表。如果采用除留余數(shù)法,
? 那么可以先嘗試將散列函數(shù)設(shè)計(jì)為f(key) = key mod 12的方法。比如29 mod 12 = 5,所以
? 它存儲在下標(biāo)為5的位置。
? 不過這也是存在沖突的可能的,因?yàn)?2 = 2×6 = 3×4。
? 如果關(guān)鍵字中有像18(3×6)、30(5×6)、42(7×6)等數(shù)字,它們的余數(shù)都為6,這就和78所對應(yīng)
? 的下標(biāo)位置沖突了。
如何合理選取p值
? 使用除留余數(shù)法的一個經(jīng)驗(yàn)是,若散列表表長為m,通常p為小于或等于表長(最好接近m)的最小質(zhì)數(shù)或不包含小于20質(zhì)因子的合數(shù)。
? 這句話怎么理解呢?要不這樣吧,
? 我再舉個例子:某散列表的長度為100,散列函數(shù)H(k)=k%P,則P通常情況下最好選擇哪個呢?
? A、91 B、93 C、97 D、99
?實(shí)踐證明,當(dāng)P取小于哈希表長的最大質(zhì)數(shù)時,產(chǎn)生的哈希函數(shù)較好。我選97,因?yàn)樗请x長度值最近的最大質(zhì)數(shù)。
總結(jié)
- 上一篇: scrapy框架使用教程
- 下一篇: 路由器有外派信号但无服务器,路由器有信号