关于C ++中的make_heap算法

时间:2011-04-09 06:32:33

标签: c++ heap

http://www.cplusplus.com/reference/algorithm/make_heap/

在此链接中。它说:

  

在内部,堆是一棵树   每个节点链接到不大的值   比它自己的价值。在生成的堆中   通过make_heap,具体位置   树中的元素而不是   由记忆消耗决定   链接由其绝对决定   在序列中的位置,*先   永远是最高价值的   堆。

关于“由其在序列中的绝对位置决定”。 我在这里很困惑。 它还说“堆是一棵树,每个节点都链接到不超过其自身值的值”

那两句话是否矛盾?这里很困惑。 C ++中堆的确切内容是什么?

希望任何善良的人都可以帮助我 非常感谢

2 个答案:

答案 0 :(得分:2)

如果查看堆实现,您会看到树是作为数组实现的。您可以在索引i2 * i+1的索引2 * i +2处找到节点下方的值。所以它是一棵树,你可以通过它们在数组中的绝对位置来访问元素。

答案 1 :(得分:2)

这说明堆具有典型的树状结构,其中每个“父”节点大于或等于“子”节点的值(“...其中每个节点链接到的值不大于而不是它自己的价值......“)。

然后继续说,而不是使用链接(即指针,例如,结构(就像你将用于链表)),它使用就地内存(也称为数组 - “。 ..由它在序列中的绝对位置决定......“)。

* first是堆上的第一个元素(或者最大/最小,取决于比较器函数),并且始终位于数组的第[0]个索引处。对于每个索引i,孩子们位于[2 * i + 1]和[2 * i + 2]。

希望这有帮助。