1. 程式人生 > >其他符號表

其他符號表

散列表

如果鍵都是小整數,用一個數組實現無序的符號表,將鍵直接作為陣列索引。這樣我們就可以快速訪問任意鍵的值。基於這種思想設計的資料結構就是散列表。

查詢演算法

1.使用雜湊函式將鍵轉化為索引

優秀的雜湊函式滿足:

  • 一致性:等價的鍵必然產生相等的雜湊值
  • 高效性:計算簡便
  • 均勻性:均勻地雜湊所有的鍵

2.處理碰撞衝突

處理碰撞衝突的兩種方法:拉鍊法和線性探測法。
散列表是演算法在時間和空間上作出權衡的經典例子。
拉鍊法:
這裡寫圖片描述
線性探測法:陣列的長度>鍵值對數
當碰撞發生時,我們直接檢查散列表中的下一個位置,可能產生三種結果:

  • 1.命中,該位置的鍵和被查詢的鍵相同
  • 2.未命中,鍵為空
  • 3.繼續查詢,該位置的鍵和被查詢的鍵不同。

調整陣列大小

在插入資料時動態調整陣列的大小,儘量縮小記憶體的使用。

各種符號表效能總結

這裡寫圖片描述
Java中的實現
TreeMap:紅黑樹
HashMap:拉鍊法

索引

一個鍵和多個值相關聯的符號表

反向索引

用值來查詢鍵

稀疏向量

這裡寫圖片描述