散列表

? ?散列表的英文叫 Hash Table嘀倒,我們平時(shí)也叫它 哈希表 或者 Hash 表剩檀。散列表用的是數(shù)組支持按照下標(biāo)隨機(jī)訪問數(shù)據(jù)的特性限佩,所以散列表其實(shí)就是數(shù)組的一種擴(kuò)展熊尉,由數(shù)組演化而來《凸罚可以說满力,如果沒有數(shù)組,就沒有散列表屋谭。

? 數(shù)組和鏈表都被直接映射到內(nèi)存脚囊,但散列表更復(fù)雜龟糕,它使用?散列函數(shù)?來確定元素的存儲位置桐磁。

??你可能根本不需要自己去實(shí)現(xiàn)散列表,任一優(yōu)秀的語言都提供了散列表實(shí)現(xiàn)讲岁。

? ??一個(gè)通俗的例子是我擂,為了查找電話簿中某人的號碼,可以創(chuàng)建一個(gè)按照人名首字母順序排列的表(即建立人名 X 到首字母F(x)的一個(gè) 函數(shù)關(guān)系)缓艳,在首字母為W的表中查找“王”姓的電話號碼校摩,顯然比直接查找就要快得多。這里使用人名作為關(guān)鍵字 key阶淘,取首字母是這個(gè)例子中散列函數(shù)的函數(shù)法則衙吩,存放首字母的表對應(yīng)散列表。關(guān)鍵字和函數(shù)法則理論上可以任意確定溪窒。

散列表

? ??散列表用的就是數(shù)組支持按照下標(biāo)隨機(jī)訪問的時(shí)候坤塞,時(shí)間復(fù)雜度是O(1)的特性冯勉。我們通過散列函數(shù)把元素的鍵值映射為下標(biāo),然后將數(shù)據(jù)存儲在數(shù)組中對應(yīng)下標(biāo)的位置摹芙。當(dāng)我們按照鍵值查詢元素時(shí)灼狰,我們用同樣的散列函數(shù),將鍵值轉(zhuǎn)化數(shù)組下標(biāo)浮禾,從對應(yīng)的數(shù)組下標(biāo)的位置取數(shù)據(jù)交胚。


散列函數(shù)

? ? ? ? 散列函數(shù)又稱 哈希函數(shù),是將關(guān)鍵字映射到存儲地址的函數(shù)(將輸入映射到數(shù)字)盈电,我們可以把它定義成 hash(key) = Addr蝴簇。其中key表示元素的鍵值,hash(key)的值表示經(jīng)過散列函數(shù)計(jì)算得到的散列值匆帚。

? ? ? ?散列函數(shù)必須滿足一些條件: 1 它必須是一致的军熏;2 它應(yīng)將不同的輸入映射到不同的數(shù)組。

? ? ? ? 設(shè)計(jì)散列函數(shù)必須遵守以下兩個(gè)原則:

? ? ? ? ? ? 1. 散列函數(shù)要盡可能簡單卷扮,能夠快速計(jì)算任意關(guān)鍵字的散列地址荡澎;

? ? ? ? ? ? 2. 散列函數(shù)映射的地址應(yīng)該均勻分布整個(gè)地址空間,避免聚集晤锹,以減少沖突摩幔。

? ? ? ? 簡單總結(jié)就是: 簡單、均勻鞭铆。


散列沖突

? ? 散列函數(shù)總是將不同 的鍵映射到數(shù)組的不同位置或衡。

? ?前面的散列函數(shù)將所有的鍵都映射到一個(gè)位 置,而?最理想的情況?是车遂,散列函數(shù)將鍵均勻地映射到散列表的不同位置封断,但是這個(gè)幾乎不可能,這就會造成 不同的 key 會產(chǎn)生相同的 散列值舶担,這就是 散列沖突坡疼。

? ? 那么如何解決 散列沖突呢,常用的有兩種:

? ? ? ? 1. 開放尋址法

? ? ? ? 2. 鏈表法

? ?2?如果散列表存儲的鏈表很長衣陶,散列表的速度將急劇下降柄瑰。然而,如 果使用的散列函數(shù)很好 剪况,這些鏈表就不會很長教沾!

散列表的應(yīng)用

? ? 散列表作為緩存

? ? ?緩存是一種常用的加速方式,所有大型網(wǎng)站都使用緩存译断,而緩存的數(shù)據(jù)則存儲在散列表中授翻。

散列表適用于:

? ? 仿真映射關(guān)系;防止重復(fù);緩存/記住數(shù)據(jù)堪唐,以免服務(wù)器在通過處理來生成它們隆箩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市羔杨,隨后出現(xiàn)的幾起案子捌臊,更是在濱河造成了極大的恐慌,老刑警劉巖兜材,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件理澎,死亡現(xiàn)場離奇詭異,居然都是意外死亡曙寡,警方通過查閱死者的電腦和手機(jī)糠爬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來举庶,“玉大人执隧,你說我怎么就攤上這事』Ы模” “怎么了镀琉?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蕊唐。 經(jīng)常有香客問我屋摔,道長,這世上最難降的妖魔是什么替梨? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任钓试,我火速辦了婚禮,結(jié)果婚禮上副瀑,老公的妹妹穿的比我還像新娘弓熏。我一直安慰自己,他們只是感情好糠睡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布挽鞠。 她就那樣靜靜地躺著,像睡著了一般铜幽。 火紅的嫁衣襯著肌膚如雪滞谢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天除抛,我揣著相機(jī)與錄音,去河邊找鬼母截。 笑死到忽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喘漏,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼护蝶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了翩迈?” 一聲冷哼從身側(cè)響起持灰,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎负饲,沒想到半個(gè)月后堤魁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡返十,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年妥泉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洞坑。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盲链,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出迟杂,到底是詐尸還是另有隱情刽沾,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布排拷,位于F島的核電站悠轩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏攻泼。R本人自食惡果不足惜火架,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望忙菠。 院中可真熱鬧何鸡,春花似錦、人聲如沸牛欢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽傍睹。三九已至隔盛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拾稳,已是汗流浹背吮炕。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留访得,地道東北人龙亲。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓陕凹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鳄炉。 傳聞我的和親對象是個(gè)殘疾皇子杜耙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

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

  • 在之前我們已經(jīng)學(xué)過了二分查找和簡單查找,我們知道二分查找的運(yùn)行時(shí)間為O(㏒ n)拂盯, 簡單查找的運(yùn)行時(shí)間為O(n)佑女。...
    愛吃西瓜的番茄醬閱讀 429評論 0 1
  • 散列表——最有用的基本數(shù)據(jù)結(jié)構(gòu)之一,用途廣泛谈竿。 散列表的內(nèi)部機(jī)制:實(shí)現(xiàn)团驱、沖突和散列函數(shù)。 假設(shè)你在一家雜貨店上班榕订。...
    非問閱讀 153評論 0 0
  • 歡迎訪問我的博客:http://wangnan.tech 第五章 散列表 散列函數(shù)“將輸入映射到數(shù)字” 散列函數(shù)總...
    GhostStories閱讀 397評論 0 2
  • 散列表 (Hash table店茶,也叫哈希表),是根據(jù)關(guān)鍵碼值(Key value)而直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu)劫恒。也就是...
    尼桑麻閱讀 711評論 0 0
  • 推薦指數(shù): 6.0 書籍主旨關(guān)鍵詞:特權(quán)贩幻、焦點(diǎn)、注意力两嘴、語言聯(lián)想丛楚、情景聯(lián)想 觀點(diǎn): 1.統(tǒng)計(jì)學(xué)現(xiàn)在叫數(shù)據(jù)分析,社會...
    Jenaral閱讀 5,721評論 0 5