雜湊表是基於陣列實現的,陣列相對的劣勢有:雜湊表的優勢 :
雜湊表的劣勢:
那麼雜湊表到底是什麼呢?它的結構就是陣列,它神奇的地方就在於對下標值的一種變換,即雜湊函式,通過雜湊函式得到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 的位置上,這種查詢技術稱為雜湊技術。採用雜湊技術將記錄儲存在一塊連續的...