這篇文章主要介紹了JS散列表碰撞處理、開鏈法、HashTable散列,結合實例形式分析了散列表碰撞處理、開鏈法、HashTable散列的定義及簡單使用操作技巧,需要的朋友可以參考下
本文實例講述了JS散列表碰撞處理、開鏈法、HashTable散列。分享給大家供大家參考,具體如下:
/** * 散列表碰撞處理、開鏈法、HashTable散列。 * 將數組裏的元素位置,也設置爲數組,當兩個數據的散列在同一個位置時, * 就可以放在這個位置的二維數組裏,解決了散列函數的碰撞處理問題 */ function HashTable() { this.table = new Array(137); this.betterHash = betterHash;//散列函數 this.showDistro = showDistro;//顯示散列表裏的數據 this.buildChains = buildChains;//生成二維數組 this.put = put;//將數據存儲到散列表 this.get = get;//從散列表中取出某個數據 } // 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; } } /*散列函數*/ 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測試上述代碼,可得如下運行結果:
更多關於JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript數學運算用法總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript數組操作技巧總結》、《JavaScript排序算法總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript查找算法技巧總結》及《JavaScript錯誤與調試技巧總結》
希望本文所述對大家JavaScript程序設計有所幫助。