http://www.cplusplus.com/reference/algorithm/make_heap/
在此链接中。它说:
在内部,堆是一棵树 每个节点链接到不大的值 比它自己的价值。在生成的堆中 通过make_heap,具体位置 树中的元素而不是 由记忆消耗决定 链接由其绝对决定 在序列中的位置,*先 永远是最高价值的 堆。
关于“由其在序列中的绝对位置决定”。 我在这里很困惑。 它还说“堆是一棵树,每个节点都链接到不超过其自身值的值”
那两句话是否矛盾?这里很困惑。 C ++中堆的确切内容是什么?
希望任何善良的人都可以帮助我 非常感谢
答案 0 :(得分:2)
如果查看堆实现,您会看到树是作为数组实现的。您可以在索引i
和2 * i+1
的索引2 * i +2
处找到节点下方的值。所以它是一棵树,你可以通过它们在数组中的绝对位置来访问元素。
答案 1 :(得分:2)
这说明堆具有典型的树状结构,其中每个“父”节点大于或等于“子”节点的值(“...其中每个节点链接到的值不大于而不是它自己的价值......“)。
然后继续说,而不是使用链接(即指针,例如,结构(就像你将用于链表)),它使用就地内存(也称为数组 - “。 ..由它在序列中的绝对位置决定......“)。
* first是堆上的第一个元素(或者最大/最小,取决于比较器函数),并且始终位于数组的第[0]个索引处。对于每个索引i,孩子们位于[2 * i + 1]和[2 * i + 2]。
希望这有帮助。