d-heap的子节点与父节点关系

D-heap就是D叉堆,也就是说有d个子节点的堆

如何确定第i个节点的子节点和父节点的序号呢?

我们不妨假设第一个节点就是1,那么第一个子节点就是1*d-d+2(即2),最后一个子节点就i*d+1(d+1个)

显然,我们假设的1对于子节点的推断没有影响,那么对于第i个节点,它的第一个子节点就是i*d-d+1,最后一个子节点就i*d+1

如果求父节点呢?根据子节点的关系,我们能发现,如果直接用i/d,那么对于第一个子节点,这个数字是    k-1(假设k为父节点的编号,d>2),对于最后一个子节点这个数字是k,我们如果用一个offset i+d-2,那么对于第一个子节点就是(i*d-d+2 +d-2 )/d = k,最后一个节点就是(k*d+d-1)/ d = k(因为d-1/d向下取整是0)最终这个结果统一了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值