1. 以哈希KEY的值建立二叉哈希表

2. 依据传入的哈希值使用二分法搜索

详细实现例如以下:

function binarySearchTable(comp){
this.comp = comp;
this.kv = new Array();
} binarySearchTable.prototype.add = function(k,v){
if(this.kv.length == 0 || this.comp(this.kv[0].key,k) >= 0){ this.kv.splice(0,0,{key:k,value:v});
return this;
}
else if(this.comp(this.kv[this.kv.length - 1].key,k) <= 0){
this.kv.push({key:k,value:v});
return this;
}
else{
for(var i = 1,j = i+1;j < this.kv.length; i ++, j++){
if((this.comp(this.kv[i].key) < 0 || this.comp(this.kv[i].key) == 0) &&
(this.comp(this.kv[j].key) > 0 || this.comp(this.kv[j].key) == 0)){
this.kv.splice(i,0,new {key:k,value:v});
return this;
} }
} }; binarySearchTable.prototype.getIndexByKey = function(k){
var lo = 0;
var hi = this.kv.length - 1;
var mid = (lo + hi) / 2 | 0;
var c = 0;
while(lo < hi && (++c) < 10){ if(this.comp(k,this.kv[mid].key) == 0){return mid;}
else if(this.comp(k,this.kv[lo].key) == 0){return lo;}
else if(this.comp(k,this.kv[hi].key) == 0){return hi;}
else if(this.comp(this.kv[mid].key,k) < 0){lo = mid;mid = (hi+lo) / 2 | 0;}
else {hi=mid;mid = (lo+hi)/2 | 0;}
} return null;
}; binarySearchTable.prototype.removeByKey = function(k){
var index = this.getIndexByKey(k);
if(index != null){this.kv.splice(index,1);}
} var comp = function(k1,k2){return k1 < k2 ? -1 : k1 == k2 ? 0 : 1;};
var tbl = new binarySearchTable(comp);
tbl.add("bec",1);
tbl.add("acd",1);
tbl.add("abc",1);
tbl.add("dec",1);
console.log(tbl.getIndexByKey("abc")); tbl.removeByKey("abc");
console.log(tbl.getIndexByKey("abc"));

算法练习--二分搜索哈希表-JS 实现的更多相关文章

  1. Android版数据结构与算法(四):基于哈希表实现HashMap核心源码彻底分析

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 存储键值对我们首先想到HashMap,它的底层基于哈希表,采用数组存储数据,使用链表来解决哈希碰撞,它是线程不安全的,并且存储的key只能有一个为 ...

  2. java数据结构和算法09(哈希表)

    树的结构说得差不多了,现在我们来说说一种数据结构叫做哈希表(hash table),哈希表有是干什么用的呢?我们知道树的操作的时间复杂度通常为O(logN),那有没有更快的数据结构?当然有,那就是哈希 ...

  3. js实现哈希表(HashTable)

    在算法中,尤其是有关数组的算法中,哈希表的使用可以很好的解决问题,所以这篇文章会记录一些有关js实现哈希表并给出解决实际问题的例子. 第一部分:相关知识点 属性的枚举: var person = { ...

  4. js模拟实现哈希表

    在算法中,尤其是有关数组的算法中,哈希表的使用可以很好的解决问题,所以这篇文章会记录一些有关js实现哈希表并给出解决实际问题的例子. 说明: 这篇博客所写并不是真正意义的哈希表,只是与哈希表的使用有相 ...

  5. 简单的哈希表实现 C语言

    简单的哈希表实现 简单的哈希表实现 原理 哈希表和节点数据结构的定义 初始化和释放哈希表 哈希散列算法 辅助函数strDup 哈希表的插入和修改 哈希表中查找 哈希表元素的移除 哈希表打印 测试一下 ...

  6. 哈希表查找(散列表查找) c++实现HashMap

    算法思想: 哈希表 什么是哈希表 在前面讨论的各种结构(线性表.树等)中,记录在结构中的相对位置是随机的,和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较.这一类 ...

  7. python code practice(二):KMP算法、二分搜索的实现、哈希表

    1.替换空格 题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析: 将长度为 ...

  8. js:数据结构笔记7--哈希表

    哈希表(散列表):通过哈希函数将键值映射为一个字典; 哈希函数:依赖键值的数据类型来构建一个哈希函数: 一个基本的哈希表:(按字符串计算键值) function HashTable() { this. ...

  9. 哈希表之bkdrhash算法解析及扩展

    BKDRHASH是一种字符哈希算法,像BKDRHash,APHash.DJBHash,JSHash,RSHash.SDBMHash.PJWHash.ELFHash等等,这些都是比較经典的,通过http ...

随机推荐

  1. 【习题 8-10 UVA - 1614】Hell on the Markets

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 证明:前i个数一定能凑够1..sum[i]中的所有数字 i=1时显然成立. 现在假设i>=2时结论成立 即前i个数字能凑出1. ...

  2. Android5.0L退出APP横竖屏切换导致的触摸屏输入(Touch Event)无效(冻屏)问题分析(Key Event仍然有效)

    .Nexus4和Nexus5在相同的简单測试下没有重现此问题,因没有源代码所以无法Debug和打印log.兴许会尝试获取nexus的源代码以了解它的改动方案. 二.解决方案 通过初步分析.深入分析.对 ...

  3. HDU 1533 Going Home(KM完美匹配)

    HDU 1533 Going Home 题目链接 题意:就是一个H要相应一个m,使得总曼哈顿距离最小 思路:KM完美匹配,因为是要最小.所以边权建负数来处理就可以 代码: #include <c ...

  4. 一个令人蛋疼的NDK链接错误

    背景 我们APP的引擎包engine.so.包括了A.B.C三个project.但每次都是源代码形式编译,导致svn上存在多份同样代码拷贝. 很不科学. ..核心的Bproject由我维护.整个SO编 ...

  5. Cisco安全防护读书笔记之一Cisco系统设备协议漏洞

    650) this.width=650;" onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=" ...

  6. 轻松学习Linux之本地安装系统

    1.安装Linux前的准备工作(详细讲解了系统分区,及类型) 2.轻松学习Linux之用光驱安装 3.轻松学习Linux之用光驱安装(之二) 4.硬盘安装Linux系统 本文出自 "李晨光原 ...

  7. arm-linux-gcc 命令未找到问题

    解决方法: 1.先打开一个超级用户权限的shell: 命令: ubuntu :sudo –s centos :su - 2.在当前shell下,设置环境变量: 命令:gedit /etc/profil ...

  8. 腾讯2016实习生面试经验(已经拿到offer)

      忐忑了好几天,今天最终收到深圳总部的电话.允许录用我为2016年实习生,感觉整个天空都放晴了.坐标:武汉大学,给大家说说我的面试经历吧,我投的是软件开发--应用开发方向. 一.校招流程 投递简历- ...

  9. 关于React中,map出来的元素添加事件问题

    用es6 map 的写法 直接绑定一个onTouchStart 事件不会报错. 用es5的map写法  如果不加上this  会报这个错误 无法读取未定义的属性 解决的方法是 绑定this  就可以了

  10. Django的命令

    安装django          : pip install django 创建django项目   :django-admin startproject projectname 启动django项 ...