欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS散列表碰撞處理、開鏈法、HashTable散列示例

 更新時(shí)間:2019年02月08日 08:41:38   作者:白楊-M  
這篇文章主要介紹了JS散列表碰撞處理、開鏈法、HashTable散列,結(jié)合實(shí)例形式分析了散列表碰撞處理、開鏈法、HashTable散列的定義及簡(jiǎn)單使用操作技巧,需要的朋友可以參考下

本文實(shí)例講述了JS散列表碰撞處理、開鏈法、HashTable散列。分享給大家供大家參考,具體如下:

/**
 * 散列表碰撞處理、開鏈法、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)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論