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 相关文章推荐
用htc组件制作windows选项卡
Jan 13 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
Jun 28 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
Jul 04 Javascript
使用CoffeeScrip优美方式编写javascript代码
Oct 28 Javascript
老生常谈 关于JavaScript的类的继承
Jun 24 Javascript
微信小程序 弹幕功能简单实例
Feb 14 Javascript
JavaScript中var、let、const区别浅析
Jun 24 Javascript
ES6 系列之 WeakMap的使用示例
Aug 06 Javascript
vue结合element-ui使用示例
Jan 24 Javascript
vue--vuex详解
Apr 15 Javascript
CountUp.js实现数字滚动增值效果
Oct 17 Javascript
解决Layui 表格自适应高度的问题
Nov 15 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
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
javascript实现二分查找法实现代码
2007/11/12 Javascript
Javascript常用运算符(Operators)-javascript基础教程
2007/12/14 Javascript
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
node.js中的querystring.stringify方法使用说明
2014/12/10 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
原生JS实现不断变化的标签
2017/05/22 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
JavaScript 预解析的4种实现方法解析
2019/09/03 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
Python程序语言快速上手教程
2012/07/18 Python
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
Club Monaco加拿大官网:设计师男女服装
2019/09/29 全球购物
大学生志愿者感言
2014/01/15 职场文书
大学社团活动策划书
2014/01/26 职场文书
2014年元旦促销活动方案
2014/02/22 职场文书
我们的节日端午节活动方案
2014/03/02 职场文书
酒店七夕情人节活动策划方案
2014/08/24 职场文书
2014年银行柜员工作总结
2014/11/12 职场文书
自主招生自荐信怎么写
2015/03/24 职场文书
实习推荐信格式模板
2015/03/27 职场文书
因公司原因离职的辞职信范文
2015/05/12 职场文书
八年级英语教学反思
2016/02/15 职场文书