0

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

このリンクで。それは言う:

内部的には、ヒープは、各ノードがそれ自体の値以下の値にリンクするツリーです。make_heapによって生成されたヒープでは、メモリを消費するリンクによって決定されるのではなく、ツリー内の要素の特定の位置がシーケンス内の絶対位置によって決定されます。*firstは常にヒープ内の最大値です。

約「シーケンス内の絶対位置によって決定されます」。私はここで混乱しました。また、「ヒープは、各ノードがそれ自体の値以下の値にリンクするツリーです」とも書かれています。

それらの2つの文は矛盾していますか?ここでとても混乱しています。C ++のヒープのツリーとは正確には何ですか?

親切な人が私を助けてくれることを願っていますどうもありがとう

4

2 に答える 2

2

ヒープの実装を見ると、ツリーが配列として実装されていることがわかります。iインデックス2 * i+1とのインデックスでノードの下の値を見つけることができます2 * i +2。つまり、これはツリーであり、配列内の絶対位置によって要素にアクセスできます。

于 2011-04-09T06:41:50.617 に答える
2

これは、ヒープには典型的なツリーのような構造があり、各「親」ノードが「子」ノードの値以上であるということです(「...各ノードはそれ自体よりも大きくない値にリンクします価値...")。

次に、リンク(つまり、構造体のポインタ(リンクリストに使用するような))を使用する代わりに、インプレースメモリ(配列とも呼ばれます-"... isシーケンス内の絶対位置によって決定されます...")。

* firstは、ヒープ上の最初の要素(または、コンパレーター機能によっては最大/最小)であり、常に配列の[0]番目のインデックスにあります。各インデックスiについて、子は[2 * i+1]と[2*i+2]にあります。

お役に立てれば。

于 2011-04-09T07:05:54.097 に答える