《JavaScript資料結構與演算法》筆記——第7章 字典和雜湊表

王遠東發表於2019-02-16
  • 在字典中,儲存的是[鍵,值],集合可以看作[值,值]的形式儲存元素,字典也稱為對映
方法 描述 備註
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
}

相關文章