數據結構Java10【哈希表概述、散列函數的設計、散列衝突解決方案】

學習地址:https://www.bilibili.com/video/BV1Zt411o7Rn【數據結構與算法基礎-java版】

🚀數據結構--Java專欄:https://blog.csdn.net/weixin_44949135/category_10103369.html🚀
筆記01【01-09https://blog.csdn.net/weixin_44949135/article/details/106742935【概述、數組基本使用】【源碼、課件】
筆記02【10-18https://blog.csdn.net/weixin_44949135/article/details/106746038【棧、隊列、單鏈表、鏈表、遞歸】
筆記03【19-27https://blog.csdn.net/weixin_44949135/article/details/106784224【八大排序算法】
筆記04【28-33https://blog.csdn.net/weixin_44949135/article/details/106823785【樹結構概述、二叉樹】
筆記05【34-39https://blog.csdn.net/weixin_44949135/article/details/106832176【順序存儲二叉樹、堆排、線索二叉樹】
筆記06【40-48https://blog.csdn.net/weixin_44949135/article/details/106843814【赫夫曼樹、解碼、壓縮&解壓文件】
筆記07【49-54https://blog.csdn.net/weixin_44949135/article/details/106886659【二叉排序樹】
筆記08【55-57https://blog.csdn.net/weixin_44949135/article/details/106896570【平衡二叉樹(AVL)】
筆記09【58-60https://blog.csdn.net/weixin_44949135/article/details/106852286【計算機數據存儲原理、2-3樹、B樹】
筆記10【61-63https://blog.csdn.net/weixin_44949135/article/details/106936504【哈希表、散列函數設計、解決衝突】
筆記11【64-67https://blog.csdn.net/weixin_44949135/article/details/106939350【圖概述、圖遍歷(DFS、BFS)】

目   錄

P61 5.1 哈希表概述

1、哈希表概念

P62 5.2 散列函數的設計

P63 5.3 散列衝突的解決方案

1、開放地址法

1.1、線性探測法

1.2、二次探測法

1.3、再哈希法

2、鏈地址法


P61 5.1 哈希表概述

1、哈希表概念

百度百科:https://baike.baidu.com/item/%E5%93%88%E5%B8%8C%E8%A1%A8/5981869?fr=aladdin

散列表(Hash table,也叫哈希表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這個映射函數叫做散列函數,存放記錄的數組叫做散列表

給定表M,存在函數f(key),對任意給定的關鍵字值key,代入函數後,若能得到包含該關鍵字的記錄在表中的地址,則稱表M爲哈希(Hash)表,函數f(key)爲哈希(Hash)函數。

  • 若關鍵字爲k,則其值存放在f(k)的存儲位置上。由此,不需比較便可直接取得所查記錄。稱這個對應關係f爲散列函數,按這個思想建立的表爲散列表。

  • 對不同的關鍵字可能得到同一散列地址,即k1≠k2,而f(k1)=f(k2),這種現象稱爲衝突(英語:Collision)。具有相同函數值的關鍵字對該散列函數來說稱做同義詞。綜上所述,根據散列函數f(k)和處理衝突的方法將一組關鍵字映射到一個有限的連續的地址集(區間)上,並以關鍵字在地址集中的“像”作爲記錄在表中的存儲位置,這種表便稱爲散列表,這一映射過程稱爲散列造表散列,所得的存儲位置稱散列地址

  • 若對於關鍵字集合中的任一個關鍵字,經散列函數映象到地址集合中任何一個地址的概率是相等的,則稱此類散列函數爲均勻散列函數(Uniform Hash function),這就是使關鍵字經過散列函數得到一個“隨機的地址”,從而減少衝突。

哈希表(散列表):關鍵字年齡,通過存儲位置(取餘/減去固定值),返回相應的數據。

P62 5.2 散列函數的設計

散列函數的設計:計算簡單、分佈均勻。 

直接定址法(直接、計算簡單、不好用、分佈不均勻):將關鍵字作爲 下標(存儲地址)。【電話號碼,不適合!】

數字分析法:需要提前知道關鍵字。

平方取中法:數字進行平方運算,取中間1、2、3個數字。

隨機數法:存儲地址=random();

哈希表底層,使用數組。

P63 5.3 散列衝突的解決方案

散列函數:解決地址衝突問題。【數據:11、12、22、21、23】【取餘法(%10)】

1、開放地址法

1.1、線性探測法

線性探測法:數據衝突,緊跟着數據 進行存儲。問題:數據聚集。

1.2、二次探測法

二次探測法:解決數據聚集問題。數據所在的位置,已有數據,根據 1^2、2^2、3^2……往後放。

1.3、再哈希法

散列函數

2、鏈地址法

鏈表:無限延伸。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章