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弹出层插件分享
Apr 02 Javascript
跟我学习javascript解决异步编程异常方案
Nov 23 Javascript
JavaScript、jQuery与Ajax的关系
Jan 24 Javascript
js实现文字截断功能
Sep 14 Javascript
Javascript基础回顾之(三) js面向对象
Jan 31 Javascript
Angular1.x复杂指令实例详解
Mar 01 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
May 24 Javascript
微信小程序getPhoneNumber获取用户手机号
Sep 29 Javascript
vue实现点击选中,其他的不选中方法
Sep 05 Javascript
小程序scroll-view组件实现滚动的示例代码
Sep 20 Javascript
Electron-vue开发的客户端支付收款工具的实现
May 24 Javascript
vue中watch和computed的区别与使用方法
Aug 23 Javascript
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使用memcache存储session的详解
2013/06/25 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
python使用pil生成缩略图的方法
2015/03/26 Python
Python素数检测的方法
2015/05/11 Python
Python栈类实例分析
2015/06/15 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
python环境下安装opencv库的方法
2020/03/05 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
遵纪守法演讲稿
2014/05/23 职场文书
2014年安全员工作总结
2014/11/13 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
员工聘用合同范本
2015/09/21 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
详解php中流行的rpc框架
2021/05/29 PHP