一、hash表的基本概念和優缺點比較
hash表又稱雜湊表 ,是一種資料結構,與鍊錶、二叉樹有很大區別。
1、hash表優缺點
優點:能夠在常數級的時間複雜度上進行查詢,並且插入資料和刪除資料簡單。(hash未滿的時候速度很快)
2、與鍊錶比較
鍊錶:查詢上表中的資料從頭開始遍歷,直到查到或者查詢失敗。
hash:根據儲存資料特定關鍵字,然後根據關鍵字直接查詢想要得到資料。
hash儲存位置通常稱作hash位址。
hash位址是由關鍵字經過特定的 hash函式運算得到。
3、當關鍵字重複就會產生資料衝突。
二、hash表的構造方法
1、直接定址法
例如:有乙個從1到100歲的人口數字統計表,其中,年齡作為關鍵字,雜湊函式取關鍵字自身。
但這種方法效率不高,時間複雜度是o(1),空間複雜度是o(n),n是關鍵字的個數
eg:f(x) = 5x+10
x代表的就是年齡,而f(x)獲取到的就是對應位址,是取hash位址與關鍵字構成的線性函式。
2、平方取中法
適用關鍵字是數字的情況,將關鍵字平方然後取其中間的幾位作為hash位址。
3、數字分析法
比如同齡人的出生年月,由於前幾位數字的重複機率較大,所以造成衝突的機率較高,所以盡量不取前幾位。
4、摺疊法
將關鍵字分割成相同的幾段數字(最後一部分可以不同),然後將得到的幾段數字疊加(進製捨去)作為hash位址,摺疊法
eg:每一種西文圖書都有乙個國際標準圖書編號,它是乙個10位的十進位制數字,若要以它作關鍵字建立乙個雜湊表,
如果一本書的編號為1234-5678-321,可以將其分為。而hash位址則是這幾個數之和。
5、除留取餘法
如果知道hash表的最大長度為m,可以取不大於m的最大質數p,
然後對關鍵字進行取餘運算,f(x) = x%p。
在這裡p的選取非常關鍵,p選擇的好的話,能夠最大程度地減少衝突,
p一般取不大於m的最大質數。
6、隨機數法
選擇乙個隨機函式,取關鍵字的隨機函式值為它的雜湊位址,即
f(x)=random(x) ,其中random為隨機函式。通常用於關鍵字長度不等時採用此法。
三、衝突處理
1、開放定址法
關鍵字衝突時,使用某種探測技術在hash表中形成乙個探測序列,然後沿著這個探測序列依次查詢下去,
當碰到乙個空的單元時,則插入其中。
eg:一組關鍵字,
hash表長為14,hash函式為f(x)=x%11,當插入13,25時可以直接插入,而當插入23時,位址1被占用了,
因此沿著位址1依次往下探測(探測步長可以根據情況而定),直到探測到位址3,發現為空,則將23插入其中。
2、再雜湊法
3、鏈位址法
採用陣列和鍊錶結合的方式,hashmap中就是採用這種方式儲存hash位址,原理是將hash位址(經過關鍵字計算的值)相同的記錄存在同乙個鍊錶中,
而每張表的表頭序號就是新的hash位址。
4、建立乙個公共溢位區
假設雜湊函式的值域為[0,m-1],則設向量hashtable[0..m-1]為基本表,另外設立儲存空間向量overtable[0..v]用以儲存發生衝突的記錄。
參考博文:
hash學習筆記
學長來講了hash,感覺好香 而我們常將雜湊的思想用在字串中 用於o 1 判斷給出的兩個字串是否相等 預處理完的情況下 這裡結合例題理解一下 給出兩個字串a與b 每次詢問給出l,r,s,t 判斷a l.r 與 b s.t 是否相等 如果我們用裸的暴力的話 顯然對於每次詢問我們都要用o n 的效率 所...
hash表學習資料
資料結構 資料間關係 資料儲存方式。常見的資料結構有鍊錶,堆,棧,佇列,表,樹,圖等。選擇何種資料結構,取決於需要解決什麼樣的問題。雜湊表 hash table 即雜湊表,是根據關鍵碼值 key value 而直接進行訪問的資料結構。其核心思想是選擇乙個雜湊函式或者隨機函式,用乙個和記錄相關的值作為...
hash表 hash演算法
概念 雜湊表 hash table。也叫雜湊表 是依據關鍵碼值 key value 而直接進行訪問的 資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。給定表m,存在函式f key 對隨意給定的keyword值ke...