Hash树

    Hash树,又称散列树。网络上未能找到其定义。以下为个人看法:

   定义P为质数集合,有P={p1,p2,…,pi,…},其中i>=1,i为整数,有pi<pi+1

   如果一个i层树,如果其第i层(i>=3)的节点个数为pi-2*pi-1,且对于每一个位于第i-1层的节点,都拥有pi-1个子节点。同时该树有一个根节点,第2层有2个节点,则称该树为i层Hash树(或i层散列树)。

    作用:根据Hash树的定义,Hash树拥有阶乘级的节点个数,而再基于筛选作用,Hash树就能成为一个高效率搜索的数据结构了。

    快速搜索原理:

         1、选择根节点为活结点

2、对于一个搜索对象,使该对象模p1取余(记为x),根据结果让该对象和第2层的第x+1个节点的数对比,如果相等则返回结果并结束搜索,否则则选择第2层的第x+1个节点为活节点,并进入搜索下一层节点的操作

3、当活节点所在层数为i层时,即搜索第i+1层的节点时,使该对象模pi取余(记为x),根据结果让该对象和活结点的第x+1个子节点的数据对比,如果相等则返回结果并结束搜索,否则则选择第i+1层的第x+1个节点为活节点,并进入搜索下一层节点的操作

4、若搜索至叶子节点还未能找到结果,则代表无与搜索对象匹配的元素

    例子1:构造一个4层Hash树:

            1、第一层:产生一个根节点

            2、第二层:根节点下产生两个子节点(质数2)

           3、第三层:每个第二层节点下均产生三个子节点(质数3)

           4、第四层:每个第二层节点下均生成五个子节点(质数5)

    

    例子2:搜索一个Hash树,是否存在元素250:

           1、定义根节点为活结点:

            2、由第二层开始搜索:250模2=0(整除取余),故将250与活结点的第一个(余数0+1)子节点比对,相等则返回结果,终止搜索;不等则定义活结点的第一个(余数0+1)子节点为新的活结点。若第二层节点为叶子节点,则终止搜索,返回无匹配值,否则进入搜索下一层

           3、搜索第三层:250模3=1,故将250与活结点(此时活结点位于Hash树的第2层)的第二个(余数1+1)子节点不对,相等则返回结果,终止搜索;不等则定义活结点的第二个(余数1+1)子节点为新的活结点 。若第三层节点为叶子节点,则终止搜索,返回无匹配值,否则进入搜索下一层

          4、搜索第四层:250模4=2,故将250与活结点(此时活结点位于Hash树的第3层)的第二个(余数2+1)子节点不对,相等则返回结果,终止搜索;不等则定义活结点的第二个(余数2+1)子节点为新的活结点 。若第三层节点为叶子节点,则终止搜索,返回无匹配值,否则进入搜索下一层 

           。。。。。            

      思考:Hash树搜索高效率的原因,基于每进行一次搜索的同时,筛选掉了n-1/n的搜索数据


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值