タグ付けされた質問 「heap」

ヒープ(データ構造)は、深さに関して順序付けられたツリーです。ヒープは、動的割り当て用に確保されたプロセスメモリを参照することもできます。


5
Max-Heapifyの最悪の場合-2n / 3を取得するにはどうすればよいですか?
CLRS、第3版、155ページでは、MAX-HEAPIFYでは、 子のサブツリーのサイズはそれぞれ最大2n / 3です。最悪の場合は、ツリーの最下位レベルがちょうど半分いっぱいになったときに発生します。 ツリーの最下層がちょうど半分いっぱいになったときに最悪になる理由を理解しています。また、この質問では、MAX-HEAPIFYの最悪のケースについても回答されています。「最悪のケースは、ツリーの最下位レベルがちょうど半分いっぱいになったときに発生します」 私の質問は、2n / 3を取得する方法ですか? 最下位レベルが半分いっぱいの場合、子ツリーのサイズが最大2n / 3になるのはなぜですか? それを計算する方法は? ありがとう

7
Cでポインター比較はどのように機能しますか?同じ配列を指さないポインターを比較しても大丈夫ですか?
K&R(Cプログラミング言語第2版)の第5章で以下を読みました。 まず、特定の状況下でポインタを比較できます。もしpとq同じ配列のメンバーへのポイント、その後のような関係==、!=、<、>=、などの作業を適切に。 これは、同じ配列を指すポインターのみを比較できることを意味しているようです。 しかし、私がこのコードを試したとき char t = 't'; char *pt = &t; char x = 'x'; char *px = &x; printf("%d\n", pt > px); 1 画面に出力されます。 まず第一に、私はので、私は、未定義またはいくつかのタイプやエラーになるだろうと思ったptし、px(少なくとも私の理解では)同じ配列を指していません。 またpt > px、両方のポインタがスタックに格納されている変数を指しているため、スタックtが大きくなり、メモリアドレスがx?どちらがpt > px本当ですか? mallocが導入されると、さらに混乱します。また、8.7章のK&Rには、次のように書かれています。 ただし、によって返されるさまざまなブロックへのポインターをsbrk有意義に比較できるという前提はまだ1つあります。これは、配列内でのみポインタ比較を許可する標準では保証されていません。したがって、このバージョンのmallocは、一般的なポインタ比較が意味のあるマシン間でのみ移植可能です。 ヒープでmallocされたスペースを指すポインターとスタック変数を指すポインターを比較しても問題はありませんでした。 たとえば、次のコードは正常に機能し1、印刷されました。 char t = 't'; char *pt = &t; char *px = malloc(10); strcpy(px, pt); …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.