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 相关文章推荐
javascript 兼容FF的onmouseenter和onmouseleave的代码
Jul 19 Javascript
TextArea设置MaxLength属性最大输入值的js代码
Dec 21 Javascript
jquery插件推荐浏览器嗅探userAgent
Nov 09 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
Nov 21 Javascript
详谈js中数组(array)和对象(object)的区别
Feb 27 Javascript
JavaScript 中的12种循环遍历方法【总结】
May 31 Javascript
Angularjs实现多图片上传预览功能
Jul 18 Javascript
vue移动端弹框组件的实例
Sep 25 Javascript
微信小程序开发中var that =this的用法详解
Jan 18 Javascript
JS this关键字在ajax中使用出现问题解决方案
Jul 17 Javascript
JavaScript用document.write()输出换行的示例代码
Nov 26 Javascript
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 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 Static 关键字之旅模式
2015/11/13 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
总结一些js自定义的函数
2006/08/05 Javascript
驱动事件的addEvent.js代码
2007/03/27 Javascript
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
Python中的exec、eval使用实例
2014/09/23 Python
django之session与分页(实例讲解)
2017/11/13 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
pytorch 预训练层的使用方法
2019/08/20 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
python request 模块详细介绍
2020/11/10 Python
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
2014信息公开实施方案
2014/02/22 职场文书
工程安全员岗位职责
2014/03/09 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
工会优秀工作者事迹
2014/08/17 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
2014年超市员工工作总结
2014/11/18 职场文书
HTML中的表格元素介绍
2022/02/28 HTML / CSS
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL