MIT算法導(dǎo)論八 全域哈希和完全哈希

- 全域哈希
- 完全哈希

普通哈希的一個(gè)缺點(diǎn):
對(duì)任意的hash函數(shù)h省艳,總存在一組keys,讓他們都映射到同一個(gè)槽里面塌忽,這樣效率拍埠,就跟離鏈表差不多了

解決的思想就是:
獨(dú)立于鍵值失驶,隨機(jī)的選擇hash 函數(shù)土居。這就跟快排中為避免最差情況時(shí)隨機(jī)化版本差不多。但是選取hash function的全局域是不能亂定的嬉探,否則也打不到理想的性能擦耀。


全域哈希

設(shè)U是key的全局域, 設(shè)H是哈希函數(shù)的有限集合涩堤,H函數(shù)將U映射到{0,1,..,m-1}眷蜓,即table的槽內(nèi)。 如果對(duì)所有不等的鍵值對(duì)x,y∈U胎围,將他們映射到同一個(gè)位置的概率是H/m
從另一個(gè)角度看吁系,如果函數(shù)h是從H中隨機(jī)選出的,x和y發(fā)生碰撞的概率是1/m

用一張圖來(lái)理解白魂,當(dāng)我隨機(jī)選一個(gè)哈希函數(shù)時(shí)汽纤,就像在上圖區(qū)域亂扔一個(gè)飛鏢,落在下面紅色區(qū)域中就會(huì)發(fā)生沖突福荸,這個(gè)概率是1/m

下面給一個(gè)定理蕴坪,說(shuō)明為什么全域函數(shù)就是好的
設(shè)h是從哈希函數(shù)全域集H中隨機(jī)選出的函數(shù)h,h被用作把任意n個(gè)鍵映射到表T的m個(gè)槽中,對(duì)給定鍵值x背传,E[#collision with x]<n/m | 發(fā)生碰撞的期望次數(shù)小于n/m呆瞻,即裝載因子α

證明
設(shè)Cx是表示與key x沖突的鍵值數(shù)量的隨機(jī)變量,設(shè)Cxy是指示變量
Cxy = 1 if h(x) = h(y) and 0 otherwise
根據(jù)定理 E[Cxy]=1/m  
Cx=∑Cxy | y∈T?{x}
=》 E[Cx] = E[ ∑Cxy ]   | y∈T?{x}
          = ∑ E[Cxy] | y∈T?{x}
          = ∑ 1/m | y∈T?{x} 
          = n-1 / m

這個(gè)定理想要說(shuō)明的是径玖,這種全域哈希的隨機(jī)化選擇可以達(dá)到哈希表理想的效果

構(gòu)造一個(gè)全域哈希

首先選擇一個(gè)足夠大的質(zhì)數(shù)m痴脾,把key k分解為r+1位,可以把k=<k_0挺狰、k_1 ...k_r> | k_i > 0明郭,即把k轉(zhuǎn)換成m進(jìn)制數(shù)
然后引入隨機(jī)化策略,隨機(jī)的選擇一個(gè)數(shù)a丰泊,a=<a_0薯定、a_1 ...a_r>,a同樣是m進(jìn)制數(shù)瞳购,a_i∈[0, m-1]话侄,對(duì)于a的每一位,對(duì)應(yīng)一個(gè)不同的哈希函數(shù)学赛,用隨機(jī)數(shù)a表示隨機(jī)哈希函數(shù)
最后定義哈希函數(shù)年堆,ha(k) = ∑ ai·ki mod m | i = 0 <- r

書上給出的全域哈希
首先選擇一個(gè)足夠大的質(zhì)數(shù)p,使得所有的鍵值都在0-p-1之間
Zp={0,1,...,p-1},Z?p={1,2,..,p-1}
對(duì)于任意的a∈Zp*和b∈Zp盏浇,定義散列函數(shù)
Ha,b(k) = ((ak + b) mod p) mod m
所有這樣的哈希函數(shù)構(gòu)成的函數(shù)集
Hp.m={ha,b | a∈Zp*,b∈Zp}变丧,共p(p-1)個(gè)散列函數(shù)

現(xiàn)有p=17,m=6 計(jì)算h3,4(8)=5

完全哈希

當(dāng)鍵值是static(即固定不變)的時(shí)候绢掰,我們可以涉及方案使得最差情況下的查詢性能也很出色痒蓬,這就是完美哈希

完全哈希可以在最壞情況下以O(shè)(1)復(fù)雜度查找滴劲,性能非常出色的攻晒。完美哈希的思想就是采用兩級(jí)的框架,每一級(jí)上都用全域哈希

完全哈希的結(jié)構(gòu)如圖


完全哈希

第一級(jí)和帶鏈表的哈希非常的相似班挖,只是第一級(jí)發(fā)生沖突后后面接
的不是鏈表鲁捏,而是一個(gè)新的哈希表。后面那個(gè)哈希結(jié)構(gòu)萧芙,我們可以看到前端存儲(chǔ)了一些哈希表的基本性質(zhì):m 哈希表槽數(shù)给梅;a,b 全域哈希函數(shù)要確定的兩個(gè)值(一般是隨機(jī)選然后確定下來(lái)的),后面跟著哈希表双揪。新的哈希表通過(guò)選取哈希函數(shù)卻表二次哈希不出現(xiàn)碰撞

為了保證不沖突动羽,每個(gè)二級(jí)哈希表的數(shù)量是第一級(jí)映射到這個(gè)槽中元素個(gè)數(shù)的平方,這樣可以保證整個(gè)哈希表非常的稀疏盟榴。下面給出一個(gè)定理曹质,能更清楚的看到設(shè)置m=n2的作用

設(shè)H是一類全域哈希函數(shù),哈希表的槽數(shù)m=n2. 那么,如果我們用一個(gè)隨機(jī)函數(shù)h∈H把n個(gè)keys映射到表中羽德。沖突次數(shù)的期望最多是1/2

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末几莽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宅静,更是在濱河造成了極大的恐慌章蚣,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姨夹,死亡現(xiàn)場(chǎng)離奇詭異纤垂,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)磷账,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門峭沦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人逃糟,你說(shuō)我怎么就攤上這事吼鱼。” “怎么了绰咽?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵菇肃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我取募,道長(zhǎng)琐谤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任玩敏,我火速辦了婚禮斗忌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘聊品。我一直安慰自己飞蹂,他們只是感情好几苍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布翻屈。 她就那樣靜靜地躺著,像睡著了一般妻坝。 火紅的嫁衣襯著肌膚如雪伸眶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天刽宪,我揣著相機(jī)與錄音厘贼,去河邊找鬼。 笑死圣拄,一個(gè)胖子當(dāng)著我的面吹牛嘴秸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼岳掐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼凭疮!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起串述,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤执解,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后纲酗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衰腌,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年觅赊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了右蕊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吮螺,死狀恐怖尤泽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情规脸,我是刑警寧澤坯约,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站莫鸭,受9級(jí)特大地震影響闹丐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜被因,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一卿拴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梨与,春花似錦堕花、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至呻粹,卻和暖如春壕曼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背等浊。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工腮郊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人筹燕。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓轧飞,卻偏偏與公主長(zhǎng)得像衅鹿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子过咬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • - 哈希表- 哈希函數(shù)選擇- 哈希碰撞 由“符號(hào)表問(wèn)題”引入什么是哈希有一個(gè)表S有n條記錄塘安,每個(gè)記錄(通常認(rèn)為是指...
    Alex90閱讀 1,629評(píng)論 0 2
  • 所有貨幣都需要一些方法來(lái)控制供應(yīng),并強(qiáng)制執(zhí)行各種安全屬性以防止作弊援奢。在法定貨幣方面兼犯,像中央銀行這樣的組織控制貨幣供...
    Nutbox_Lab閱讀 3,101評(píng)論 1 3
  • 導(dǎo)語(yǔ): 如果你已經(jīng)加入了iOS攻城獅隊(duì)伍,那么我們由衷地祝賀您正式成為一名終身學(xué)習(xí)的程序猿集漾;有人覺(jué)得這句話...
    超人猿閱讀 2,296評(píng)論 3 19
  • //作者:JRZAlan //備注:第一次做簡(jiǎn)書,希望能對(duì)大家起到幫助切黔。 這是對(duì)一些計(jì)算機(jī)編程語(yǔ)言的一些英語(yǔ)單詞,...
    JRZAlan閱讀 16,853評(píng)論 0 77
  • 周檢視: 一、90天目標(biāo) 1具篇、作息晚11早7點(diǎn) 2纬霞、每周keep3次或跑步2次 3、每天學(xué)習(xí)英語(yǔ)不低于半小時(shí) 二驱显、...
    yuantuotuo閱讀 230評(píng)論 0 0