《JavaScript數據結構與算法》筆記——第7章 字典和散列表

  • 在字典中,存儲的是[鍵,值],集合能夠看做[值,值]的形式存儲元素,字典也稱爲映射
方法 描述 備註
set(key, value) 向字典中添加新元素
delete(key) 經過某個鍵值從字典中移除對應的數據值
has(key) 判斷某個鍵值是存在於這個字典中
get(key) 經過鍵值獲取對應的數據值
size() 返回字典全部元素的數量
clear() 刪除字典中全部元素
keys() 將字典包含的全部鍵名以數組形式返回
values() 將字典包含的全部數值以數組形式返回
  • 散列表(hashtable)

散列算法的做用是儘量快的在數據結構中找到一個值
散列函數的做用是給定一個鍵值,返回該值在表中的位置算法

  • 最多見的散列函數「lose lose」

將每一個鍵值中的每一個字母的ascii值相加,而後將結果做爲值在hashtable中的索引,查找的時候經過因此查找,複雜度爲O(1)
此方法會在計算ascii值和時出現衝突,解決衝突的方法:分離連接,線性查探,雙散列法數組

  • 分離連接

在散列表的每一個位置建立一個鏈表並將元素儲存在裏面,獲取的時候,遍歷當前位置上的鏈表,並比對key值,進行獲取數據結構

  • 線行探查

項表中某個位置增長新元素時,若索引爲index的位置已經佔了,就嘗試index+1,以此類推函數

  • 散列函數的性能由幾個方面構成:插入和檢索元素的時間,較低的衝突可能性

「djb2」散列函數性能

var djb2HashCode = function (key) {
    var hash = 5381;// 初始化一個hash值並賦值爲一個質數(目前大多數都是用5381)
    for (var i = 0; i < key.length; i++) {
        hash = hash * 33 + key.charCodeAt(i);
    }
    return hash % 1013
}
相關文章
相關標籤/搜索