国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 邏輯算法 > 正文

算法系列15天速成 第五天 五大經(jīng)典查找【中】

2024-09-08 23:18:39
字體:
供稿:網(wǎng)友
哈希查找:

    對的,他就是哈希查找,說到哈希,大家肯定要提到哈希函數(shù),呵呵,這東西已經(jīng)在我們腦子里面形成
固有思維了。大家一定要知道“哈希“中的對應(yīng)關(guān)系。
     比如說: ”5“是一個要保存的數(shù),然后我丟給哈希函數(shù),哈希函數(shù)給我返回一個”2",那么此時的”5“
和“2”就建立一種對應(yīng)關(guān)系,這種關(guān)系就是所謂的“哈希關(guān)系”,在實際應(yīng)用中也就形成了”2“是key,”5“是value。
    那么有的朋友就會問如何做哈希,首先做哈希必須要遵守兩點原則:
          ①:  key盡可能的分散,也就是我丟一個“6”和“5”給你,你都返回一個“2”,那么這樣的哈希函數(shù)不盡完美。
          ②: 哈希函數(shù)盡可能的簡單,也就是說丟一個“6”給你,你哈希函數(shù)要搞1小時才能給我,這樣也是不好的。

其實常用的做哈希的手法有“五種”:
第一種:”直接定址法“。
                  很容易理解,key=Value+C; 這個“C"是常量。Value+C其實就是一個簡單的哈希函數(shù)。
第二種:“除法取余法”。
                  很容易理解, key=value%C;解釋同上。
第三種:“數(shù)字分析法”。
                  這種蠻有意思,比如有一組value1=112233,value2=112633,value3=119033,
                  針對這樣的數(shù)我們分析數(shù)中間兩個數(shù)比較波動,其他數(shù)不變。那么我們?nèi)ey的值就可以是
                  key1=22,key2=26,key3=90。
第四種:“平方取中法”。此處忽略,見名識意。
第五種:“折疊法”。
                 這種蠻有意思,比如value=135790,要求key是2位數(shù)的散列值。那么我們將value變?yōu)?3+57+90=160,
                 然后去掉高位“1”,此時key=60,哈哈,這就是他們的哈希關(guān)系,這樣做的目的就是key與每一位value都相
                 關(guān),來做到“散列地址”盡可能分散的目地。

正所謂常在河邊走,哪有不濕鞋。哈希也一樣,你哈希函數(shù)設(shè)計的再好,搞不好哪一次就撞樓了,那么拋給我們的問題
就是如果來解決“散列地址“的沖突。

其實解決沖突常用的手法也就2種:

第一種: “開放地址法“。
                 所謂”開放地址“,其實就是數(shù)組中未使用的地址。也就是說,在發(fā)生沖突的地方,后到的那個元素(可采用兩種方式
                 :①線性探測,②函數(shù)探測)向數(shù)組后尋找"開放地址“然后把自己插進入。

第二種:”鏈接法“。
                這個大家暫時不懂也沒關(guān)系,我就先介紹一下原理,就是在每個元素上放一個”指針域“,在發(fā)生沖突的地方,后到的那
               個元素將自己的數(shù)據(jù)域拋給沖突中的元素,此時沖突的地方就形成了一個鏈表。

上面 主站蜘蛛池模板: 大新县| 金塔县| 勐海县| 余江县| 大宁县| 镇平县| 繁昌县| 濉溪县| 岫岩| 灌阳县| 特克斯县| 茂名市| 荔浦县| 龙川县| 鄱阳县| 丘北县| 边坝县| 冷水江市| 乡城县| 天长市| 个旧市| 和林格尔县| 云南省| 杂多县| 蕉岭县| 容城县| 仪陇县| 二连浩特市| 元朗区| 洛川县| 新平| 峨边| 连平县| 桦南县| 河南省| 耿马| 大余县| 贡觉县| 区。| 藁城市| 阜平县|