JS散列表碰撞处理、开链法、HashTable散列示例


Posted in Javascript onFebruary 08, 2019

本文实例讲述了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.3water.com/code/HtmlJsRun测试上述代码,可得如下运行结果:

JS散列表碰撞处理、开链法、HashTable散列示例

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jquery中动态效果小结
Dec 16 Javascript
js 操作select与option(示例讲解)
Dec 20 Javascript
利用jquery写的左右轮播图特效
Feb 12 Javascript
JavaScript中解析JSON数据的三种方法
Jul 03 Javascript
javascript省市区三级联动下拉框菜单实例演示
Nov 29 Javascript
javascript实现tab响应式切换特效
Jan 29 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
Dec 06 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
Mar 21 Javascript
vue.js单页面应用实例的简单实现
Apr 10 Javascript
element上传组件循环引用及简单时间倒计时的实现
Oct 01 Javascript
在JS循环中使用async/await的方法
Oct 12 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
Jan 07 Vue.js
ES6 对象的新功能与解构赋值介绍
Feb 05 #Javascript
Vue从TodoList中学父子组件通信
Feb 05 #Javascript
详解webpack编译速度提升之DllPlugin
Feb 05 #Javascript
基于Webpack4和React hooks搭建项目的方法
Feb 05 #Javascript
利用Dectorator分模块存储Vuex状态的实现
Feb 05 #Javascript
小程序页面动态配置实现方法
Feb 05 #Javascript
PHP实现基于Redis的MessageQueue队列封装操作示例
Feb 02 #Javascript
You might like
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
PHP实现适用于自定义的验证码类
2016/06/15 PHP
php英文单词统计器
2016/06/23 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
两个Javascript小tip资料
2010/11/23 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
JavaScript正则表达式之multiline属性的应用
2015/06/16 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
vue实现购物车的监听
2020/04/20 Javascript
JavaScript 监听组合按键思路及代码实现
2020/07/28 Javascript
python基于queue和threading实现多线程下载实例
2014/10/08 Python
pandas实现选取特定索引的行
2018/04/20 Python
Python实战之制作天气查询软件
2019/05/14 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
CAT鞋美国官网:CAT Footwear
2017/11/27 全球购物
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
德国自行车商店:Tretwerk
2019/06/21 全球购物
销售代表求职自荐信
2013/10/01 职场文书
旅游与酒店管理的自我评价分享
2013/11/03 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
语文复习计划
2015/01/19 职场文书
新郎结婚保证书
2015/02/26 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL