这不是一道作业题,我今天学习了堆数据结构,但我不知道如何证明该关系式的正确性。谢谢。
这不是一道作业题,我今天学习了堆数据结构,但我不知道如何证明该关系式的正确性。谢谢。
归纳证明:
证明3: 由于假设第k个元素的子节点分别为2k和2k+1(基于假设),那么,其后两个元素分别为2k+2和2k+3.
2k+2 = 2(k+1) (第一个子节点 k+1 的正确性已经被证明)(a)
2k+3 = 2k + 2 + 1 = 2(k+1) + 1 (第二个子节点 k+1 的正确性已经被证明)(b)
从(a) & (b) --> 可以得出3成立,因此元素n的子节点为2n和2n+1。
pair<int, int> pairs[4] = { {2, 3}, {4, 5}, {6, 7}, {8, 9} };
int aggregate[2 * 4];
for (int i = 0; i < 4; i++)
{
aggregate[2 * i] = pairs[i].first;
aggregate[2 * i + 1] = pairs[i].second;
}
pairs[4] = {(2, 3), (4, 5), (6, 7), (8, 9)}
,当我们使用2 * i来访问其左侧子节点时,我们可以认为是跳过由前面顶点生成的-1对孩子。