JavaScript数据结构-13.散列碰撞(开链法)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>开链散列</title>
</head>
<body>
<script>
function HashTable(){
this.table = new Array(137);
this.betterHash = betterHash;
this.showDistro = showDistro;
this.put = put;
this.get = get;
this.buildChains = buildChains;
} 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);
var index = 0;
if(this.table[pos][index] == undefined ){
this.table[pos][index+1] = data;
this.table[pos][0] = key;
index++;
}else{
while(this.table[pos][index] != undefined ){
index++;
}
this.table[pos][index+1] = data;
}
}
function showDistro(){
for(var i = 0;i<this.table.length;i++){
if(this.table[i][0] != undefined){
console.log(this.table[i][0],":",this.table[i]);
}
}
}
function get(key){
var index = 0;
var pos = this.betterHash(key);
if(this.table[pos][index] == key){
return this.table[pos][index+1];
index+=2;
}else{
while(this.table[pos][index] != key){
index += 2;
}
return this.table[pos][index+1];
}
return undefined;
}
function buildChains(){
for(var i=0;i<this.table.length;i++){
this.table[i] = new Array();
}
} var obj = new HashTable();
obj.buildChains();
obj.put("k1","zhangsan");
obj.put("k2","lisi");
obj.put("k3","javascript");
obj.showDistro();
console.log(obj.get("k2"));
</script>
</body>
</html>
JavaScript数据结构-13.散列碰撞(开链法)的更多相关文章
- JavaScript数据结构-12.散列碰撞(线性探测法)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JavaScript数据结构-11.散列
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 散列数据结构以及在HashMap中的应用
1. 为什么需要散列表? 对于线性表和链表而言,访问表中的元素,时间复杂度均为O(n).即便是通过树结构存储数据,时间复杂度也为O(logn).那么有没有一种方式可以将这个时间复杂度降为O(1)呢?当 ...
- 学习javascript数据结构(三)——集合
前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...
- 散列表碰撞处理、开链法、HashTable散列
散列表碰撞处理.开链法.HashTable散列 /** * 散列表碰撞处理.开链法.HashTable散列. * 将数组里的元素位置,也设置为数组,当两个数据的散列在同一个位置时, * 就可以放在这个 ...
- javascript数据结构与算法--散列
一:javascript数据结构与算法--散列 一:什么是哈希表? 哈希表也叫散列表,是根据关键码值(key,value)而直接进行访问的数据结构,它是通过键码值映射到表中一个位置来访问记录的,散列 ...
- Python与数据结构[4] -> 散列表[2] -> 开放定址法与再散列的 Python 实现
开放定址散列法和再散列 目录 开放定址法 再散列 代码实现 1 开放定址散列法 前面利用分离链接法解决了散列表插入冲突的问题,而除了分离链接法外,还可以使用开放定址法来解决散列表的冲突问题. 开放定 ...
- JavaScript数据结构与算法-散列练习
散列的实现 // 散列类 - 线性探测法 function HashTable () { this.table = new Array(137); this.values = []; this.sim ...
- 散列--数据结构与算法JavaScript描述(8)
散列 散列是一种常用的数据存储技术,散列后的数据可以快速地插入或取用. 散列使用的数据结构叫做散列表. 在散列表上插入.删除和取用数据都非常快,但是对于查找操作来说却效率低下,比如查找一组数据中的最大 ...
随机推荐
- Android-Sqlite-SQL操作增删改查
一想到Android到数据库,只需要想到一个类 SQLiteOpenHelper,然后写一个类继承 SQLiteOpenHelper,重写构造方法,对数据库进行配置 public class MySQ ...
- 【C++】C++中的操作符重载
C++中的操作符重载使得对于类对象的操作更加方便和直观,但是对于各种操作符重载的规则以及语法形式,一直以来都是用到哪一个上stackoverflow上查找,在查找了四五次之后,觉得每次麻烦小总结一下. ...
- Sqler 工具更新
新加入打分邮件,针对每台db 服务器应用情况分析打分,目前支持batch.duration.cpu 3个维度.后续会支持 read io.write io.network io 等.自动化,数字化是衡 ...
- system.data.oracleclient 需要 8.17 需要oracle客户端问题
1.下载 2.程序引用 Oracle.DataAccess.dll 其他引用放在debug下
- Kafka与.net core(三)kafka操作
1.Kafka相关知识 Broker:即Kafka的服务器,用户存储消息,Kafa集群中的一台或多台服务器统称为broker. Message消息:是通信的基本单位,每个 producer 可以向一个 ...
- 开源应用框架BitAdminCore:更新日志20180605
索引 NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/coo ...
- windows下用wampServer 为wordpress 搭建本地服务器运行环境
1.准备wamp server wamp是windows apache mysql php 的首字母缩写,更新的wamp总能保证wordpress对服务器的要求 点此下载最新wamp 2.安装wa ...
- [JXOI2017]颜色 线段树求点对贡献
[JXOI2017]颜色 题目链接 https://www.luogu.org/problemnew/show/P4065 题目描述 可怜有一个长度为 n 的正整数序列 Ai,其中相同的正整数代表着相 ...
- 【12c OCP】最新CUUG OCP-071考试题库(52题)
52.(12-11) choose the best answer: Examine the structure and data in the PRICE_LIST table: You plan ...
- LEFT JOIN条件写在where里是不会多查出数据来的
因为WHERE条件是对前面整个数据集进行查询,但如果条件放在ON里是会把在前表不在后表的数据查出来的