您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)JS中如何實(shí)現(xiàn)散列表碰撞處理、開鏈法、HashTable散列,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
具體如下:
/** * 散列表碰撞處理、開鏈法、HashTable散列。 * 將數(shù)組里的元素位置,也設(shè)置為數(shù)組,當(dāng)兩個(gè)數(shù)據(jù)的散列在同一個(gè)位置時(shí), * 就可以放在這個(gè)位置的二維數(shù)組里,解決了散列函數(shù)的碰撞處理問題 */ function HashTable() { this.table = new Array(137); this.betterHash = betterHash;//散列函數(shù) this.showDistro = showDistro;//顯示散列表里的數(shù)據(jù) this.buildChains = buildChains;//生成二維數(shù)組 this.put = put;//將數(shù)據(jù)存儲(chǔ)到散列表 this.get = get;//從散列表中取出某個(gè)數(shù)據(jù) } // put for separate chaining function put(key, data) { var pos = this.betterHash(key); var index = 0; if (this.table[pos][index] == undefined) { this.table[pos][index] = data; }else { while (this.table[pos][index] != undefined) { ++index; } this.table[pos][index] = data; } } /*散列函數(shù)*/ function betterHash(string) { const H = 37; var total = 0; for (var i = 0; i < string.length; ++i) { total += H * total + string.charCodeAt(i); } total = total % this.table.length; if (total < 0) { total += this.table.length-1; } return parseInt(total); } function showDistro() { var n = 0; for (var i = 0; i < this.table.length; ++i) { if (this.table[i][n] != undefined) { console.log(i + ": " + this.table[i]); } } } function buildChains() { for (var i = 0; i < this.table.length; ++i) { this.table[i] = new Array(); } } // get for separate chaining function get(key) { var index = 0; var pos = this.betterHash(key); while ((this.table[pos][index] != undefined)&&(this.table[pos][index] != key)) { index += 1; } if(this.table[pos][index] == key) { console.log(key+" 的鍵值為: "+this.table[pos][index]); return this.table[pos][index]; }else{ console.log("無該鍵值"); return undefined; } } /*測(cè)試開鏈法*/ var someNames = ["David", "Jennifer", "Donnie", "Raymond", "Cynthia", "Mike", "Clayton", "Danny", "Jonathan"]; var hTable = new HashTable(); hTable.buildChains(); for (var i = 0; i < someNames.length; ++i) { hTable.put(someNames[i],someNames[i]); } hTable.showDistro(); hTable.betterHash("Jennifer"); hTable.get("Jennidfer"); hTable.get("Jennifer");
使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼,可得如下運(yùn)行結(jié)果:
關(guān)于“JS中如何實(shí)現(xiàn)散列表碰撞處理、開鏈法、HashTable散列”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。