算法练习--二分搜索哈希表-JS 实现
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 实现的更多相关文章
- Android版数据结构与算法(四):基于哈希表实现HashMap核心源码彻底分析
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 存储键值对我们首先想到HashMap,它的底层基于哈希表,采用数组存储数据,使用链表来解决哈希碰撞,它是线程不安全的,并且存储的key只能有一个为 ...
- java数据结构和算法09(哈希表)
树的结构说得差不多了,现在我们来说说一种数据结构叫做哈希表(hash table),哈希表有是干什么用的呢?我们知道树的操作的时间复杂度通常为O(logN),那有没有更快的数据结构?当然有,那就是哈希 ...
- js实现哈希表(HashTable)
在算法中,尤其是有关数组的算法中,哈希表的使用可以很好的解决问题,所以这篇文章会记录一些有关js实现哈希表并给出解决实际问题的例子. 第一部分:相关知识点 属性的枚举: var person = { ...
- js模拟实现哈希表
在算法中,尤其是有关数组的算法中,哈希表的使用可以很好的解决问题,所以这篇文章会记录一些有关js实现哈希表并给出解决实际问题的例子. 说明: 这篇博客所写并不是真正意义的哈希表,只是与哈希表的使用有相 ...
- 简单的哈希表实现 C语言
简单的哈希表实现 简单的哈希表实现 原理 哈希表和节点数据结构的定义 初始化和释放哈希表 哈希散列算法 辅助函数strDup 哈希表的插入和修改 哈希表中查找 哈希表元素的移除 哈希表打印 测试一下 ...
- 哈希表查找(散列表查找) c++实现HashMap
算法思想: 哈希表 什么是哈希表 在前面讨论的各种结构(线性表.树等)中,记录在结构中的相对位置是随机的,和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较.这一类 ...
- python code practice(二):KMP算法、二分搜索的实现、哈希表
1.替换空格 题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析: 将长度为 ...
- js:数据结构笔记7--哈希表
哈希表(散列表):通过哈希函数将键值映射为一个字典; 哈希函数:依赖键值的数据类型来构建一个哈希函数: 一个基本的哈希表:(按字符串计算键值) function HashTable() { this. ...
- 哈希表之bkdrhash算法解析及扩展
BKDRHASH是一种字符哈希算法,像BKDRHash,APHash.DJBHash,JSHash,RSHash.SDBMHash.PJWHash.ELFHash等等,这些都是比較经典的,通过http ...
随机推荐
- 计算机视觉(ComputerVision, CV)相关领域的站点链接
关于计算机视觉(ComputerVision, CV)相关领域的站点链接,当中有CV牛人的主页.CV研究小组的主页,CV领域的paper,代码.CV领域的最新动态.国内的应用情况等等. (1)goog ...
- 怎样在nat方式的虚拟机下做ssh连接
很多人在本机做測试都是用桥接的方式让虚拟机上网. 假设ip地址紧张或者根本就不同意我们拥有一个局域网的ip.这时候便能够使用NAT方式+putty来远程操作. 第一步,打开设备-Network-更改网 ...
- 对AWS的计费有点糊涂
对AWS的计费有点糊涂 今天收到亚马逊的账单,就两笔 1. US West (Oregon) Region Elastic IP Addresses $0.005 per Elastic IP ...
- Cookie应用--显示看过的商品
package cn.itcast; import java.io.IOException; import java.io.PrintWriter; import java.util.LinkedHa ...
- 1.18 Python基础知识 - Python内置函数
官方地址:https://docs.python.org/3.5/library/functions.html abs(x): 返回数字的绝对值 all(iterable): 如果迭代器的所有元素都为 ...
- 通俗理解vuex原理---通过vue例子类比
本文主要通过简单的理解来解释下vuex的基本流程,而这也是vuex难点之一. 首先我们先了解下vuex的作用 vuex其实是集中的数据管理仓库,相当于数据库mongoDB,MySQL等,任何组件都可以 ...
- AJAX - 基本流程和特点
<script> window.onload = function(ev){ var oBtn = document.querySelector('button'); // querySe ...
- python学习 第六天课后总结:
<br class="Apple-interchange-newline"><div></div> python学习 第六天课后总结 ...
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第二篇:第一个页面
摘要 本文首先一步一步完成Demo的第一个页面——首页.然后根据实现过程,说明一下其中用到的与ASP.NET MVC相关的概念与原理. 让第一个页面跑起来 现在,我们来实现公告系统 ...
- app 自动化测试 Appium+Java可以运行的代码
地址:http://www.cnblogs.com/sunny-sl/p/6520465.html