Hash

Hash:

    hash算法解決衝突的方法常用的有開放定址法、再哈希法、鏈地址法、 建立公共溢出區。

哈希表:

    哈希表(Hash table,也叫散列表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這個映射函數叫做散列函數,存放記錄的數組叫做散列表。

1.開放定址法

    開放定址法就是一旦發生了衝突,就去尋找下一個空的散列地址,只要散列表足夠大,空的散列地址總能找到,並將記錄存入。

公式:Hi = (H(key) + di) MOD m (i=1,2,…,k(k<=m-1))

m爲哈希表的長度,di是產生衝突時候的增量序列。

  1. 線性探測再散列:di 的取值爲1,2,3……m-1;
  2. 二次探測再散列:1,-1,2,-2,4,-4,9,-9,16,-16,…k*k,-k*k(k <= m/2);
  3. 僞隨機探測再散列:di 是一組爲隨機數;

2. 再哈希法

    再哈希法又叫雙哈希法,有多個不同的Hash函數,當發生衝突時,使用第二個,第三個,….,等哈希函數計算地址,直到無衝突。雖然不易發生聚集,但是增加了計算時間。

3. 鏈地址法(拉鍊法)

    基本思想:每個哈希表節點都有一個next指針,多個哈希表節點可以用next指針構成一個單向鏈表,被分配到同一個索引上的多個節點可以用這個單向鏈表連接起來,如下圖所示:

                                       

4.  建立公共溢出區

    將哈希表分爲基本表和溢出表兩部分,凡是和基本表發生衝突的元素,一律填入溢出表。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章