雜湊表概述

2021-10-25 07:16:27 字數 1984 閱讀 5800

本文對雜湊表進行大體上的概述和分析,如果你之前沒有學過相關知識,可以參考雜湊表以及雜湊表這兩篇文章,有詳細的例子介紹,本文只提供快速回憶和瀏覽。

一、什麼是雜湊表?

雜湊表本質就是支援隨機查詢的陣列,即可以根據關鍵字快速查詢值的一種陣列,也就是雜湊表。雜湊表實現的關鍵就是雜湊函式,所謂的雜湊函式是一種建立查詢表的方法,它將key值對映為一種索引號的方法。

二、為什麼要使用雜湊表?

我們可以利用key關鍵字,就可以快速的找到我們想要的value值,而不需要迴圈遍歷比較整個陣列。例如假如你有一組資料(學號,姓名,**號),如果將這組資料存在乙個陣列中,這時假如你想要查詢學號為 001

00100

1 的學生姓名和**,你就不得不依次比較陣列匹配你的學號然後取出你想要的資料,但是如果我們將學號對映為乙個雜湊索引,理論上就可以一次取出想要的資料。

三、如何構造雜湊表?

直接定址法:取關鍵字或關鍵的某乙個線性函式值為雜湊位址。即:hash(key)=key或者hash(key)=a*key+b。這種構造方法下由於位址集合和關鍵字集合大小一樣,所以並不會有衝突的發生,但是這種方法並不常用。

除留餘數法:取關鍵字被某乙個不大於雜湊表長 m

mm 的數 p

pp 除后所餘得的數為雜湊位址。即hash(key)=key mod p,p<=m(m為雜湊表長)。這種方法比較簡單也很常用。

平方取中法:取關鍵字平方後的中間若干位組成雜湊位址。相比於數字分析法優點在於乙個數平方之後的中間的幾位數和原來的數都有關,因此雜湊位址是隨機的。

四、如何解決雜湊衝突?

解決衝突的方法:

(1)開放位址法:h

ih_i

hi​ = (ha

sh(k

ey)+

di

(hash(key)+d_i

(hash(

key)

+di​

) mod mmm

其中:hash(key)為雜湊函式,di為增量序列,m為雜湊表長:

di=1,2,3,4,5…,m-1時稱線性探測再雜湊;

di=12,

−12,

22,−

22..

....

....

,+k2

,−k2

(k

<=m

/2

)1^2 ,-1^2 ,2^2,-2^2..........,+k^2,-k^2 (k<=m/2)

12,−12

,22,

−22.

....

....

.,+k

2,−k

2(k<=m

/2)稱之為二次探測再雜湊(平方探測在雜湊),其中正負號表示向右或者向左查詢;

d

id_i

di​ 偽隨機數序列,稱之為隨機探測在雜湊。

(2)再雜湊法:準備若干個hash函式,如果使用第乙個hash函式發生了衝突,就使用第二個hash函式,第二個也衝突,使用第三個……;

(4)公共溢位區法:建立乙個特殊儲存空間,專門存放衝突的資料。此種方法適用於資料和衝突較少的情況。

五、雜湊表如何查詢?

理想情況下我們根據關鍵字key,通過造表時候的雜湊函式求得雜湊位址,該錶此位置上的記錄的關鍵字與我們給定的關鍵字key相等,則查詢成功。

但是如果有衝突,即該表此位置上的記錄不是我們要查詢的記錄,則根據造表時候設定的衝突處理方法尋找「下乙個位址」,一直到雜湊表的某乙個位置為「空」或者表中記錄的關鍵字為我們給定的關鍵字key。

雜湊表概述

基本概念 通過記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f以及處理衝突的方法,使得每個關鍵字和結構中乙個唯一的位置相對應。這樣對於關鍵字k根據對應關係f,就可以得到儲存位置f k 稱這種對應關係f為雜湊函式。與二叉樹不同,雜湊表中儲存的資料是無序的,對於查詢任意資料高效,二叉樹查詢某一範圍...

雜湊表概述

雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表或雜湊表。具體表現為 儲存位置 f key 1.在儲存時,通過雜湊函式計...

雜湊表查詢(雜湊表)概述

即通過某個函式 f 使得 儲存位置 f 關鍵字 這樣我們可以通過查詢關鍵字不需要比較就可獲得需要的記錄的儲存位置。這就是新的儲存技術 雜湊技術 雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係 f,使得每個關鍵字 key 對應乙個儲存位置 f key 查詢時,根據這個確定的對應關係找...