1 Star 0 Fork 0

ubuntuvim/algorithm

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
HashTable.js 1.57 KB
一键复制 编辑 原始数据 按行查看 历史
ubuntuvim 提交于 2015-07-15 10:58 +08:00 . save to git...
/**
*
* HashTable
*/
function HashTable() {
// 为什么定义数组长度为137,请看数据结构与算法 javascript 描述.pdf P88
this.table = new Array(137);
this.simpleHash = simpleHash; // 普通散列函数,碰撞几率大
this.genHashCodeV2 = genHashCodeV2; //加强版散列函数
this.showDistro = showDistro;
this.put = put;
this.get = get;
}
/**
* 散列函数
* 将字符串中每个字符的 ASCII 码值相加似乎是一个不错的散列函数。
* 这样散列值就是 ASCII 码值的和除以数组长度的余数
* 本散列函数发生碰撞的机会很大,需要设计更好的散列函数
*/
function simpleHash(data) {
var total = 0;
for (var i = 0; i < data.length; i++) {
total += data.charCodeAt(i);
}
return total % this.table.length;
}
/**
* 比第一个版本更好的散列函数
* 详情请看 《数据结构与算法 javascript 描述.pdf》P91
*/
function genHashCodeV2(data) {
const hcode = 37;
var total = 0;
for (var i = 0; i < data.length; i++) {
total += total + data.charCodeAt(i);
}
total = total % this.table.length;
return parseInt(total);
}
function put(data) {
var pos = this.genHashCodeV2(data); //得到散列值作为键
this.table[pos] = data;
}
function showDistro() {
// var n = 0;
// print("table length = " + this.table.length);
for (var i = 0; i < this.table.length; i++) {
// print("i = " + i);
if (typeof(this.table[i]) != 'undefined') {
print(i + "" + this.table[i]);
}
}
}
/**
* 后续完善
*/
function get() {
var pos = this.genHashCodeV2(data);
return this.table[pos];
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/ubuntuvim/algorithm.git
git@gitee.com:ubuntuvim/algorithm.git
ubuntuvim
algorithm
algorithm
master

搜索帮助