新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JS中如何實現(xiàn)散列表碰撞處理、開鏈法、HashTable散列
這篇文章將為大家詳細講解有關(guān)JS中如何實現(xiàn)散列表碰撞處理、開鏈法、HashTable散列,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、天柱ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的天柱網(wǎng)站制作公司
具體如下:
/** * 散列表碰撞處理、開鏈法、HashTable散列。 * 將數(shù)組里的元素位置,也設(shè)置為數(shù)組,當兩個數(shù)據(jù)的散列在同一個位置時, * 就可以放在這個位置的二維數(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ù)存儲到散列表 this.get = get;//從散列表中取出某個數(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; } } /*測試開鏈法*/ 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代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼,可得如下運行結(jié)果:
關(guān)于“JS中如何實現(xiàn)散列表碰撞處理、開鏈法、HashTable散列”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
當前名稱:JS中如何實現(xiàn)散列表碰撞處理、開鏈法、HashTable散列
分享地址:http://fisionsoft.com.cn/article/jgpohj.html