哈希表的初步認識

哈希表 - 幕布
哈希表
  • 誕生的前提
    • 在線性表、樹等數據結構中,記錄在結構中的相對位置是隨機的,和記錄的關鍵字之間不存在確定的關係,因此, 在結構中查找記錄時需要進行一系列和關鍵字的比較。此類的查找方法建立在"比較"的基礎上。
      • 在順序查找時,比較的結果爲等於 與 不等於兩種可能;
      • 在折半查找中、二叉排序樹查找和B-樹查找時,比較的結果爲小於、等於、和大於三種可能;
      • 查找的效率依賴於查找過程中所進行的比較次數。
  • 定義:
    • 理想的情況,希望不經過任何比較,一次存取便能得到所查記錄,那就必須在記錄的存儲位置和它的關鍵字之間建立一個確定的對應關係f, 使每個關鍵字和結構中一個唯一的存儲位置相對應。因而在查找時,只要根據這個對應關係f找到給定值K的像f(K)。若結構中存在關鍵字和K相等的記錄,則必定在f(K)的存儲位置上,由此,不需要進行比較便可直接取得所查記錄。這個對應關係f爲哈希函數,按這個思想建立的表爲哈希表。
  • 理解:
    • 1、哈希函數是一個映像,因此哈希函數的設定比較靈活,只要使的任何關鍵字由此所得的哈希函數值都落在表長允許範圍之內即可。
    • 2、對不同的關鍵字可能得到同一哈希地址,即key1不等於key2,但是f(key1)等於f(key2),這種現象稱爲衝突。
    • 3、具有相同函數值的關鍵字對該哈希函數來說稱做同義詞。
    • 在一般情況下,衝突只能儘可能地少,而不能完全避免。因爲,哈希函數是從關鍵字集合到地址集合的映像。通常,關鍵字集合比較大,它的元素包括所有可能的關鍵字,而地址集合的元素僅爲哈希表中的地址值。假設表長爲n,則地址爲0到n-1。
    • 在一般情況下,哈希函數是一個壓縮映像,這就不可避免產生衝突。(也就是說,關鍵字集合遠遠大於地址結合)
  • 總結:
    • 根據設定的哈希函數H(key)和處理衝突的方法將一組關鍵字映像到一個有限的連續的地址集(區間)上,並以關鍵字在地址集中的“像”作爲記錄在表中的存儲位置,這種表稱爲哈希表,這一映像的過程稱爲散列,所得存儲位置稱哈希地址或散列地址。
  • 構造哈希的方法:
    • 1、直接定址法
    • 2、數字分析法
    • 3、平方取中法
    • 4、摺疊法
    • 5、除留餘數法
    • 在實際工作中,選擇考慮的因素:
      • 1、 計算哈希函數所需時間(包括硬件指令的因素);
      • 2、關鍵字的長度;
      • 3、哈希表的大小;
      • 4、關鍵字的分佈情況;
      • 5、記錄的查找頻率。
  • 處理哈希衝突的方法
    • 1、開放定址法
    • 2、再哈希法
    • 3、鏈地址法
    • 4、建立一個公共溢出區
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章