私は最小ヒープと最大ヒープを研究しましたが、いくつか質問があります。
- ソートされた配列は最小ヒープですか?
- 最大ヒープの最小値はいくつですか?
配列ベースのヒープ実装を使用する場合、最小から最大にソートされた配列は最小ヒープです。親ノードの値が子ノード(ゼロベースの配列を使用する場合は2i+1および2i+2)以下であるmin-heapプロパティは、子を持つすべてのノードに適用されます。
最大ヒープの最小値はリーフノードの1つにありますが、どちらかはわかりません。最小ノードは、定義上、子ノードを持つことができないため、リーフである必要があります。ただし、heapプロパティは、リーフノードが互いにどのように比較されるかを指定せず、親とのみ比較します。
ソートされた配列は最小ヒープですか?
はい、一般的な配列格納ヒープ規則を使用している場合は可能です。
最大ヒープの最小値はどこにありますか?
葉の1つ。これは正確には未定義です。
2 * i+1および2*i + 2(iは0から開始)と比較して、インデックスiの配列としてバイナリヒープを実装できます。最小ヒープでa[i]<a [2 * i+1]およびa[i]<a [2 * i + 2]
それで
1。ソートされた配列は最小ヒープです。
2。特定のインデックスはありません。それがただの葉であることを私たちが知っているすべて
このhttp://en.wikipedia.org/wiki/Binary_heapを読むことをお勧めします
最大ヒープの最小値はどこにありますか?
回答:最大ヒープは、インデックスが1からnまでの単純な配列を使用して表すことができます。最初の要素は最大ヒープのルートです。ヒーププロパティ:インデックスiのノードは、2iに子を残し、2i + 1に右の子を持っています(2iと2i + 1がヒープサイズ、つまり配列の長さよりも小さい場合)。
最大ヒープのリーフノードは、インデックスi+1からnまで見つかります。ここでi=n / 2; nは配列の長さです。そして、リーフノードの1つに最小値があります。
したがって、a [i+1]からa[n]の値から最大ヒープの最小値を見つけることができます。最小値を見つけるための時間計算量はorder-of(ni)です。
- ソートされた配列は最小ヒープですか?
昇順で並べられている場合(はい、一般的に言えば、最小ヒープ、より正確には) 、次のルールを使用したバイナリヒープの配列実装です。
同時に、逆には機能しません。配列ベースのバイナリヒープは、並べ替えられたリストを格納しません。
- 最大ヒープの最小値はどこにありますか?
これは定義されておらず、キーを最小ヒープに格納するときにすばやく答えたい質問ではありません。O(1)時間でヒープの最小値と最大値の両方をピークできるようにしたい場合は、JavaのMinMaxPriorityQueueなどのクラスを使用できます。
ソートされた配列は最小ヒープですか?
ソートされた配列はmin-heapまたはmax-heapのいずれかですが、その逆は真ではありません。min
-heapまたはmax-heapは必ずしもソートされた配列ではありません。
最大ヒープの最小値はいくつですか?
max-heap(または優先キュー)は、定義上、O(1)時間のコレクションから最大値を提供します。誰かが最大ヒープから最小値を取得する必要がある場合、この問題のために最初にヒープ自体を使用することは正しくありません。これは、スタックがFIFOアクセスを提供することを期待したり、キューがLIFOアクセスを提供することを期待したりするようなものです。
ただし、jfyi、最小値は、ヒープによって形成されたツリーの葉の1つになります。どのサブツリーにも存在する可能性があります。したがって、それを見つけるのにO(1)時間以上かかる別のアルゴリズムが必要です。
補足として:
n個の要素を持つヒープには、[1から(n + 1)/2]の葉がある場合があります。
ヒープによって形成される木の高さがhの場合、ヒープには最大2 ^(h-1)の葉があります。
配列は、昇順または降順で並べ替えることができます。「ソートされた配列は最小ヒープです」というステートメントは部分的に正しいです。このステートメントの正しいバージョンは「昇順でソートされた配列は最小ヒープとして扱うことができます」であり、その補足ステートメントは「降順でソートされた配列は最大ヒープとして扱うことができます」です。
「昇順でソートされた配列は、最小ヒープとして扱うことができます」
ただし、「すべての最小ヒープが昇順でソートされた配列の形式をとることができるわけではない」ことを覚えておいてください。
そして、最大ヒープの最小値については、これが葉に存在することだけがわかっており、O(n)で検索できます。
常に真実は:
昇順でソートされたリストはすべて最小ヒープです。
試してみてください。このルールにも例外はありません。