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 相关文章推荐
让插入到 innerHTML 中的 script 跑起来的实现代码
Jul 01 Javascript
jqgrid 简单学习笔记
May 03 Javascript
jquery改变disabled的boolean状态的三种方法
Dec 13 Javascript
checkbox批量选中,获取选中项的值的简单实例
Jun 28 Javascript
基于BootStrap实现局部刷新分页实例代码
Aug 08 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
Nov 10 jQuery
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
Jan 30 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
Oct 28 Javascript
vue  directive定义全局和局部指令及指令简写
Nov 20 Javascript
js中位运算的运用实例分析
Dec 11 Javascript
React中this丢失的四种解决方法
Mar 12 Javascript
vue实现标签云效果的示例
Nov 09 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
jquery cookie插件代码类
2009/05/26 Javascript
JavaScript定义类的几种方式总结
2014/01/06 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
对于Form表单reset方法的新认识
2014/03/05 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
理解JavaScript中Promise的使用
2016/01/18 Javascript
全面了解js中的script标签
2016/07/04 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
vue路由拦截及页面跳转的设置方法
2018/05/24 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
python保存字符串到文件的方法
2015/07/01 Python
使用Python的Flask框架来搭建第一个Web应用程序
2016/06/04 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
django框架自定义用户表操作示例
2018/08/07 Python
python实现简单flappy bird
2018/12/24 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
Django实现文件上传和下载功能
2019/10/06 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
pytorch GAN生成对抗网络实例
2020/01/10 Python
python脚本第一行如何写
2020/08/30 Python
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
部队学习十八大感言
2014/01/11 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
村党组织公开承诺书
2015/04/30 职场文书
海洋天堂观后感
2015/06/05 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
四年级作文之植物
2019/09/20 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL