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 EasyUI API 中文文档 - Menu菜单
Oct 03 Javascript
js循环改变div颜色具体方法
Jun 25 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
Aug 05 Javascript
JavaScript中继承用法实例分析
May 16 Javascript
JavaScript与jQuery实现的闪烁输入效果
Feb 18 Javascript
jQuery 特性操作详解及实例代码
Sep 29 Javascript
element-ui 表格实现单元格可编辑的示例
Feb 26 Javascript
JS通过识别id、value值对checkbox设置选中状态
Feb 19 Javascript
vue mvvm数据响应实现
Nov 11 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
Dec 10 Javascript
vue+element实现动态加载表单
Dec 13 Vue.js
vue项目proxyTable配置和部署服务器
Apr 14 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 set_time_limit(0) 设置程序执行时间的函数
2010/05/26 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
PHP7 标准库修改
2021/03/09 PHP
JS是否可以跨文件同时控制多个iframe页面的应用技巧
2007/12/16 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
JavaScript DOM基础
2015/04/13 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
jQuery树控件zTree使用方法详解(一)
2017/02/28 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
Python抽象类的新写法
2015/06/18 Python
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
python实现三维拟合的方法
2018/12/29 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
马来西亚户外装备商店:PTT Outdoor
2019/07/13 全球购物
技校生自我鉴定
2013/12/08 职场文书
美发活动策划书
2014/01/14 职场文书
招商专员岗位职责
2014/02/08 职场文书
计算机专业职业规划
2014/02/28 职场文书
学校对教师的评语
2014/04/28 职场文书
英语课外活动总结
2014/08/27 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
2015年行政部工作总结
2015/04/28 职场文书
2015年路政工作总结
2015/05/22 职场文书
MySQL sql_mode修改不生效的原因及解决
2021/05/07 MySQL
Redis 常见使用场景
2021/08/30 Redis