【发布时间】:2018-07-03 00:23:45
【问题描述】:
在基于数组的堆中,假设项目以宽度一阶插入,深度 D 处的每一行的大小可以轻松评估。因为堆是平衡树。
RowSize = pow(2, D);
最大深度也可以很容易地计算出来。
MaxD = log2(Count);
但是最后一行的大小是多少。如何知道最深的叶子数?
理论最大值是 MaxD 的 2 次方。但它可以小于这个值。我想知道那个号码
【问题讨论】:
标签: math heap binary-tree
在基于数组的堆中,假设项目以宽度一阶插入,深度 D 处的每一行的大小可以轻松评估。因为堆是平衡树。
RowSize = pow(2, D);
最大深度也可以很容易地计算出来。
MaxD = log2(Count);
但是最后一行的大小是多少。如何知道最深的叶子数?
理论最大值是 MaxD 的 2 次方。但它可以小于这个值。我想知道那个号码
【问题讨论】:
标签: math heap binary-tree
最后一行大小是
Count - (int)pow(2, maxD) + 1;
感谢 wolframAlpba 揭示公式。
【讨论】:
maxD 和pow(2, maxD)。否则,你会得到不正确的结果。我想你想要Count - (int)pow(2, (int)maxD) + 1
2^maxD 是2^log2(Count) 所以数学上Count - (2^maxD) + 1 等于1。所以截断在这里很重要!