哈希表—什么是哈希表

冰凍非一日之寒

哈希表是一種數(shù)據(jù)結(jié)構(gòu)~

基本概念

哈希表可以存儲各種類型的數(shù)據(jù)蛤售,當(dāng)我們從哈希表中查找所需要的數(shù)據(jù)時,理想情況是不經(jīng)過任何比較妒潭,一次存取便能得到所查記錄悴能,那就必須在記錄的存儲位置和它的關(guān)鍵字之間建立一個確定的對應(yīng)關(guān)系 f,使每個關(guān)鍵字和結(jié)構(gòu)中一個唯一的存儲位置相對應(yīng)雳灾。(關(guān)鍵字就是所要存儲的數(shù)據(jù)漠酿,存儲位置相當(dāng)于數(shù)組的索引)

當(dāng)然,可以把哈希表理解為一個數(shù)組谎亩,每個索引對應(yīng)一個存儲位置炒嘲,哈希表的索引并不像普通數(shù)組的索引那樣,從0到length-1匈庭,而是由關(guān)鍵字(數(shù)據(jù)本身)通過哈希函數(shù)得到

eg1. 將26個小寫字母存儲到數(shù)組? int [26] a夫凸。

a對應(yīng)a[0],b對應(yīng)a[1]阱持,c對應(yīng)a[3]……以此類推夭拌。

圖片發(fā)自簡書App

那么,數(shù)組 int [26] a 就是一個哈希表衷咽!

哈希函數(shù)

例1中鸽扁,關(guān)鍵字(小寫字母)是如何得到自己對應(yīng)的索引(存儲位置)的呢?

關(guān)鍵字的ASCII值減去a的ASCII值镶骗!

圖片發(fā)自簡書App

上面說過桶现,關(guān)鍵字通過哈希函數(shù)得到索引,所以卖词,f(ch)就是本例題的哈希函數(shù)巩那。

這樣吏夯,我們就在關(guān)鍵字和數(shù)字(存儲位置)之間建立了一個確定的對應(yīng)關(guān)系f。

關(guān)鍵字與數(shù)字是一一對應(yīng)的即横,由于數(shù)組本身支持隨機(jī)訪問噪生,所以,當(dāng)查找關(guān)鍵字時东囚,只需要O(1)的查找操作跺嗽,也就是實現(xiàn)了不經(jīng)過任何比較,一次便能得到所查記錄页藻。

哈希表中哈希函數(shù)的設(shè)計是相當(dāng)重要的桨嫁,這也是建哈希表過程中的關(guān)鍵問題之一。

哈希沖突

假如份帐,我們所要存儲的數(shù)據(jù)其關(guān)鍵字是一個人的身份證號(18位數(shù)字)璃吧,這個時候我們該怎么計算關(guān)鍵字對應(yīng)的索引呢?

比如一個人的身份證號是 411697199702076425废境,我們很難像例1那樣直接讓關(guān)鍵字與數(shù)字建立一一對應(yīng)的關(guān)系畜挨,并且保證數(shù)字適合作為數(shù)組的索引。

在這種情況下噩凹,通過哈希函數(shù)計算出的索引巴元,即使關(guān)鍵字不同,索引也會有可能相同驮宴。這就是哈希沖突

當(dāng)索引相同時逮刨,我們該怎么存儲數(shù)據(jù)呢?如何解決哈希沖突堵泽,是我們建哈希表的另一個關(guān)鍵問題修己。

空間換時間

哈希表充分體現(xiàn)了空間換時間這種經(jīng)典的算法思想。

關(guān)鍵字是大整數(shù)時落恼,比如上面我們舉的身份證號例子箩退,411697199702076425

假如我們能開辟一個 999999999999999999 大的空間离熏,這樣就能直接把身份證號作為關(guān)鍵字存儲到數(shù)組中佳谦,這樣可以用O(1)時間完成各項操作

假如我們只有 1 的空間,我們需要把所有信息存儲到這個空間中(也就是所有數(shù)據(jù)都會產(chǎn)生哈希沖突)滋戳,我們只能用O(n)時間完成各項操作

事實上钻蔑,我們不可能開辟一個如此大的空間,也不可會開辟如此小的空間

無限空間時奸鸯,時間為O(1)

1的空間時咪笑,時間為O(n)

而哈希表就是在二者之間產(chǎn)生一個平衡,即空間和時間的平衡娄涩。

哈希表中的關(guān)鍵問題

1.哈希函數(shù)的設(shè)計

2.解決哈希沖突

3.哈希表實現(xiàn)時間和空間的平衡



后續(xù)會詳細(xì)說明這三個關(guān)鍵問題~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窗怒,一起剝皮案震驚了整個濱河市映跟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扬虚,老刑警劉巖努隙,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辜昵,居然都是意外死亡荸镊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門堪置,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躬存,“玉大人,你說我怎么就攤上這事舀锨×胫蓿” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵坎匿,是天一觀的道長钦椭。 經(jīng)常有香客問我,道長碑诉,這世上最難降的妖魔是什么彪腔? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮进栽,結(jié)果婚禮上德挣,老公的妹妹穿的比我還像新娘。我一直安慰自己快毛,他們只是感情好格嗅,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著唠帝,像睡著了一般屯掖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上襟衰,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天贴铜,我揣著相機(jī)與錄音,去河邊找鬼瀑晒。 笑死绍坝,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苔悦。 我是一名探鬼主播轩褐,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼玖详!你這毒婦竟也來了把介?” 一聲冷哼從身側(cè)響起勤讽,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拗踢,沒想到半個月后地技,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡秒拔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年莫矗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砂缩。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡作谚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庵芭,到底是詐尸還是另有隱情妹懒,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布双吆,位于F島的核電站眨唬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏好乐。R本人自食惡果不足惜匾竿,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔚万。 院中可真熱鬧岭妖,春花似錦、人聲如沸反璃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淮蜈。三九已至斋攀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間梧田,已是汗流浹背淳蔼。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留柿扣,地道東北人肖方。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像未状,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子析桥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

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