資料結構 雜湊表 c

2022-05-05 10:00:10 字數 1556 閱讀 5749

理想的查詢是不經過任何的比較,一次訪問就能得到想要查詢的記錄;要達到這樣的目的就需要在記錄的儲存位置和它的關鍵字之間建立乙個確定的關係f , 讓每個關鍵字和結構中的乙個唯一的位址相對應。在查詢的時候,只需要對應關係f找到給定值k的像f(k),若結構中存在關鍵字和k相等,則必定在f(k)的儲存位置上,由此不需要任何比較就能得到查詢; 就好像陣列一樣,我們要找第乙個數,呼叫a[0]就能得到第乙個數, 當我們通過關鍵字來找的時候,通過一定的規則,把關鍵字和儲存位置建立乙個對映,就能通過陣列的方式來訪問關鍵字對應的記錄;我們把這個對應關係f稱為雜湊函式,按這個思想建立的表稱為雜湊表

雜湊函式是乙個映像,因而雜湊函式的設定很靈活,只要讓任何關鍵字由雜湊函式得到的雜湊數值都在表長的允許範圍內即可

如果乙個雜湊函式能把乙個關鍵字集合中的任意乙個關鍵字,經雜湊函式映像得到位址集合中的任何乙個位址的概率是相等的,則稱這個雜湊函式的均勻的,這樣的雜湊函式才是「好」的雜湊函式

1.直接定址法:取關鍵字或者關鍵字的某個線性函式值作為雜湊位址。即h(key) = a*key + b; 這種雜湊函式叫做自身函式。我操,為啥寢室突然出現小強?可怕。  這種方法得到的位址集合和關鍵字集合的大小相同,因此不會發生衝突,但實際中用的比較少

位移疊加:將分割後的每一部分的最低位對齊,然後相加,5864+4220+04=10088, 捨去最高位得到的雜湊函式值是0088; 

移位疊加:從一端向另一端沿分割界來回摺疊,然後對齊最低位相加,5864+0224+04=6092, 相當於把每一部分之字型相加;

4.除留餘數法:h(key) = key mod p;  p<=m, m是雜湊表表長;最常用的一種方法,用這種方法的時候,對除數p的選擇很重要,直接決定雜湊函式的好壞;若除數p有質數因子pf,則所有含有pf因子的關鍵字的雜湊位址均為pf的整數倍。 一般情況下選p為質數或不包含小於20的質因數的合數

衝突是指由關鍵字得到的雜湊位址為j的位置上已存在記錄,則處理衝突就是為該關鍵字的記錄找到另乙個「空」的雜湊位址。在處理雜湊衝突的時候,如果得到的另乙個雜湊位址任然衝突,則求下乙個雜湊位址,直到找到不發生衝突的雜湊位址

比如:取h(key) = key mod 11, 雜湊表已經如下01

2345

6789

1060

1729

現在求38的雜湊位址,會發現h(38) = 38 mod 11 = 6 ,這個位置上已經有17了,所以要找下乙個空的雜湊位址h = (6+1) mod 11 = 7, 依然被佔據, 繼續查詢h = (6+2) mod 11 = 8, 此時為空,則38的雜湊位址為8. 由此可見關鍵字的雜湊位址除了與關鍵字有關外,還與求雜湊位址的先後順序有關

2.再雜湊法:hi = rhi(key), rhi是不同的雜湊函式,即在同義詞產生位址衝突的時候,用另外乙個雜湊函式求雜湊位址,直到衝突不再發生,這種方法不容易出產生聚集現象,但是會增加計算時間

用該方法對{19,14,23,01,68,20,84,27,55,11,10,79}求雜湊位址,取雜湊函式為h(key) = key mod 1301

114277923

556845

619847

208910

1023

1111

12

c 資料結構 雜湊表

雜湊表 雜湊表 hashtable 又叫雜湊表,是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。雜湊表的做法其實很簡單,就是把key通過乙個固定的演算法函式既所...

《C 實現資料結構》 雜湊表

雜湊表通過將關鍵字值對映到表中某個位置上來儲存元素。由給定的關鍵字值,根據對映,計算得到元素的儲存位置來訪問元素。在雜湊技術中,衝突是指對於關鍵字集合中的兩個關鍵字值ki和kj,當ki kj時,有h ki h kj h是雜湊函式。目前比較常用的雜湊函式有 除留餘數法 平方取中法 摺疊法 數字分析法。...

資料結構 雜湊表

1.雜湊表的定義 元素的儲存位置和它的關鍵碼之間建立乙個確定的對應關係h,使得每個關鍵碼key和唯一的儲存位置h key 相對應。在查詢時,根據這個確定的對應關係找到給定值k的對映h k 若查詢集合中存在這個記錄,則必定在h k 的位置上,這種查詢技術稱為雜湊技術。採用雜湊技術將記錄儲存在一塊連續的...