js資料結構4 雜湊表

2021-09-28 13:29:04 字數 2746 閱讀 9777

雜湊表是基於陣列實現的,陣列相對的劣勢有:

雜湊表的優勢 :

雜湊表的劣勢:

那麼雜湊表到底是什麼呢?它的結構就是陣列,它神奇的地方就在於對下標值的一種變換,即雜湊函式,通過雜湊函式得到hashcode。

for example :

answer :

壓縮大空間 (巨大的整數範圍 -> 可接受的陣列範圍)

measure :

比如: 0 ~ 199 largenunber 0 ~ 9 smallnunmber

下標 index = largenunber% 10;

question :

12,32,122他們的下標都是2,出現了重複;

但是假如在0 ~ 199 中取出5個數字,放進0 ~ 9 的陣列中,很不容易重複(但重複的概率很小)

如何解決下標值重複的問題?

衝突:兩個單詞經雜湊函式轉化的下標相同的情況

鏈位址法

線性探測:

二次探測

如果資料是連續插入的,那麼新插入的資料要探測很長的時間,這裡就用優化的二次探測。

再雜湊化

什麼是填裝因子?

優點在於

能快速的計算,獲得hashcode,所以在函式中要盡量少的乘法和除法

均勻的分布,能將元素對映在不同的位置;

function

hashfunc

(str,size)

//取餘

var index = hashcode % size;

return index;

}

//基於陣列實現的雜湊錶類,衝突用鏈位址法

function

hashtable()

//取餘

var index = hashcode % size;

return index;

}//在雜湊表中新增&修改資料

hashtable.prototype.

put=

function

(key,value)

//4.遍歷bucket看是否修改資料

for(

var i =

0; i < bucket.length; i++)}

//5.新增資料

bucket.

push

([key,value]);

this

.count ++

;//6.擴容操作:如果資料過多擴大表記憶體

// if(this.count > 0.75 * this.limit) if(

this

.count >

0.75

*this

.limit)

}//獲取資料

hashtable.prototype.

get=

function

(key)

for(

var i =

0; i < bucket.length; i++)}

return

null;}

//刪除資料

hashtable.prototype.

remove

=function

(key)

for(

var i =

0; i < bucket.length; i++)if

(this

.limit >

7&& count <

this

.limit *

0.25)}

}return

null;}

//雜湊表的擴容操作

hashtable.prototype.

resize

=function

(newlimit)

將資料重新插入雜湊表

for(

var j =

0; j < bucket.length; j++)}

}//判斷質數

hashtable.prototype.

isprime

=function

(num)

}return

true;}

//向前獲取質數

hashtable.prototype.

getprime

=function

(num)

return num;

}}

當資料過多時,為了提高雜湊表的效率,我們要對雜湊表的記憶體進行擴容,這種情況下所有的資料都要進行重組(重新呼叫雜湊函式),這是乙個耗時的過程,但是卻是很有必要的。

我們前面說到要使雜湊表的容量為質數,這樣雜湊表的效率最高,那麼怎麼使limit恒為質數?

封裝乙個判斷質數的函式;

封裝乙個獲取質數的函式;

使擴容時limit變化的數依然是質數;

具體的方法在封裝雜湊表中。

js資料結構 雜湊表 雜湊表

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

JS 資料結構,雜湊表

雜湊表結構就是陣列,但是不同的地方是,對下標值的一種變換,這種變換被稱為雜湊函式,通過雜湊函式可以獲取到 hashcode 雜湊表,通常是基於陣列進行實現的,但是相對於陣列,它又有很多優勢,可以提供非常快速的插入,刪除,查詢操作。無論多少資料,插入和刪除值需要接近常量的實現,o 1 的時間級,實際上...

資料結構 雜湊表

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