私はヒープに関するいくつかの宿題に取り組んでおり、ヒープがどのように構造化されているかを理解しています。ヒープには、ヒープ プロパティを満たす各ノードが必要です。
max-heap プロパティは、ルート以外のすべてのノード i について、Heap[Parent(i)] >= Heap[i] です。
したがって、各ノードでは、上位のノードほど数値が高くなり、下位のノードほど数値が低くなります。これは分かります。しかし、リスト内の最大のn個の数値を単純に取得する以外にヒープを使用する方法は見当たりません。特定の値を検索してノードを返したり、(最大ヒープ内で) n 個の最小値を検索したりする簡単な方法がわかりません。どちらも、二分探索木では比較的簡単です。
単純な二分探索木を使用しないのはなぜですか? それとも、バランスの取れた二分探索木ですか?
編集:これは宿題の問題に対する答えを探しているわけではないことに注意してください。実際の課題は、insert() 関数と extractMax() 関数の並列 p ヒープの疑似コードを作成することでした。そして、私はすでにそれらに答えました。彼らは私がヒープを本当に理解していないことに気づきました。