返回顶部
首页 > 资讯 > 前端开发 > html >JS中如何实现散列表碰撞处理、开链法、HashTable散列
  • 292
分享到

JS中如何实现散列表碰撞处理、开链法、HashTable散列

2024-04-02 19:04:59 292人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关js中如何实现散列表碰撞处理、开链法、HashTable散列,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下: function&nbs

这篇文章将为大家详细讲解有关js中如何实现散列表碰撞处理、开链法、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.jb51.net/code/htmlJsRun测试上述代码,可得如下运行结果:

JS中如何实现散列表碰撞处理、开链法、HashTable散列

关于“JS中如何实现散列表碰撞处理、开链法、HashTable散列”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: JS中如何实现散列表碰撞处理、开链法、HashTable散列

本文链接: https://lsjlt.com/news/76273.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS中如何实现散列表碰撞处理、开链法、HashTable散列
    这篇文章将为大家详细讲解有关JS中如何实现散列表碰撞处理、开链法、HashTable散列,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下: function&nbs...
    99+
    2024-04-02
  • PHP中如何实现Redis的散列和列表?
    随着互联网的不断发展和数据量的不断增大,数据存储变得越来越重要。而Redis作为一款高性能的NoSQL数据库,在互联网企业中越来越受欢迎。PHP是一种常用的Web编程语言,而Redis也是一个常用的数据存储方案,因此在PHP中如何实现Red...
    99+
    2023-05-16
    PHP redis 散列和列表
  • 如何在Java中实现一个散列表
    目录前言:优化1优化2优化3如何实现总结前言: 假设现在有一篇很长的文档,如果希望统计文档中每个单词在文档中出现了多少次,应该怎么做呢? 很简单! 我们可以建一个HashMap,以S...
    99+
    2024-04-02
  • 基于拉链式和线性探测式散列表实现Map的方法教程
    本篇内容介绍了“基于拉链式和线性探测式散列表实现Map的方法教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2024-04-02
  • JS中如何实现Select下拉列表类功能
    小编给大家分享一下JS中如何实现Select下拉列表类功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体代码如下所示:<...
    99+
    2024-04-02
  • PHP中如何实现并处理链表
    这篇“PHP中如何实现并处理链表”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“PHP中如何实现并处理链表”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下面让我们一起...
    99+
    2023-06-06
  • web中如何实现列表展开收起效果
    这篇文章主要为大家展示了“web中如何实现列表展开收起效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web中如何实现列表展开收起效果”这篇文章吧。$(&qu...
    99+
    2024-04-02
  • Android中如何实现SQLite事务处理结合Listview列表显示功能
    小编给大家分享一下Android中如何实现SQLite事务处理结合Listview列表显示功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:前面的文章里...
    99+
    2023-05-30
    android sqlite listview
  • Android开发中如何实现数据库升级且表添加新列的方法
    这篇文章给大家分享的是有关Android开发中如何实现数据库升级且表添加新列的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:突然想到我们android版本升级的时候经常会遇到升级版本的时候在新版本中...
    99+
    2023-05-30
    android 数据库
  • java如何实现单线程启动多个线程处理一个列表并在所有子线程处理完毕后父线程再处理其他操作
    这篇文章将为大家详细讲解有关java如何实现单线程启动多个线程处理一个列表并在所有子线程处理完毕后父线程再处理其他操作,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。主类:ParentChildMain父线...
    99+
    2023-06-03
  • 如何在PHP开发中运用自然语言处理技术?Django的实现方法是什么?
    自然语言处理技术(NLP)是一种人工智能技术,其主要目的是使计算机能够理解和处理人类语言。在PHP开发中,NLP技术可以用于许多应用程序,例如情感分析、文本分类、自动翻译等。本文将介绍如何在PHP开发中运用NLP技术,并探讨Django的实...
    99+
    2023-08-21
    开发技术 自然语言处理 django
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作