C++哈希表
C++哈希表
- 槽總數(shù)的選擇
- 關(guān)鍵碼范圍較小
- 簡(jiǎn)單的哈希函數(shù)
- 沖突解決策略
- 開哈希法
- 閉哈希法
- 桶式哈希
- 線性探查
- 解決聚集的方法
- 二次探查
- 雙哈希
槽總數(shù)的選擇
關(guān)鍵碼范圍較小
由于關(guān)鍵碼范圍比較小,可以使用一個(gè)槽總數(shù)大于關(guān)鍵碼總數(shù)的表。直接使用槽的下標(biāo)作為關(guān)鍵碼值,此時(shí),不需要將關(guān)鍵碼值作為記錄的一部分進(jìn)行存儲(chǔ)。哈希函數(shù)可以直接設(shè)計(jì)成h(K)=K,但是這種情況比較少見
##關(guān)鍵碼范圍較大
如果可能的關(guān)鍵碼范圍較大,而同一時(shí)間段內(nèi)存儲(chǔ)的記錄總數(shù)較少時(shí)。如果槽數(shù)的設(shè)計(jì)和前者匹配通常意味著空間的浪費(fèi),而如果和后者匹配又容易導(dǎo)致沖突
除此之外,如果對(duì)關(guān)鍵碼值的分布特性不了解,也會(huì)使得哈希函數(shù)的設(shè)計(jì)更為困難。如果了解關(guān)鍵碼值的分布特性,應(yīng)對(duì)使用一個(gè)依賴于分布的哈希函數(shù),避免把一組相關(guān)的關(guān)鍵碼值映射到表的同一個(gè)槽中(例如,如果對(duì)英文單詞進(jìn)行哈希,就不應(yīng)當(dāng)對(duì)第一個(gè)字符的值哈希,因?yàn)檫@樣很可能使分
總結(jié)