哈希表(hash)

C++ hash

STL c++ hash_table 分析

簡介

  • 由索引到值的數據結構(data structure that maps keys to values)
  • 直接映射,需要很大的空間。空間的利用率不高,爲了將某一元素映射到一個“大小可以接受之索引”,這樣的函數爲hash function(散列函數或者哈希函數)。通常的哈希函數爲取模。

哈希函數(hash function)

h(key) => hash table index

好的哈希函數特點

  • 易於計算
  • 分佈均勻(Reduce chance of collision)
    • different keys should ideally map to different indices
    • distribute keys uniformly over table

複雜度(complexity)

  • 最好情況O(1)查找
  • 最壞情況O(N)發生了衝突(collisions)

對於string類型哈希函數的設計

  • 簡單的ASCII碼值相加,隱患很大
  • 使用前三個字符,以27爲基,計算key值
  • 使用所有字符,以比字符個數大的質數爲基。26個字母,則選擇,29,31,37

解決衝突的辦法

  • 分離鏈路(Chaining):在哈希表索引同樣的地方,以鏈表的形式存儲value
  • 開放地址(Open addressing):
  • 二次哈希(double hash)

Reference

hash代碼實現

usc課件

cis課件

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