012-数据结构-树形结构-哈希树[hashtree]

匿名 (未验证) 提交于 2019-12-02 23:34:01

一、概述

1.1.、其他树背景

  二叉排序树,平衡二叉树,红黑树等二叉排序树。在大数据量时树高很深,我们不断向下找寻值时会比较很多次。二叉排序树自身是有顺序结构的,每个结点除最小结点和最大结点外都有前驱和后继,不论是排序还是搜索它的综合性能比较好,但是单独在搜索这一方面二叉排序树的性能就可能没有Hash树快。

1.2、基础理论

1.2.1、质数分辨定理

  什么是质数 : 即只能被 1 和 本身 整除的数。

  为什么用质数:因为N个不同的质数可以 ”辨别“ 的连续整数的数量,与这些质数的乘积相同。

    百度文库解答:https://wenku.baidu.com/view/16b2c7abd1f34693daef3e58.html

  示例、从2起的连续质数,连续10个质数就可以分辨大约M(10) =2*3*5*7*11*13*17*19*23*29= 6464693230 个数,已经超过计算机中常用整数(32bit)的表达范围。连续100个质数就可以分辨大约M(100) = 4.711930 乘以10的219次方。

  而按照目前的CPU水平,100次取余的整数除法操作几乎不算什么难事。在实际应用中,整体的操作速度往往取决于节点将关键字装载内存的次数和时间。一般来说,装载的时间是由关键字的大小和硬件来决定的;在相同类型关键字和相同硬件条件下,实际的整体操作时间就主要取决于装载的次数。他们之间是一个成正比的关系。

1.2.2、余数分辨定理

这个定理可以简单的表述为:n个不同的数可以“分辨”的连续整数的个数不超过他们的最小公倍数。超过这个范围就意味着冲突的概率会增加。定理1是定理2的一个特例。

1.3、基于上述理论分辨算法创建哈希树

  可以选择质数分辨算法来建立一棵哈希树。

  选择从2开始的连续质数来建立一个十层的哈希树。第一层结点为根结点,根结点下有2个结点;第二层的每个结点下有3个结点;依此类推,即每层结点的子节点数目为连续的质数【1,2,3,5,7,11……】。到第十层,每个结点下有29个结点。如下图所示:

    

  原则:求余看对应位置的结点,如果为空则在空处插入一个新节点,如果被逻辑删除了替换值再逻辑恢复,如果有值就继续往下找,继续求余判断。

  示例-插入:有一组元素,按照顺序向hash树中插入元素,取余找位置插入。我们以下图中的 “68” 为例子,68先对2取余得0,但是0位置上有人了,继续对3取余得2,2得位置上也有人了,那就继续对5取余得3,3得位置上没有人则插入 到3的位置。

    

  示例-查询:查询68,我们从2开始取余查找,找对应位置的值是否和它相同,不相同则继续向下取余,直到找到和68相同的数值或者直到为空为止。

1.4、哈希树的应用

  哈希树是一种可以自适应的树。通过给出足够多的不同质数,我们总可以将所有已经出现的关键字进行区别。而质数本身就是无穷无尽的。这种方式使得关键字空间和地址空间不再是压缩对应方式,而是完全可以等价的。

  哈希树可以广泛应用于那些需要对大容量数据进行快速匹配操作的地方。例如:数据库索引系统、短信息中的收条匹配、大量号码路由匹配、信息过滤匹配。程序员可以利用各种代码来实现哈希树结构。它可以为程序员提供一种使用起来更加方便,更加简单的快速数据存储方式。

1.5、优点和缺点



结构不变 即使删除属于也不会改变结构,

缺点:非排序性 就是数据时没有顺序的

代码地址:地址

参看地址:

  https://blog.csdn.net/xushiyu1996818/article/details/89396909

  https://blog.csdn.net/winter_wu_1998/article/details/79555936

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!