d-ary堆中节点的子节点索引的公式

时间:2017-01-02 19:28:27

标签: algorithm heap

假设我们有一个d-ary堆,我们从上到下,从左到右(从1开始)索引节点。然后来自节点i的子节点是索引为d i,...,d i +(d-1)的节点。我在几本书中读到了这个公式,但没有一个是解释为什么这些公式是真的。也许我忽视了一些事情,但这些公式是否真的很清楚呢?

2 个答案:

答案 0 :(得分:1)

我找到d * i + 2 - d作为第一个孩子的索引,如果是项目 从1开始编号。这是推理

每行包含上一行的子项。如果是n[r]r上的项目数量,必须有n[r+1] = d * n[r],其中 如果第一行的编号为n[r] = d**r,则证明0。该指数 行r的第一项的总和为f[r] = 1 + (d**r - 1)/(d - 1) 几何序列。如果编号为i的项目X位于行r上,请让我们写一下 i = f[r] + k 0 <= k < d**r k。在X之前的行上有d * k个项目, 因此在X的第一个孩子在第r + 1行之前有f[r+1] + d * k = f[r+1] + d * (i - f[r])项。该 X的第一个孩子的索引是d * i + 2 - d 微积分为第一个孩子的索引提供d * i + 1

实际上,如果我们开始将项目从0而不是1开始编号,那么对于第一个孩子的索引,公式变为i+1,这很容易通过归纳证明,因为第一个孩子的索引项目d是通过添加(d * i + 1) + d = d * (i + 1) + 1获得的,但quantlib

答案 1 :(得分:-1)

这个图表可能会有所帮助,至少d = 2:

 1
 2                       3
 4           5           6           7
 8     9    10    11    12    13    14    15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31