1031 雜湊表(上)

2021-08-31 11:35:01 字數 1261 閱讀 4416

目錄

一、雜湊表的由來?

二、如何設計雜湊函式?

三、雜湊衝突的解決方法?

四、思考

1.雜湊表**於陣列,它借助雜湊函式對陣列這種資料結構進行擴充套件,利用的是陣列支援按照下標隨機訪問元素的特性。

2.需要儲存在雜湊表中的資料我們稱為鍵,將鍵轉化為陣列下標的方法稱為雜湊函式,雜湊函式的計算結果稱為雜湊值。

3.將資料儲存在雜湊值對應的陣列下標位置。

總結3點設計雜湊函式的基本要求:

1.雜湊函式計算得到的雜湊值是乙個非負整數。

2.若key1=key2,則hash(key1)=hash(key2)

3.若key≠key2,則hash(key1)≠hash(key2)

正是由於第3點要求,所以產生了幾乎無法避免的雜湊衝突問題。

1.常用的雜湊衝突解決方法有2類:開放定址法(open addressing)和鍊錶法(chaining)

2.開放定址法

①核心思想:如果出現雜湊衝突,就重新探測乙個空閒位置,將其插入。

②線性探測法(linear probing):

③二次探測(quadratic probing):線性探測每次探測的步長為1,即在陣列中乙個乙個探測,而二次探測的步長變為原來的平方。

④雙重雜湊(double hashing):使用一組雜湊函式,直到找到空閒位置為止。

⑤線性探測法的效能描述:

3.鍊錶法(更常用)

1.word文件中單詞拼寫檢查功能是如何實現的?

字串占用記憶體大小為8位元組,20萬單詞占用記憶體大小不超過20mb,所以用雜湊表儲存20萬英文詞典單詞,然後對每個編輯進文件的單詞進行查詢,若未找到,則提示拼寫錯誤。

2.假設我們有10萬條url訪問日誌,如何按照訪問次數給url排序?

字串占用記憶體大小為8位元組,10萬條url訪問日誌占用記憶體不超過10mb,通過雜湊表統計url訪問次數,然後用treemap儲存雜湊表的元素值(作為key)和陣列下標值(作為value)

3.有兩個字串陣列,每個陣列大約有10萬條字串,如何快速找出兩個陣列中相同的字串?

分別將2個陣列的字串通過雜湊函式對映到雜湊表,雜湊表中的元素值為次數。注意,先儲存的陣列中的相同元素值不進行次數累加。最後,統計雜湊表中元素值大於等於2的雜湊值對應的字串就是兩個陣列中相同的字串。

雜湊表(雜湊表) 四 雜湊表上的運算

雜湊表上的運算 雜湊表上的運算有查詢 插入和刪除。其中主要是查詢,這是因為雜湊表的目的主要是用於快速查詢,且插入和刪除均要用到查詢操作。1 雜湊表型別說明 define nil 1 空結點標記依賴於關鍵字型別,本節假定關鍵字均為非負整數 define m 997 表長度依賴於應用,但一般應根據。確定...

雜湊表(上) 開放定址法

概述 雜湊表,又稱雜湊表,hash表。雜湊表是一種特殊的資料結構,它同陣列 鍊錶以及二叉排序樹等相比較有很明顯的區別,它能夠快速定位到想要查詢的記錄,而不是與表中存在的記錄的關鍵字進行比較來進行查詢。這個源於雜湊表設計的特殊性,它採用了函式對映的思想將記錄的儲存位置與記錄的關鍵字關聯起來,從而能夠很...

雜湊表 雜湊表

一 定義 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。雜湊表的做法其實很簡單,就是把key通過乙個固定的演算法函式...