6

ウィキペディア ( http://en.wikipedia.org/wiki/Heap_(data_structure) )で与えられたヒープの定義は

コンピューター サイエンスでは、ヒープはヒープ プロパティを満たす特殊なツリー ベースのデータ構造です。A が B の親ノードである場合、キー (A) はキー (B) に対して順序付けられ、同じ順序付けがヒープ全体に適用されます。 . 親ノードのキーが常に子ノードのキー以上であり、最上位のキーがルート ノードにある (この種のヒープは最大ヒープと呼ばれます) か、親ノードのキーがそれらのキー以下です。子 (最小ヒープ)

定義は、ツリーが完全であることについて何も述べていません。例えば、この定義によれば、5 => 4 => 3 => 2 => 1 というルート要素が 5 で、すべての子孫が右の子である二分木も、ヒープ プロパティを満たします。ヒープデータ構造の正確な定義を知りたいです。

4

2 に答える 2

2

他の人がコメントで言ったように:それヒープの定義であり、あなたの例のツリーはヒープですが、縮退/不均衡なものです。ツリーが完全である、または少なくとも適度にバランスが取れていることは、ツリーでのより効率的な操作に役立ちます。しかし、バランスの取れていない二分探索木が依然として二分探索木であるように、非効率なヒープも依然としてヒープです。

「ヒープ」はデータ構造を指すのではなく、ヒープ プロパティを満たす任意のデータ構造、または (コンテキストに応じて) 特定の操作セットを指すことに注意してください。ヒープであるデータ構造の中で、最も効率的なものは、明示的または暗黙的に、ツリーが完全であるかある程度バランスが取れていることを保証します。たとえば、バイナリ ヒープは定義上、完全なバイナリ ツリーです。

いずれにせよ、なぜあなたは気にしますか?特定の操作の特定の下限または上限が気になる場合は、ヒープを要求する代わりにそれらを記述してください。ヒープと完全なツリーである特定のデータ構造について議論する場合は、単にヒープについて話すのではなく、そのことを述べてください(もちろん、完全性が重要であると仮定して)。

于 2012-10-16T20:10:23.490 に答える