散列表碰撞处理、开链法、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");

散列表碰撞处理、开链法、HashTable散列相关推荐

  1. 20 | 散列表(下):为什么散列表和链表经常会一起使用?

    有两种数据结构,散列表和链表经常会被放在一起使用.常见的使用方式有: 用链表来实现 LRU 缓存淘汰算法,链表实现的 LRU 缓存淘汰算法的时间复杂度是 O(n),通过散列表可以将这个时间复杂度降低到 ...

  2. Python与数据结构[4] - 散列表[1] - 分离链接法的 Python 实现

    分离链接法 / Separate Chain Hashing 前面完成了一个基本散列表的实现,但是还存在一个问题,当散列表插入元素冲突时,散列表将返回异常,这一问题的解决方式之一为使用链表进行元素的存 ...

  3. 散列表ADT--分离链接法

    分离链接法 解决冲突的第一种方法通常叫作分离链接法(separate chaining),其做法是将散列到同一个值的所有元素保留在一个表中.为方便起见这些表都有表头.如果空间很紧,则更可取的方法是避免 ...

  4. 散列表(开放定址法)

    散列表(开放定址法) 1.线性探测法 将具体的值输入到哈希函数中,映射出的具体的哈希表中的下标索引.当下标索引冲突时. 离散链表法:将重复了的值用链表的方式挂在对应索引的链表下. 线性探测法:一个位置 ...

  5. 散列表(离散链表法)

    散列表(离散链表法) 1.相关介绍 散列表也叫哈希表,英文名字Hash Table,有具体的哈希函数,将值映射到具体的表下标中.这样查找起来就十分方便. 散列表的注意点: (1)散列函数要具有一致性, ...

  6. 散列表的设计与实现_散列表:如何实现word编辑器的拼写检查?

    Word文档编辑器大家应该经常使用吧,大家有没有留意到它编辑功能,当我们输入一个错误的单词时,单词单面就会标红提示"拼写 错误",这个功能是怎么实现的呢?其实啊,它是通过散列表实现 ...

  7. 散列表,(拉链法,平方探测法,线性探测法)

    840. 模拟散列表 题目 提交记录 讨论 题解 视频讲解 维护一个集合,支持如下几种操作: I x,插入一个数 x : Q x,询问数 x 是否在集合中出现过: 现在要进行 N 次操作,对于每个询问 ...

  8. 数据结构 散列表 除留余数法 线性探测法解决冲突

    已知9名学生的信息,每个学生信息包括编号和姓名.学生信息为11,王红,22,刘军,47,王亮,92,张强,16,吴迪,3,李伟,7,赵磊,29,钱鹤,8,孙芳.用散列表实现以编号为关键码的查找.散列函 ...

  9. 数据结构与算法 / 散列表(HashTable)

    一.散列思想 通过散列函数通过 Key 值计算得出数组下标,然后利用数组支持下标随机访问的特性,在时间复杂度为O(1)的情况下找到所需要的信息. 散列函数Key -------------> 散 ...

  10. hashtable——散列表

    2018-11-01 散列表---哈希表基于快速存取,时间换空间一种基于线性数组的线性表,不过元素之间并非紧密排列 散列函数--通过函数,有key关键码计算地址(相当于数组下标),函数尽可能使元素均匀 ...

最新文章

  1. Entity Framework VS Mybatis 不同点剖析
  2. 19. 删除链表的倒数第N个节点
  3. Kernel Video Converter中文版
  4. 图示机器学习(part1)--机器学习与应用
  5. circle loss代码实现_CenterNet之loss计算代码解析
  6. 解决方法:Linux装完显卡驱动后分辨率显示不正常
  7. 小米随身WiFi,Linux下AP热点驱动(开源)
  8. acp计算机编程大赛时间,2021年ACP考试时间安排 - 希赛网
  9. java 模块层次结构图_Spring框架模块结构图解析
  10. 【SD自动记账】SD与FI的集成部分
  11. STM32系统定时器SysTick
  12. C#编程实现阶乘的两种方法
  13. php基础复习函数、类、对象、设计模式....
  14. python 网页生成pdf_pdfkit | 利用python实现html文件转pdf
  15. (病毒安全)绝招:清除不可杀病毒的技巧
  16. 一图知道的职能型、项目型和矩阵型组织的优缺点
  17. telnet调用dubbo服务命令小全
  18. 中国真空泵制造行业需求状况及盈利前景预测报告(2022-2027年)
  19. 关于【batch】的一些问题
  20. 【超直白讲解opencv RGB与BGR】RGB模式与BGR模式有什么不同,如何相互转换?

热门文章

  1. python 安装impala包
  2. python元组遍历
  3. 为什么选择红黑树作为底层实现
  4. python备注(持续更新……)
  5. heatmap绘制热图时出现样本列名顺序调换
  6. linux lua 编译 开发,Linux CentOS 编译LUA。。搞半天终于对了= =
  7. 【代码笔记】Web-JavaScript-JavaScript 运算符
  8. SQL Server系统表sysobjects介绍
  9. 【MySQL】mysql中any,in,some,all的区别
  10. 基于三台主机部署phpwind