簡體   English   中英

關於C ++中的make_heap算法

[英]about make_heap algorithm in C++

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

在此鏈接。 它說:

在內部,堆是一棵樹,其中每個節點鏈接到不大於其自身值的值。 在由make_heap生成的堆中,樹中元素的特定位置而不是由消耗內存的鏈接確定,而是由其在序列中的絕對位置確定的,* first始終是堆中的最高值。

關於“由序列中的絕對位置決定”。 我在這里感到困惑。 它還說:“堆是一棵樹,其中每個節點鏈接到不大於其自身值的值”

那兩個句子矛盾嗎? 這里很困惑。 C ++中堆的確切樹是什么?

希望任何善良的人都能幫助我

如果查看堆實現,則會看到樹是作為數組實現的。 您可以在索引i的節點2 * i+12 * i +2的節點下面找到值。 因此它是一棵樹,您可以在其中按元素在數組中的絕對位置對其進行訪問。

這表示堆具有典型的樹狀結構,其中每個“父”節點都大於或等於“子”節點的值(“ ...其中每個節點鏈接到的值不大於其自身的值”值...”)。

然后繼續說,它使用了就地內存(否則稱為數組,即“ ... is”,而不是使用鏈接(例如,結構中的指針(如您要用於鏈接列表的指針))。由其在序列中的絕對位置確定...”)。

* first是堆上的第一個元素(或最大/最小,取決於比較器功能),並且始終在數組的第[0]個索引處。 對於每個索引i,子項位於[2 * i + 1]和[2 * i + 2]。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM