雜湊表的意義
直接定址表需要申請全域u大小的空間來儲存資料,其中全域u中的有效資料集合為k,那麼其儲存情況如下圖
而如果利用雜湊函式h,將全域u的值對映到h(u)->,則可以縮小儲存空間,如下圖
衝突
如上圖,k2和k5發生了衝突,解決衝突的方法有如下幾種
1.鏈結法,如下圖
2.開放定址法(一下內容抄自百科)
①線性探查法(linear probing)完全雜湊如果一種雜湊技術在進行查詢時,其最壞情況記憶體訪問次數為o(1),則稱其為完全雜湊,下圖是完全雜湊的實現方式該方法的基本思想是:將雜湊表t[0..m-1]看成是乙個迴圈向量,若初始探查的位址為d(即h(key)=d),則最長的探查序列為:d,d+l,d+2,…,m-1,0,1,…,d-1 .即:探查時從位址d開始,首先探查t[d],然後依次探查t[d+1],…,直到t[m-1],此後又迴圈到t[0],t[1],…,直到探查到t[d-1]為止。探查過程終止於三種情況:
(1)若當前探查的單元為空,則表示查詢失敗(若是插入則將key寫入其中);
(2)若當前探查的單元中含有key,則查詢成功,但對於插入意味著失敗;
(3)若探查到t[d-1]時仍未發現空單元也未找到key,則無論是查詢還是插入均意味著失敗(此時表滿)。
h i =(h(key)+i)%m 0≤i≤m-1 //即d i =i
hi=(h(key)+di) mod m i=1,2,...,k(k<=m-1)
其中m為表長,di為增量序列
如果di值可能為1,2,3,...m-1,稱線性探測再雜湊。
如果di取值可能為1,-1,2,-2,4,-4,9,-9,16,-16,...k*k,-k*k(k<=m/2)
稱二次探測再雜湊。
如果di取值可能為偽隨機數列。稱偽隨機探測再雜湊。開放位址法堆裝填因子的要求
開放定址法要求雜湊表的裝填因子α≤l,實用中取α為0.5到0.9之間的某個值為宜。
②二次探查法(quadratic probing)
二次探查法的探查序列是:
hi=(h(key)+i*i)%m 0≤i≤m-1 //即di=i2
即探查序列為d=h(key),d+12,d+22,…,等。
該方法的缺陷是不易探查到整個雜湊空間。
③雙重雜湊法(double hashing)
該方法是開放定址法中最好的方法之一,它的探查序列是:
hi=(h(key)+i*h1(key))%m 0≤i≤m-1 //即di=i*h1(key)
即探查序列為:
d=h(key),(d+h1(key))%m,(d+2h1(key))%m,…,等。
該方法使用了兩個雜湊函式h(key)和h1(key),故也稱為雙雜湊函式探查法。
集合B 雜湊表模板題
題目 給定兩個集合 a b,集合內的任一元素 x 滿足 1 x 109,並且每個集合的元素個數不大於107。我們希望求出 a b 之間的關係,只需確定在 b 中但是不在 a 中的元素的個數即可。輸入 輸入檔案有兩行,分別表示兩個集合,每行的第乙個整數為這個集合的元素個數 至少乙個 然後緊跟著這個集合...
c 雜湊表 A表到B表,其實還是表。
經常性的有小同學問跨表引用問題,啥叫跨表引用?通俗的講就是從a表挪資料到b表,比如資料來源 從上圖資料來源引用資料到下圖,常見的函式組合有 種 01 號 號,等於號是最簡單最快捷的辦法,缺點 是資料來源的行列不能隨便變動 是不夠靈活,倆個表的行列次序不一致或者調整的時候,需要重新做公式 c3輸入 表...
雜湊表 雜湊表
一 定義 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。雜湊表的做法其實很簡單,就是把key通過乙個固定的演算法函式...