關於雜湊表的總結

來源:互聯網
上載者:User

以下是我對雜湊表的總結,其中大部分概念性的東西來自嚴蔚敏的資料結構書上的,加了一些我個人的經驗總結,這篇的主要目的

是方便我以後自己看,所以有點類似於提綱性的東西。

1.定義:根據設定的雜湊函數H(key)和處理衝突的方法將一組關鍵字映像到一個有限的連續的地址集(區間)上,並以關鍵
            字在地址集中的“像”作為記錄在表中的儲存位置,這種表便稱為雜湊表,這一映像過程稱為雜湊造表或者散列
            所得儲存位置稱雜湊地址或散列地址
    目的:在記錄位置和關鍵字之間建立一個確定的對應關係,提高尋找的速度
    案例:編譯原理當中的符號表,狀態機器當中的狀態尋找等
    實現:可以有多種,根據實際情況而定,可以將儲存和尋找分開,一般情況下資料結構要麼是插入快尋找慢或者插入慢尋找快,與其他
                資料結構配合可以實現插入和尋找速度都達到滿意的效果,但是一般需要佔用記憶體。另外雜湊表的尋找速度並不是絕對的
                還和雜湊函數的構造方法有關,同時也與衝突處理方法有關
2.雜湊函數的構造方法:
(1)直接定址法
(2)數字分析法
(3)平方取中法
(4)摺疊法
(5)除餘留數法(最常用)
(6)隨機數法
    以上這些方法可以組合著用,請注意有些雜湊表也可以不是由程式動態產生的,也可以是手動產生的,多見於資料固定的應用當中
    ,手動產生的雜湊表以直接定址法構造的居多,比如CINT指令碼引擎的擴充函數查詢採用的就是這種方法。
3.雜湊函數考慮的因素有:
(1)計算雜湊函數所需的時間
(2)關鍵字的長度
(3)雜湊表的大小
(4)關鍵字的分布情況
(5)記錄的尋找頻率
4.衝突處理方法
一般情況下,只能減少衝突,很難避免,因此衝突的處理是必要的,方法一般有如下幾種
(1)開放定址法
(2)再雜湊法
(3)鏈地址法
(4)建立一個公用溢出區
    一般情況下衝突的機率和裝填因子有關,其中(3)和(4)經過一次處理就可以解決衝突問題,而(1)和(2)有可能需要多次,
    (1)的方法有些像試探法,衝突較多時(1)和(2)效率較低,    (4)這個方法比較消極,適合於衝突較少的情況,如果衝突較多,(4)的尋找效率
    會明顯降低。總之一切都要根據實際應用來進行選取。
5.幾個概念
(1)均勻雜湊函數:若對於關鍵字集合中的任一關鍵字,經雜湊函數映像到地址的集合中的任何一個地址的機率是相等的,則稱此類函數
         為均勻的雜湊函數
(2)裝填因子a=(表中填入的記錄數)/(雜湊表的長度),對裝填因子的控制可以減少衝突
(3)衝突:k1!=k2,f(k1)=f(k2)

 

 

有空再補例子吧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.