1. 程式人生 > >C++數據結構之哈希表

C++數據結構之哈希表

pan 哈希 tps 映射 哈希表 span 公式 構造 inf

哈希表的定義:哈希表是一種根據關鍵碼去尋找值的數據映射結構,該結構通過把關鍵碼映射的位置去尋找存放值的地方。鍵可以對應多個值(即哈希沖突),值根據相應的hash公式存入對應的鍵中。

哈希函數的構造要求:

  1. 運算過程要盡量簡單高效,以提高哈希表的插入和檢索效率;
  2. 哈希函數應該具有較好的散列型,以降低哈希沖突的概率,即盡量使關鍵字對應的記錄均勻分配在哈希表裏面
  3. 哈希函數應具有較大的壓縮性,以節省內存
  4. 關鍵字極小的變化可以引起哈希值極大的變化。

哈希沖突解決方法:1.鏈地址法

鏈地址法的原理時如果遇到沖突,他就會在原地址新建一個空間,然後以鏈表結點的形式插入到該空間。

下面從百度上截取來一張圖片,可以很清晰明了反應下面的結構。比如說我有一堆數據{1,12,26,337,353...},而我的哈希算法是H(key)=key mod 16,第一個數據1的哈希值f(1)=1,插入到1結點的後面,第二個數據12的哈希值f(12)=12,插入到12結點,第三個數據26的哈希值f(26)=10,插入到10結點後面,第4個數據337,計算得到哈希值是1,遇到沖突,但是依然只需要找到該1結點的最後鏈結點插入即可,同理353。

技術分享圖片

2. 開放地址法

參考文章:

https://www.cnblogs.com/s-b-b/p/6208565.html

https://www.cnblogs.com/jijiji/p/4856805.html

C++數據結構之哈希表