JavaScript数据结构-12.散列碰撞(线性探测法)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>线性探测法处理碰撞的散列</title>
</head>
<body>
<p>线性探测法隶属于开放寻址散列。当发生碰撞时,检查散列中的下一个位置是否为空。如果为空就将数据存入该位置,不为空继续查下去。</p>
<p>如果数组的大小是待存储数据个数的1.5倍,那么使用开链法,如果是两倍及以上,使用线性探测法。</p>
<script>
function HashTable(){
this.table = new Array(137);
this.values = [];
this.betterHash = betterHash;
this.showDistro = showDistro;
this.put = put;
this.get = get;
} function betterHash(data){
const H =37;
var total = 0;
for(var i=0;i<data.length;i++){
total += H*total + data.charCodeAt(i); }
total %= this.table.length;
if(total <0){
total += this.table.length-1;
}
console.log(data+"->"+ total % this.table.length);
return parseInt(total);
}
function put(key,data){ //线性探测法
var pos = this.betterHash(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;
}
console.log("values",this.values);
console.log("table",this.table);
}
function showDistro(){
for(var i = 0;i<this.table.length;i++){
if(this.table[i] != undefined){
console.log(this.table[i],":",this.table[i]);
}
}
}
function get(key){
var hash = this.betterHash(key);
if(hash >-1){
for(var i=hash;this.table[hash] != undefined;i++){
if(this.table[hash] == key){
return this.values[hash];
}
}
}
return undefined;
} var obj = new HashTable();
obj.put("k1","zhangsan");
obj.put("k2","lisi");
obj.put("k3","javascript");
obj.showDistro();
console.log(obj.get("k3"));
</script>
</body>
</html>
JavaScript数据结构-12.散列碰撞(线性探测法)的更多相关文章
- JavaScript数据结构-13.散列碰撞(开链法)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JavaScript数据结构-11.散列
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JavaScript 数据结构与算法之美 - 线性表(数组、栈、队列、链表)
前言 基础知识就像是一座大楼的地基,它决定了我们的技术高度. 我们应该多掌握一些可移值的技术或者再过十几年应该都不会过时的技术,数据结构与算法就是其中之一. 栈.队列.链表.堆 是数据结构与算法中的基 ...
- Java学习笔记(2)----散列集/线性表/队列/集合/图(Set,List,Queue,Collection,Map)
1. Java集合框架中的所有实例类都实现了Cloneable和Seriablizable接口.所以,它们的实例都是可复制和可序列化的. 2. 规则集存储的是不重复的元素.若要在集合中存储重复的元素, ...
- JavaScript数据结构与算法-散列练习
散列的实现 // 散列类 - 线性探测法 function HashTable () { this.table = new Array(137); this.values = []; this.sim ...
- 散列数据结构以及在HashMap中的应用
1. 为什么需要散列表? 对于线性表和链表而言,访问表中的元素,时间复杂度均为O(n).即便是通过树结构存储数据,时间复杂度也为O(logn).那么有没有一种方式可以将这个时间复杂度降为O(1)呢?当 ...
- Hash算法:双重散列
双重散列是线性开型寻址散列(开放寻址法)中的冲突解决技术.双重散列使用在发生冲突时将第二个散列函数应用于键的想法. 此算法使用: (hash1(key) + i * hash2(key)) % TAB ...
- 学习javascript数据结构(三)——集合
前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...
- JavaScript 数据结构与算法之美 - 十大经典排序算法汇总(图文并茂)
1. 前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 ...
随机推荐
- [翻译]Component Registration in Script System 在脚本系统中注册组件
Component Registration in Script System 在脚本系统中注册组件 To refer to our component from a script, the cl ...
- Android-SDCardUtil-工具类
SDCardUtil-工具类,是专门处理,外置存储Sdcard的操作 package common.library.utils; import android.annotation.SuppressL ...
- 重新打造的我的Pugo
Pugo博客已经搭建了好几个月了吧,给我感受到非常方便的就是,我换了好多VPS,迁移显得非常的方便,但是也有不足的地方,比如发布一篇新的博客,我每次都需要重新进入后台进行新的Post,还需要重新bui ...
- connect db2 by tools
- ansible 之条件语句 when
注册变量: 变量的另一个用途是将一条命令的运行结果保存到变量中,供后面的playbook使用.例如: - hosts: webservers tasks: - shell: /usr/bin/foo ...
- 初识Mybatis框架
mybatis框架 主要是对数据库进行操作的 编写sql语句 使我们对数据库的crud操作更加简洁方便!! 1.使用mybatis框架 进行第一个项目 查询数据库 并返回数据 :(简单) (1)搭建 ...
- 封装继承多态-java面向对象三大特征
第七章 封装和继承 一.面向对象的三大特征 封装.继承.多态 二.封装 将类的属性(字段)设置为私有的(private),并添加getter/setter方法操作属性. 注意:get|set方法的固 ...
- 【文文殿下】Manache算法-学习笔记
Manache算法 定义:是一个判断回文子串的算法,我们结合例题解释: 题目:给定一个长度为 n 的字符串 S,求其最长回文子串 一个字符串是回文的,当且仅当反转后的串与原串完全相等 分析:对于这个题 ...
- 渗透日常之 花式实战助你理解CSRF
本文作者:i春秋签约作家——onls辜釉 最近比较忙,很久没发文章了,Onls本就只是一个安全爱好者,工作也不是安全相关.以往的文章也更像是利用简单漏洞的“即兴把玩”,更多的是偏向趣味性,给大家增加点 ...
- 2016级算法期末模拟练习赛-E.AlvinZH的青春记忆III
1083 AlvinZH的青春记忆III 思路 难题,二分图. 说这是一个考察二分图的题目,你可以会说"不可能",这哪里像一个二分图了!这真的是一个二分图,考察的是最小顶点覆盖. ...