一般的線性表、樹中,記錄在結(jié)構(gòu)中的相對(duì)位置是隨機(jī)的即和記錄的關(guān)鍵字之間不存在確定的關(guān)系,在結(jié)構(gòu)中查找記錄時(shí)需進(jìn)行一系列和關(guān)鍵字的比較。這一類查找方法建立在“比較”的基礎(chǔ)上,查找的效率與比較次數(shù)密切相關(guān)。理想的情況是能直接找到需要的記錄,因此必須在記錄的存儲(chǔ)位置和它的關(guān)鍵字之間建立一確定的對(duì)應(yīng)關(guān)系f,使每個(gè)關(guān)鍵字和結(jié)構(gòu)中一個(gè)唯一的存儲(chǔ)位置相對(duì)應(yīng)。因而查找時(shí),只需根據(jù)這個(gè)對(duì)應(yīng)關(guān)系f找到給定值K的像f(K)。若結(jié)構(gòu)中存在關(guān)鍵字和K相等的記錄,則必定在f(K)的存儲(chǔ)位置上,由此不需要進(jìn)行比較便可直接取得所查記錄。在此,稱這個(gè)對(duì)應(yīng)關(guān)系f為哈希函數(shù),按這個(gè)思想建立的表為哈希表(又稱為雜湊法或散列表)。 哈希表不可避免沖突(collision)現(xiàn)象:對(duì)不同的關(guān)鍵字可能得到同一哈希地址 即key1≠key2,而f(key1)=f(key2)。具有相同函數(shù)值的關(guān)鍵字對(duì)該哈希函數(shù)來說稱為同義詞(synonym)。 因此,在建造哈希表時(shí)不僅要設(shè)定一個(gè)好的哈希函數(shù),而且要設(shè)定一種處理沖突的方法??扇缦旅枋龉1恚焊鶕?jù)設(shè)定的哈希函數(shù)H(key)和所選中的處理沖突的方法,將一組關(guān)鍵字映象到一個(gè)有限的、地址連續(xù)的地址集(區(qū)間)上并以關(guān)鍵字在地址集中的“象”作為相應(yīng)記錄在表中的存儲(chǔ)位置,這種表被稱為哈希表。 |
|