散列表碰撞处理、开链法、HashTable散列
2017-04-11 11:13
232 查看
散列表碰撞处理、开链法、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] != 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—闭散列与开链法
- 使用Hashtable对字符串进行碰撞
- 处理顶点——计算光标与地形的碰撞点:表面拾取
- 用gperf来完成完美散列的功能(C/C++命令行处理)
- 有关convex和Triangle Mesh的碰撞中Inner Edge以及Inner Vertex所导致的错误法向量的处理方法
- HashTable 解决碰撞(冲突)的方法 —— 分离链接法(separate chaining)
- HashTable的双重散列表
- 使用Hashtable对字符串进行碰撞
- (6)散列冲突处理:链地址法
- Apache爆HashTable碰撞拒绝服务漏洞
- 【数据结构】散列表_HashTable
- Box2D的Edge Shape的碰撞处理
- 处理散列冲突
- cocos2d-x游戏开发系列教程-坦克大战游戏之子弹的碰撞检测处理
- 散列函数之处理散列冲突方法
- (转载)散列冲突处理:开放定址法
- 基于cocos2d-x对俯视角游戏碰撞检测及碰撞处理的探究
- flash中物体运动基础之七---------碰撞处理