在理想情况下,我们希望不经过任何比较,一次存取便能得到所查的记录,那就必须在记的存储位置和它的关键字之间建立一个确定的对应关系,使每个关键字和一个唯一的存储位置对应,因而在查找时候,根据这个对应关系与找到对应的值K的像f(K).由此,不需要进行比较便可以直接取得所查结果。在此,我们称这个对应关系是hash函数,按这个思想建立的表为hash表。
在hash表中,对于不同的关键字可能得到同一个hash地址,这种现象称为冲突。
hash tree算法就是要提供一种在理论上和实际应用中都可以有效的处理冲突的方式,一般的hash算法都是O(1)的,而且基本是以空间换区时间。这很容易导致对存储空间的无限制的需求。
理论基础:n个不同的质数可以分辨连续整数的个数和他们的乘机相等。
利用质数分辨法建立哈希表:从2开始到n个质数建立n层hashtree 对质数进行取余决定了处理路径,结点中有一标志位标注这个结点是否有效。
优点:1、结构简单。2、查找迅速,查找次数和元素个数无关,仅与层数有关。3、结构不变,删除时,仅仅改变标志位,不做物理删除。
缺点:非排序性,hash tree不支持排序,没有顺序特性。

hash和hash tree的更多相关文章

  1. Hash Map (Hash Table)

    Reference: Wiki  PrincetonAlgorithm What is Hash Table Hash table (hash map) is a data structure use ...

  2. 字符串Hash/树Hash学习笔记

    哈希 Tags:字符串 作业部落 评论地址 一.概述 百度百科: 散列表(Hash table/哈希表),是根据关键码值(Key value)而直接进行访问的数据结构. 哈希表常用于比较两个字符串是否 ...

  3. window.location.hash(hash应用)---跳转到hash值制定的具体页面

    location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.href=url就可以直接将页面重定向url.而location. ...

  4. hash 跟B+tree的区别

    1.hash只支持in跟=,不支持范围查询,时间复杂度:O(1) 2.B+tree支持范围查询,时间复杂度:O(log n) 3. B+tree 的优点:1.磁盘读取代价更低              ...

  5. mysql 的索引hash和b+tree 区别

    索引hash相当于数组,键值对组合,对于id = 6或者status= 2这样条件查询,但是对于id>12等这样,用btree索引最好.

  6. 海量数据面试题----分而治之/hash映射 + hash统计 + 堆/快速/归并排序

    1.从set/map谈到hashtable/hash_map/hash_set 稍后本文第二部分中将多次提到hash_map/hash_set,下面稍稍介绍下这些容器,以作为基础准备.一般来说,STL ...

  7. hash·余数hash和一致性hash

    网站的伸缩性架构中,分布式的设计是现在的基本应用. 在memcached的分布式架构中,key-value缓存的命中通常采用分布式的算法 一.余数Hash     简单的路由算法可以使用余数Hash: ...

  8. Windows NTLM Hash和Hash传递、Key传递攻击

    Hash(Key) 获取 工具: Mimikatz 用法: .\mimikatz.exe privilege::debug #查看权限 sekurlsa::logonpasswords #获取hash ...

  9. Hash表 hash table 又名散列表

    直接进去主题好了. 什么是哈希表? 哈希表(Hash table,也叫散列表),是根据key而直接进行访问的数据结构.也就是说,它通过把key映射到表中一个位置来访问记录,以加快查找的速度.这个映射函 ...

  10. HASH、HASH函数、HASH算法的通俗理解

    之前经常遇到hash函数或者经常用到hash函数,但是hash到底是什么?或者hash函数到底是什么?却很少去考虑.最近同学去面试被问到这个问题,自己看文章也看到hash的问题.遂较为细致的追究了一番 ...

随机推荐

  1. SQL一文入门助记

    什么是SQL SQL(Structured Query Language)是用于操作数据库的语言.一个博客有许多网站,一个游戏要储存许多游戏的账号密码,这些都离不开数据库操作. 关系型数据库与NoSQ ...

  2. 多种方法实现单例模式 pickle模块

    目录 单例模式 类方法@classmethod实现 元类实现 模块实现 装饰器实现 双下call.反射实现 pickle序列化模块 单例模式 比如系统调用打印机,不管你要打印几次,都是调用同一个打印机 ...

  3. python虚拟环境和venv的使用

    目录 1.环境与虚拟环境 2.查看帮助 3.--system-site-package 命令 4.创建虚拟环境 5.激活/关闭虚拟环境 6.保存和复制虚拟环境 7.改变虚拟环境所指向的真实python ...

  4. war包形式安装jenkins

    (1)下载war包 输入命令:java -jar jenkins.war --httpPort=8080,更改端口 重新登录之后,输入密码创建用户等完成设置 (2)结合Tomcat安装: 将jenki ...

  5. python 实现RSA公钥加密,私钥解密

    from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5 from Cryp ...

  6. [python]《Python编程快速上手:让繁琐工作自动化》学习笔记6

    1. 发送电子邮件和短信笔记(第16章)(代码下载) 1.1 发送电子邮件 简单邮件传输协议(SMTP)是用于发送电子邮件的协议.SMTP 规定电子邮件应该如何格式化.加密.在邮件服务器之间传递,以及 ...

  7. CentOS7升级Linux内核

    CentOS7升级Linux内核 什么是Linux内核 虽然时候使用 Linux 来表示整个操作系统,严格地说,Linux 只是个内核,而发行版的操作系统是一个完整功能的系统,它建立在内核之上,具有各 ...

  8. 使用java代码调用rabbitmq接口进行新增编辑mq用户、虚拟机vhost、动态创建交换机exchange、队列queue以及设置权限,绑定vhost与exchange等操作

    使用java代码操作rabbitmq时,首先需要一个有创建用户等权限的管理员账号,需要在rabbitmq的后台管理页面手动创建这个账号,系统推荐的这几个tag可以让账号有rabbitmq后台管理页面的 ...

  9. (7)go-micro微服务zap日志配置

    目录 一 Zap日志介绍 二 Zap日志安装 三 Zap日志初始化 四 Zap日志重写方法 五 Zap日志使用 六 最后 一 Zap日志介绍 Zap是在 Go 中实现超快.结构化.分级的日志记录. Z ...

  10. [WPF]将方法设为弃用

    [System.Obsolete("这是一条提示信息,表示这个方法弃用了,使用此方法会有一条Warning信息")] private void SaveDataMessage(Sa ...