色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

javascript 雙散列

錢淋西1年前8瀏覽0評論

javascript是一種流行的編程語言,可以被用于網(wǎng)站的開發(fā)和設(shè)計(jì)。其中,雙散列是javascript中的一種重要的數(shù)據(jù)結(jié)構(gòu)。

雙散列(Double Hashing)是一種基于散列的數(shù)據(jù)結(jié)構(gòu),用于快速的查找、插入和刪除。它的主要思想是使用兩個(gè)散列函數(shù)來將要存儲的數(shù)據(jù)映射到一個(gè)固定的位置。如果兩個(gè)函數(shù)返回的地址是一致的,就會采用另一個(gè)散列函數(shù)來重新計(jì)算地址。這一過程會不斷重復(fù)直到能夠找到一個(gè)空閑位置或者一個(gè)已經(jīng)存儲了相同關(guān)鍵字的位置。

下面,我們來看看一個(gè)簡單的例子:

function HashTable(size) {
this.size = size;
this.keys = new Array(size);
this.values = new Array(size);
}
HashTable.prototype.put = function(key, value) {
var index = hash(key, this.size);
if(this.keys[index] == null) {
this.keys[index] = key;
this.values[index] = value;
}
else {
var index2 = hash2(key, this.size);
var i = 1;
while(true) {
var newIndex = (index + i * index2) % this.size;
if(this.keys[newIndex] == null) {
this.keys[newIndex] = key;
this.values[newIndex] = value;
break;
}
i++;
}
}
};
HashTable.prototype.get = function(key) {
var index = hash(key, this.size);
if(this.keys[index] == key) {
return this.values[index];
}
else {
var index2 = hash2(key, this.size);
var i = 1;
while(true) {
var newIndex = (index + i * index2) % this.size;
if(this.keys[newIndex] == key) {
return this.values[newIndex];
}
if(this.keys[newIndex] == null) {
return null;
}
i++;
}
}
};
function hash(str, max) {
var hash = 0;
for(var i = 0; i< str.length; i++) {
hash += str.charCodeAt(i);
}
return hash % max;
}
function hash2(str, max) {
var hash = 5381;
for(var i = 0; i< str.length; i++) {
hash = (hash<< 5) + hash + str.charCodeAt(i);
hash = hash & hash;
}
return Math.abs(hash % max);
}

在這個(gè)例子中,我們定義了一個(gè)HashTable類,它使用雙散列來實(shí)現(xiàn)存儲和查找。put()函數(shù)用于向散列表中存儲數(shù)據(jù),get()函數(shù)用于查找關(guān)鍵字。我們使用兩個(gè)散列函數(shù)來計(jì)算存儲數(shù)據(jù)的位置。如果第一個(gè)散列函數(shù)檢測到一個(gè)沖突,我們就會使用第二個(gè)散列函數(shù)來找到另外一個(gè)位置。

在本例中,我們使用了兩個(gè)非常簡單的散列函數(shù),這里有很多方法來實(shí)現(xiàn)優(yōu)秀的散列函數(shù),比如除留余數(shù)法、平方取中法、折疊法等等。優(yōu)秀的散列函數(shù)應(yīng)該是均勻分布的,能夠避免沖突情況的發(fā)生。

總的來說,雙散列是一種非常有效的數(shù)據(jù)結(jié)構(gòu),它能夠快速地定位到存儲數(shù)據(jù)的位置,并且不會讓數(shù)據(jù)發(fā)生太多的沖突。通過合理的散列函數(shù)的選擇,我們能夠在javascript中實(shí)現(xiàn)高效的查找和存儲數(shù)據(jù)的操作。