1. 程式人生 > >資料結構:雜湊表(Hash Table)

資料結構:雜湊表(Hash Table)

雜湊表定義

雜湊表是一種根據關鍵碼去尋找值的資料對映結構,該結構通過把關鍵碼對映的位置去尋找存放值的地方。

本質是一個數組,陣列中每一個元素稱為一個箱子(bin),箱子中存放的是鍵值對。

雜湊表的儲存過程如下:

  1. 根據 key 計算出它的雜湊值 h。
  2. 假設箱子的個數為 n,那麼這個鍵值對應該放在第 f (n) 個箱子中。( f(X) )即為雜湊函式。
  3. 如果該箱子中已經有了鍵值對,就使用開放定址法或者拉鍊法解決衝突。

雜湊表還有一個重要的屬性: 負載因子(load factor),它用來衡量雜湊表的 空/滿 程度,一定程度上也可以體現查詢的效率,計算公式為:

負載因子 = 總鍵值對數 / 箱子個數

負載因子越大,意味著雜湊表越滿,越容易導致衝突,效能也就越低。因此,一般來說,當負載因子大於某個常數(可能是 1,或者 0.75 等)時,雜湊表將自動擴容。

雜湊表在自動擴容時,一般會建立兩倍於原來個數的箱子,因此即使 key 的雜湊值不變,對箱子個數取餘的結果也會發生改變,因此所有鍵值對的存放位置都有可能發生改變,這個過程也稱為重雜湊(rehash)。