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的搜索数据

858

被折叠的 条评论
为什么被折叠?



