網(wǎng)上的相關(guān)教程非常多,基礎(chǔ)知識(shí)自行搜索即可。
習(xí)題主要選自O(shè)relly出版的《數(shù)據(jù)結(jié)構(gòu)與算法javascript描述》一書。
參考代碼可見:https://github.com/dashnowords/blogs/tree/master/Structure/Hash
定義
哈希表是一種根據(jù)關(guān)鍵碼去尋找值的數(shù)據(jù)映射結(jié)構(gòu),最直觀的應(yīng)用就是字典(現(xiàn)實(shí)的字典,不是數(shù)據(jù)結(jié)構(gòu)的字典概念)。
特點(diǎn):
常見散列函數(shù)
使用×××鍵對(duì)存儲(chǔ)空間長(zhǎng)度取模,所以存儲(chǔ)空間長(zhǎng)度一般取質(zhì)數(shù)(取質(zhì)數(shù)可以減小散列碰撞,不難理解)。
平方散列法
散列碰撞的一般解決方法
位置發(fā)生碰撞時(shí)使用鏈表或其他數(shù)據(jù)結(jié)構(gòu)將碰撞元素連接起來。
當(dāng)發(fā)生哈希碰撞時(shí),從當(dāng)前位置向后尋找到第一個(gè)沒有使用的位置,將要加入的數(shù)據(jù)放在該處。一般在可使用空間大于待存數(shù)據(jù)量2倍時(shí)使用。
散列函數(shù)相關(guān)的應(yīng)用非常廣,例如webpack打包時(shí)在文件名中添加的哈希值,將給定信息轉(zhuǎn)換為固定位數(shù)字符串的加密信息等都是散列的實(shí)際應(yīng)用,感興趣的讀者可以自行搜索加密,摘要算法相關(guān)關(guān)鍵詞進(jìn)行學(xué)習(xí)。
編寫一個(gè)簡(jiǎn)易Hash
類:
this.table
線性存儲(chǔ)空間simpleHash( )
簡(jiǎn)易的哈希函數(shù)show( )
顯示整個(gè)存儲(chǔ)信息put(value)
將一個(gè)值存入哈希表中find(value)
根據(jù)實(shí)際需要編寫的查找方法練習(xí)時(shí)可以先引入例題中的Hash
類,然后通過extends來繼承Hash
類并復(fù)寫set/get
方法或添加新的方法。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。