JS散列表碰撞处理、开链法、HashTable散列示例

yizhihongxing

JS散列表碰撞处理是指在散列表中插入元素时,如果发现插入位置已经有元素,就会出现碰撞的情况。碰撞处理的目标是保持散列表中没有重复的元素。下面将介绍两种JS散列表的碰撞处理方法:开链法和线性探测法。

开链法

开链法也被称为拉链法,是一种常用的碰撞处理技术。它的基本思想是将每个散列值的链表放置在散列表的对应位置上,如果插入时与该链表中的某个元素发生碰撞,就将新元素追加到该链表的末尾。

下面是一个基于开链法的HashTable散列示例的核心代码:

function HashTable() {
  this.table = new Array(137);
  this.buildChains();
}

HashTable.prototype.buildChains = function() {
  for (var i = 0; i < this.table.length; ++i) {
    this.table[i] = new LinkedList();
  }
};

HashTable.prototype.put = function(key, data) {
  var pos = this.hash(key);
  var list = this.table[pos];
  list.append(new Node(key, data));
};

HashTable.prototype.get = function(key) {
  var pos = this.hash(key);
  var list = this.table[pos];
  for (list.front(); list.currPos() < list.length(); list.next()) {
    if (list.getElement().key == key) {
      return list.getElement().data;
    }
  }
  return null;
};

在上述代码中,HashTable是一个构造函数,其buildChains方法用于在实例化时初始化散列表。put方法用于将新的键值对插入散列表,它首先计算数据的散列值,然后取出对应的链表,并将新元素添加至该链表的末尾。get方法用于从散列表中获取某个键的值,它首先计算数据的散列值,然后取出对应的链表,并遍历该链表检查每个元素的键值是否与指定的键值相同。如果找到对应的键值,则返回其值;否则返回null。

线性探测法

线性探测法是一种简单的碰撞处理技术,其基本思想是如果发生碰撞,就按照某个增量(通常为常数1)将键散列到下一个位置,直到找到空位置为止。

下面是一个基于线性探测法的HashTable散列示例的核心代码:

function HashTable() {
  this.table = new Array(137);
  this.values = [];
}

HashTable.prototype.put = function(key, data) {
  var pos = this.hash(key);
  if (this.table[pos] == undefined) {
    this.table[pos] = key;
    this.values[pos] = data;
  } else {
    while (this.table[pos] != undefined) {
      pos++;
    }
    this.table[pos] = key;
    this.values[pos] = data;
  }
};

HashTable.prototype.get = function(key) {
  var pos = this.hash(key);
  if (this.table[pos] == undefined) {
    return undefined;
  } else {
    while (this.table[pos] != undefined && this.table[pos] != key) {
      pos++;
    }
    if (this.table[pos] == key) {
      return this.values[pos];
    } else {
      return undefined;
    }
  }
};

在上述代码中,HashTable是一个构造函数,其put方法用于将新的键值对插入散列表,它首先计算数据的散列值,然后将其存储在该散列表中对应的位置上。如果发生碰撞,就按照常数1的增量将键散列到下一个位置,直到找到空位置为止。get方法用于从散列表中获取某个键的值,它首先计算数据的散列值,然后到该散列表的对应位置上查找对应的键值。

以上就是JS散列表碰撞处理和HashTable散列示例的详细讲解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS散列表碰撞处理、开链法、HashTable散列示例 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • js中typeof的用法汇总

    JavaScript 中 typeof 的用法汇总 在 JavaScript 中,typeof 是一个常用的运算符,用于返回给定变量或表达式的数据类型。以下是 typeof 的使用方式及其返回值汇总。 typeof 运算符 typeof 运算符用于返回一个表示给定变量/表达式的数据类型的字符串。它采取以下形式: typeof operand operand …

    JavaScript 2023年5月27日
    00
  • layui表单验证select下拉框实现验证的方法

    下面是关于“layui表单验证select下拉框实现验证的方法”的详细攻略。 步骤一:引入layui表单模块 首先我们需要引入layui表单模块,因为它包含了表单验证的相关功能。我们可以将下面的代码加入到html文件中: <link rel="stylesheet" href="/layui/css/layui.css&q…

    JavaScript 2023年6月10日
    00
  • JavaScript定时器用法

    JavaScript定时器是一种用于在指定时间间隔后执行代码的功能。在Web应用程序中,它们经常用于将动画效果与其他用户交互部分结合起来。本攻略将详细介绍JavaScript定时器,包括setTimeout和setInterval函数的用法。 setTimeout setTimeout函数允许我们在指定的时间间隔之后执行一段代码。以下是setTimeout函…

    Web开发基础 2023年3月30日
    00
  • JavaScript自学笔记(必看篇)

    JavaScript自学笔记(必看篇)攻略 1. 基本语法 JavaScript作为一门脚本语言,语法相对灵活,但是也需要遵循一定的规范。想要快速上手JavaScript,我们需要先掌握以下几个基本概念: 变量定义和赋值 数据类型 运算符 条件语句和循环语句 举个例子,我们可以通过以下代码来定义一个变量并给它赋值: var name = "张三&q…

    JavaScript 2023年5月27日
    00
  • 15分钟深入了解JS继承分类、原理与用法

    下面是关于“15分钟深入了解JS继承分类、原理与用法”的完整攻略。 一、JS继承分类 JS继承可以分为以下几种类型: 原型链继承 借用构造函数继承 组合继承 原型式继承 寄生式继承 寄生组合式继承 二、JS继承原理 JS中的继承是基于原型的,每个对象都有__proto__属性,该属性指向对象的原型对象,原型对象又有__proto__属性,依次形成了一个原型链…

    JavaScript 2023年5月28日
    00
  • javascript禁止访客复制网页内容的实现代码

    实现禁止访客复制网页内容的功能,可以使用javascript的一些方法来实现。下面是具体的实现攻略。 方案一:禁止复制内容 我们可以通过覆盖系统自带的复制事件的方式来实现禁止复制功能。具体步骤如下: 1. 绑定复制事件 使用Javascript绑定copy事件,添加事件回调函数。代码如下: document.addEventListener("co…

    JavaScript 2023年6月10日
    00
  • JavaScript防抖动与节流处理

    JavaScript中防抖动和节流是常用的优化技术,用于优化页面交互和性能,下面将详细介绍防抖动和节流的实现原理以及应用场景。 什么是防抖动 在JavaScript处理页面事件时,比如按钮点击事件,如果用户频繁点击,则会导致事件的重复执行,从而浪费资源并影响用户体验。防抖动的作用是将这些重复的事件的执行合并为一次执行,从而优化页面性能。 实现原理:防抖动的原…

    JavaScript 2023年6月11日
    00
  • thinkphp3.x中session方法的用法分析

    ThinkPHP3.x中Session方法的用法分析 什么是Session Session是Web 开发中常用的一种保持用户会话状态的技术,在服务器端保存用户数据,用于跨页面或跨请求访问这些数据,实现用户身份认证,数据的持久化等功能。 ThinkPHP3.x中的Session ThinkPHP3.x封装了Session操作类,使用时可通过以下实例化方法获取S…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部