JS 資料結構,雜湊表

2021-10-09 06:30:14 字數 1885 閱讀 2437

雜湊表結構就是陣列,但是不同的地方是,對下標值的一種變換,這種變換被稱為雜湊函式,通過雜湊函式可以獲取到 hashcode 。

雜湊表,通常是基於陣列進行實現的,但是相對於陣列,它又有很多優勢,可以提供非常快速的插入,刪除,查詢操作。無論多少資料,插入和刪除值需要接近常量的實現,o(1)的時間級,實際上,只需要幾個指令即可完成。它的速度比樹還快,基本可以瞬間查到想要的元素。它相對於樹來說,編碼容易得多。

雜湊表,相對於陣列的一些不足:雜湊表中的資料是沒有順序的,所以 不能以一種固定的方式(如從小到大)來遍歷其中的元素。通常情況下,雜湊表中的 key 是不允許重複的,不能放置相同的 key,來儲存不能的值。

雜湊化:將大數字轉化成陣列範圍內下標的過程。

雜湊函式:通常我們把單詞轉換為大數字,大數字在進行雜湊化的**實現放在乙個函式中去做,這個函式就被成為雜湊函式。

雜湊表:最終將資料插入到這個陣列,對整個結構的封裝,稱為乙個雜湊表。

雜湊衝突:開放位址法(尋找空白單元—— 線性探測 / 二次探測 / 再雜湊法)

雜湊表擴容:隨著資料量增加,每乙個 index(hashcode)對應的 bucket(桶)會越來越長,會造成效率降低,為了提公升效率,進行要進行雜湊表的擴容和縮容的操作。需要注意的是,在進行擴容時,所有的資料項一定要同時修改。比較常見的情況是 loadfactor(裝載因子,陣列中元素個數 / 陣列長度)> 0.75的時候進行擴容, loadfactor(裝載因子,陣列中元素個數 / 陣列長度)< 0.25的時候進行縮容。

容量質數:鏈位址法中質數作為容量更利於資料的均勻分布

// 普通判斷質數

// 質數,在 2 到 num-1 之間不能被整除

function isprime(num)

} // 獲取方法

hashtable.prototype.get = function(key)

// 遍歷尋找對應 key

for(var i=0; i7 && this.count < this.limit * 0.25)

return tuple[1];

}} return null;

} // 判斷雜湊表是否為空

hashtable.prototype.isempty = function()

// 獲取雜湊表中元素的個數

hashtable.prototype.size = function()

// 雜湊表擴容 / 縮容

hashtable.prototype.resize = function(newlimit)

// bucket中有資料,取出資料,重新插入

for(var j=0; j} }

// 判斷容量因子是否為質數

hashtable.prototype.isprime = function(num)

} return true;

} // 獲取質數的方法

hashtable.prototype.getprime = function(num)

return num;

}}

js資料結構 雜湊表 雜湊表

雜湊表 hash table,也叫雜湊表 是根據鍵 key 而直接訪問在記憶體儲存位置的資料結構。也就是說,它通過計算乙個關於鍵值的函式,將所需查詢的資料對映到表中乙個位置來訪問記錄,這加快了查詢速度。這個對映函式稱做雜湊函式,存放記錄的陣列稱做雜湊表。我們從上圖開始分析 通過上面簡單的例子,應該會...

js資料結構4 雜湊表

雜湊表是基於陣列實現的,陣列相對的劣勢有 雜湊表的優勢 雜湊表的劣勢 那麼雜湊表到底是什麼呢?它的結構就是陣列,它神奇的地方就在於對下標值的一種變換,即雜湊函式,通過雜湊函式得到hashcode。for example answer 壓縮大空間 巨大的整數範圍 可接受的陣列範圍 measure 比如...

資料結構 雜湊表

1.雜湊表的定義 元素的儲存位置和它的關鍵碼之間建立乙個確定的對應關係h,使得每個關鍵碼key和唯一的儲存位置h key 相對應。在查詢時,根據這個確定的對應關係找到給定值k的對映h k 若查詢集合中存在這個記錄,則必定在h k 的位置上,這種查詢技術稱為雜湊技術。採用雜湊技術將記錄儲存在一塊連續的...