什麼是雜湊表?
雜湊表(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 是基於上述思想的一種查詢方式。雜湊法又稱為雜湊...