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实现简单易懂的图片展示小例子
Nov 21 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
Feb 08 Javascript
js实现九宫格图片半透明渐显特效的方法
Feb 16 Javascript
JS实现自动切换文字的导航效果代码
Aug 27 Javascript
JavaScript SweetAlert插件实现超酷消息警告框
Jan 28 Javascript
js利用appendChild对标签进行排序的实现方法
Oct 16 Javascript
js实现数组和对象的深浅拷贝
Sep 30 Javascript
Vue cli+mui 区域滚动的实例代码
Jan 25 Javascript
Vue组件中slot的用法
Jan 30 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
Jul 10 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
May 09 Javascript
jQuery属性选择器用法实例分析
Jun 28 jQuery
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
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
php根据用户名和手机号查询是否存在手机号码
2017/02/16 PHP
js 模拟气泡屏保效果代码
2010/07/10 Javascript
ExtJs的Date格式字符代码
2010/12/30 Javascript
Javascript算符的优先级介绍
2013/03/20 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
详解Require.js与Sea.js的区别
2018/08/05 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
js实现小球在页面规定的区域运动
2020/06/16 Javascript
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
python面试题小结附答案实例代码
2019/04/11 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
2020/03/08 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
python代码如何注释
2020/06/01 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
中国最大的名表商城:万表网
2016/08/29 全球购物
大学本科毕业生求职信范文
2013/12/18 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
广播体操比赛主持词
2015/06/29 职场文书
MySQL多表查询机制
2022/03/17 MySQL
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python