資料結構學習之雜湊表篇(一)

2021-10-06 20:32:59 字數 2402 閱讀 7786

什麼是雜湊表?

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

雜湊表充分體現了演算法設計領域的經典思想:用空間換時間。

雜湊表是時間與空間之間的平衡。

雜湊函式的設計也是很重要的。

「鍵」通過雜湊函式得倒的「索引」分布越均勻越好。

我們關注的「鍵"的型別,在轉化為陣列的索引時一般雜湊函式的設計原則

整型

小範圍正整數直接使用

小範圍負整數進行偏移( -100~100—>0~200)

大整數的通常做法:取模,取模時要具體問題具體分析。乙個簡單的解決辦法就是模乙個素數(素數又稱質數。乙個大於1的自然數,除了1和它自身外,不能被其他自然數整除的數叫做質數;否則稱為合數)。乙個很小的例子來說明為什麼要模乙個素數,而不是合數:

取餘合數4:

10%4

220%4

030%4

240%4

050%4

2取餘素數7:

10%7

320%7

630%7

240%7

550%7

1取模素數時」索引「更連續,雜湊衝突更少。

浮點型

在計算機中,浮點型都是32位(float)或者64位(double)的二進位制表示,被計算機解析成了浮點數。所以浮點數可以轉成整型來處理。

字串

轉成整型處理

166 = 1 * 10 ^ 2 + 6 * 10 ^ 1 + 6 * 10 ^ 0

code = c * b ^ 3 + o * b ^ 2 + d * b ^ 1 + e * b ^ 0

hash(code) = (c * b ^ 3 + o * b ^ 2 + d * b ^ 1 + e * b ^ 0 ) % m

hash(code) = ((((c * b) + o) * b + d) * b + e ) % m

hash(code) = ((((c % m) * b + o) % m * b + d) % m * b + e ) % m

最後乙個式子轉換為**:

int hash =0;

for(

int i =

0; i < str.

length()

; i ++

)

復合型別

依然可以轉為整型型別。即像處理字串一樣把復合型別的每一部分分開來處理。

當然,轉成整型處理,並不是唯一的方法,只是一般的通用方法。

但不管怎樣,在設計雜湊函式時我們要遵循下面三個原則:

一致性:即a==b,則hash(a) == hash(b)

高效性:計算高效簡便

均勻性:雜湊值均勻分布

定義乙個student並重寫它的hashcode與equals方法:

/**

* @author ymn

* @version 1.0

* @date 2020\6\5 0005 16:00

*/public

class

student

@override

public

inthashcode()

@override

public

boolean

equals

(object obj)

//o是否為空

if(obj == null)

//是否是乙個類,避免出現傳進來的類是student子類的情況if(

getclass()

!= obj.

getclass()

) student another =

(student)obj;

return

this

.cls == another.cls &&

this

.grade == another.grade &&

this

.firstname.

tolowercase()

.equals

(another.firstname.

tolowercase()

)&&this

.lastname.

tolowercase()

.equals

(another.lastname.

tolowercase()

);}}

資料結構學習筆記 雜湊表

1.什麼是雜湊表 1 雜湊表是從乙個集合a到另乙個集合b的對映。2 集合a中的元素稱為鍵值,集合b中的元素稱為hash值。3 對映在數學上相當於乙個函式,集合a中的元素如何對映到集合b,hash函式決定。4 若兩個不同的鍵值對應同乙個hash值,這種情況為hash碰撞。2.雜湊與查詢 設集合a為查詢...

資料結構學習筆記 鍊錶篇

什麼是鍊錶 特點 資料元素的儲存對應的是不連續的儲存空間,每個儲存結點對應乙個需要儲存的資料元素。每個結點是由資料域和指標域組成。元素之間的邏輯關係通過儲存節點之間的鏈結關係反映出來。邏輯上相鄰的節點物理上不必相鄰。缺點 1 比順序儲存結構的儲存密度小 每個節點都由資料域和指標域組成,所以相同空間內...

資料結構之雜湊表(雜湊表)

今天學的是資料結構的雜湊查詢篇,其他的查詢可參見以前的傳送門 以前的查詢都是基於比較關鍵字的基礎上,所以查詢的效率依賴於查詢過程中所進行的比較次數。理想的情況是不經過任何比較,通過計算就能直接得到記錄所在的儲存位址,雜湊查詢 hashed search 是基於上述思想的一種查詢方式。雜湊法又稱為雜湊...